]> pere.pagekite.me Git - homepage.git/blob - blog/tags/debian/index.html
300376be757eac654aefee5a4877e9df1c01c4a5
[homepage.git] / blog / tags / debian / index.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
4 <head>
5 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
6 <title>Petter Reinholdtsen: Entries Tagged debian</title>
7 <link rel="stylesheet" type="text/css" media="screen" href="http://people.skolelinux.org/pere/blog/style.css" />
8 <link rel="stylesheet" type="text/css" media="screen" href="http://people.skolelinux.org/pere/blog/vim.css" />
9 <link rel="alternate" title="RSS Feed" href="debian.rss" type="application/rss+xml" />
10 </head>
11 <body>
12 <div class="title">
13 <h1>
14 <a href="http://people.skolelinux.org/pere/blog/">Petter Reinholdtsen</a>
15
16 </h1>
17
18 </div>
19
20
21 <h3>Entries tagged "debian".</h3>
22
23 <div class="entry">
24 <div class="title">
25 <a href="http://people.skolelinux.org/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>
26 </div>
27 <div class="date">
28 11th September 2020
29 </div>
30 <div class="body">
31 <p>Thanks to the good work of several volunteers, the updated edition
32 of the Norwegian translation for
33 "<a href="https://debian-handbook.info/">The Debian Administrator's
34 Handbook</a>" is now almost completed. After many months of proof
35 reading, I consider the proof reading complete enough for us to move
36 to the next step, and have asked for the print version to be prepared
37 and sent of to the print on demand service lulu.com. While it is
38 still not to late if you find any incorrect translations on
39 <a href="https://hosted.weblate.org/languages/nb_NO/debian-handbook/">the
40 hosted Weblate service</a>, but it will be soon. :) You can check out
41 <a href=" https://debian-handbook.info/browse/nb-NO/stable/">the Buster
42 edition on the web</a> until the print edition is ready.</p>
43
44 <p>The book will be for sale on lulu.com and various web book stores,
45 with links available from the web site for the book linked to above.
46 I hope a lot of readers find it useful.</p>
47
48 <p>As usual, if you use Bitcoin and want to show your support of my
49 activities, please send Bitcoin donations to my address
50 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
51
52 </div>
53 <div class="tags">
54
55
56 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
57
58
59 </div>
60 </div>
61 <div class="padding"></div>
62
63 <div class="entry">
64 <div class="title">
65 <a href="http://people.skolelinux.org/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>
66 </div>
67 <div class="date">
68 4th July 2020
69 </div>
70 <div class="body">
71 <p>Three years ago, the first Norwegian Bokmål edition of
72 "<a href="https://debian-handbook.info/">The Debian Administrator's
73 Handbook</a>" was published. This was based on Debian Jessie. Now a
74 new and updated version based on Buster is getting ready. Work on the
75 updated Norwegian Bokmål edition has been going on for a few months
76 now, and yesterday, we reached the first mile stone, with 100% of the
77 texts being translated. A lot of proof reading remains, of course,
78 but a major step towards a new edition has been taken.</p>
79
80 <p>The book is translated by volunteers, and we would love to get some
81 help with the proof reading. The translation uses
82 <a href="https://hosted.weblate.org/languages/nb_NO/debian-handbook/">the
83 hosted Weblate service</a>, and we welcome everyone to have a look and
84 submit improvements and suggestions. There is also a proof readers
85 PDF available on request, get in touch if you want to help out that
86 way.</p>
87
88 <p>As usual, if you use Bitcoin and want to show your support of my
89 activities, please send Bitcoin donations to my address
90 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
91
92 </div>
93 <div class="tags">
94
95
96 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
97
98
99 </div>
100 </div>
101 <div class="padding"></div>
102
103 <div class="entry">
104 <div class="title">
105 <a href="http://people.skolelinux.org/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>
106 </div>
107 <div class="date">
108 6th June 2020
109 </div>
110 <div class="body">
111 <p>As a member of the <a href="https://www.nuug.no/">Norwegian Unix
112 User Group</a>, I have the pleasure of receiving the
113 <a href="https://www.usenix.org/">USENIX</a> magazine
114 <a href="https://www.usenix.org/publications/login/">;login:</a>
115 several times a year. I rarely have time to read all the articles,
116 but try to at least skim through them all as there is a lot of nice
117 knowledge passed on there. I even carry the latest issue with me most
118 of the time to try to get through all the articles when I have a few
119 spare minutes.</p>
120
121 <p>The other day I came across a nice article titled
122 "<a href="https://www.usenix.org/publications/login/winter2018/oneill">The
123 Secure Socket API: TLS as an Operating System Service</a>" with a
124 marvellous idea I hope can make it all the way into the POSIX standard.
125 The idea is as simple as it is powerful. By introducing a new
126 socket() option IPPROTO_TLS to use TLS, and a system wide service to
127 handle setting up TLS connections, one both make it trivial to add TLS
128 support to any program currently using the POSIX socket API, and gain
129 system wide control over certificates, TLS versions and encryption
130 systems used. Instead of doing this:</p>
131
132 <p><blockquote><pre>
133 int socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
134 </pre></blockquote></p>
135
136 <p>the program code would be doing this:<p>
137
138 <p><blockquote><pre>
139 int socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TLS);
140 </pre></blockquote></p>
141
142 <p>According to the ;login: article, converting a C program to use TLS
143 would normally modify only 5-10 lines in the code, which is amazing
144 when compared to using for example the OpenSSL API.</p>
145
146 <p>The project has set up the
147 <a href="https://securesocketapi.org/">https://securesocketapi.org/</a>
148 web site to spread the idea, and the code for a kernel module and the
149 associated system daemon is available from two github repositories:
150 <a href="https://github.com/markoneill/ssa">ssa</a> and
151 <a href="https://github.com/markoneill/ssa-daemon">ssa-daemon</a>.
152 Unfortunately there is no explicit license information with the code,
153 so its copyright status is unclear. A
154 <a href="https://github.com/markoneill/ssa/issues/2">request to solve
155 this</a> about it has been unsolved since 2018-08-17.</p>
156
157 <p>I love the idea of extending socket() to gain TLS support, and
158 understand why it is an advantage to implement this as a kernel module
159 and system wide service daemon, but can not help to think that it
160 would be a lot easier to get projects to move to this way of setting
161 up TLS if it was done with a user space approach where programs
162 wanting to use this API approach could just link with a wrapper
163 library.</p>
164
165 <p>I recommend you check out this simple and powerful approach to more
166 secure network connections. :)</p>
167
168 <p>As usual, if you use Bitcoin and want to show your support of my
169 activities, please send Bitcoin donations to my address
170 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
171
172 </div>
173 <div class="tags">
174
175
176 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin</a>.
177
178
179 </div>
180 </div>
181 <div class="padding"></div>
182
183 <div class="entry">
184 <div class="title">
185 <a href="http://people.skolelinux.org/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>
186 </div>
187 <div class="date">
188 8th May 2020
189 </div>
190 <div class="body">
191 <p>Half a year ago,
192 <a href="http://people.skolelinux.org/pere/blog/Jami_Ring__finally_functioning_peer_to_peer_communication_client.html">I
193 wrote</a> about <a href="https://jami.net/">the Jami communication
194 client</a>, capable of peer-to-peer encrypted communication. It
195 handle both messages, audio and video. It uses distributed hash
196 tables instead of central infrastructure to connect its users to each
197 other, which in my book is a plus. I mentioned briefly that it could
198 also work as a SIP client, which came in handy when the higher
199 educational sector in Norway started to promote Zoom as its video
200 conferencing solution. I am reluctant to use the official Zoom client
201 software, due to their <a href="https://zoom.us/terms">copyright
202 license clauses</a> prohibiting users to reverse engineer (for example
203 to check the security) and benchmark it, and thus prefer to connect to
204 Zoom meetings with free software clients.</p>
205
206 <p>Jami worked OK as a SIP client to Zoom as long as there was no
207 password set on the room. The Jami daemon leak memory like crazy
208 (approximately 1 GiB a minute) when I am connected to the video
209 conference, so I had to restart the client every 7-10 minutes, which
210 is not a great. I tried to get other SIP Linux clients to work
211 without success, so I decided I would have to live with this wart
212 until someone managed to fix the leak in the dring code base. But
213 another problem showed up once the rooms were password protected. I
214 could not get my dial tone signaling through from Jami to Zoom, and
215 dial tone signaling is used to enter the password when connecting to
216 Zoom. I tried a lot of different permutations with my Jami and
217 Asterisk setup to try to figure out why the signaling did not get
218 through, only to finally discover that the fundamental problem seem to
219 be that Zoom is simply not able to receive dial tone signaling when
220 connecting via SIP. There seem to be nothing wrong with the Jami and
221 Asterisk end, it is simply broken in the Zoom end. I got help from a
222 very skilled VoIP engineer figuring out this last part. And being a
223 very skilled engineer, he was also able to locate a solution for me.
224 Or to be exact, a workaround that solve my initial problem of
225 connecting to password protected Zoom rooms using Jami.</p>
226
227 <p>So, how do you do this, I am sure you are wondering by now. The
228 trick is already
229 <a href="https://support.zoom.us/hc/en-us/articles/202405539-H-323-SIP-Room-Connector-Dial-Strings#sip">documented
230 from Zoom</a>, and it is to modify the SIP address to include the room
231 password. What is most surprising about this is that the
232 automatically generated email from Zoom with instructions on how to
233 connect via SIP do not mention this. The SIP address to use normally
234 consist of the room ID (a number), an @ character and the IP address
235 of the Zoom SIP gateway. But Zoom understand a lot more than just the
236 room ID in front of the at sign. The format is "<tt>[Meeting
237 ID].[Password].[Layout].[Host Key]</tt>", and you can hear see how you
238 can both enter password, control the layout (full screen, active
239 presence and gallery) and specify the host key to start the meeting.
240 The full SIP address entered into Jami to provide the password will
241 then look like this (all using made up numbers):</p>
242
243 <p><blockquote>
244 <tt>sip:657837644.522827@192.168.169.170</tt>
245 </blockquote></p>
246
247 <p>Now if only jami would reduce its memory usage, I could even
248 recommend this setup to others. :)</p>
249
250 <p>As usual, if you use Bitcoin and want to show your support of my
251 activities, please send Bitcoin donations to my address
252 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
253
254 </div>
255 <div class="tags">
256
257
258 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>.
259
260
261 </div>
262 </div>
263 <div class="padding"></div>
264
265 <div class="entry">
266 <div class="title">
267 <a href="http://people.skolelinux.org/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>
268 </div>
269 <div class="date">
270 29th April 2020
271 </div>
272 <div class="body">
273 <p>The curiosity got the better of me when
274 <a href="https://developers.slashdot.org/story/20/04/06/1424246/new-jersey-desperately-needs-cobol-programmers">Slashdot
275 reported</a> that New Jersey was desperately looking for
276 <a href="https://en.wikipedia.org/wiki/COBOL">COBOL</a> programmers,
277 and a few days later it was reported that
278 <a href="https://onezero.medium.com/ibm-rallies-cobol-engineers-to-save-overloaded-unemployment-systems-eeadf13eddce">IBM
279 tried to locate COBOL programmers</a>.</p>
280
281 <p>I thus decided to have a look at free software alternatives to
282 learn COBOL, and had the pleasure to find
283 <a href="https://sourceforge.net/projects/open-cobol/">GnuCOBOL</a> was
284 already <a href="https://tracker.debian.org/pkg/gnucobol">in
285 Debian</a>. It used to be called Open Cobol, and is a "compiler"
286 transforming COBOL code to C or C++ before giving it to GCC or Visual
287 Studio to build binaries.</p>
288
289 <p>I managed to get in touch with upstream, and was impressed with the
290 quick response, and also was happy to see a new Debian maintainer
291 taking over when the original one recently asked to be replaced. A
292 new Debian upload was done as recently as yesterday.</p>
293
294 <p>Using the Debian package, I was able to follow a simple COBOL
295 introduction and make and run simple COBOL programs. It was fun to
296 learn a new programming language. If you want to test for yourself,
297 <a href="https://en.wikipedia.org/wiki/GnuCOBOL">the GnuCOBOL Wikipedia
298 page</a> have a few simple examples to get you startet.</p>
299
300 <p>As I do not have much experience with COBOL, I do not know how
301 standard compliant it is, but it claim to pass most tests from COBOL
302 test suite, which sound good to me. It is nice to know it is possible
303 to learn COBOL using software without any usage restrictions, and I am
304 very happy such nice free software project as this is available. If
305 you as me is curious about COBOL, check it out.</p>
306
307 <p>As usual, if you use Bitcoin and want to show your support of my
308 activities, please send Bitcoin donations to my address
309 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
310
311 </div>
312 <div class="tags">
313
314
315 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>.
316
317
318 </div>
319 </div>
320 <div class="padding"></div>
321
322 <div class="entry">
323 <div class="title">
324 <a href="http://people.skolelinux.org/pere/blog/Jami_Ring__finally_functioning_peer_to_peer_communication_client.html">Jami/Ring, finally functioning peer to peer communication client</a>
325 </div>
326 <div class="date">
327 19th June 2019
328 </div>
329 <div class="body">
330 <p>Some years ago, in 2016, I
331 <a href="http://people.skolelinux.org/pere/blog/Experience_and_updated_recipe_for_using_the_Signal_app_without_a_mobile_phone.html">wrote
332 for the first time about</a> the Ring peer to peer messaging system.
333 It would provide messaging without any central server coordinating the
334 system and without requiring all users to register a phone number or
335 own a mobile phone. Back then, I could not get it to work, and put it
336 aside until it had seen more development. A few days ago I decided to
337 give it another try, and am happy to report that this time I am able
338 to not only send and receive messages, but also place audio and video
339 calls. But only if UDP is not blocked into your network.</p>
340
341 <p>The Ring system changed name earlier this year to
342 <a href="https://en.wikipedia.org/wiki/Jami_(software)">Jami</a>. I
343 tried doing web search for 'ring' when I discovered it for the first
344 time, and can only applaud this change as it is impossible to find
345 something called Ring among the noise of other uses of that word. Now
346 you can search for 'jami' and this client and
347 <a href="https://jami.net/">the Jami system</a> is the first hit at
348 least on duckduckgo.</p>
349
350 <p>Jami will by default encrypt messages as well as audio and video
351 calls, and try to send them directly between the communicating parties
352 if possible. If this proves impossible (for example if both ends are
353 behind NAT), it will use a central SIP TURN server maintained by the
354 Jami project. Jami can also be a normal SIP client. If the SIP
355 server is unencrypted, the audio and video calls will also be
356 unencrypted. This is as far as I know the only case where Jami will
357 do anything without encryption.</p>
358
359 <p>Jami is available for several platforms: Linux, Windows, MacOSX,
360 Android, iOS, and Android TV. It is included in Debian already. Jami
361 also work for those using F-Droid without any Google connections,
362 while Signal do not.
363 <a href="https://git.jami.net/savoirfairelinux/ring-project/wikis/technical/Protocol">The
364 protocol</a> is described in the Ring project wiki. The system uses a
365 distributed hash table (DHT) system (similar to BitTorrent) running
366 over UDP. On one of the networks I use, I discovered Jami failed to
367 work. I tracked this down to the fact that incoming UDP packages
368 going to ports 1-49999 were blocked, and the DHT would pick a random
369 port and end up in the low range most of the time. After talking to
370 the developers, I solved this by enabling the dhtproxy in the
371 settings, thus using TCP to talk to a central DHT proxy instead of
372
373 peering directly with others. I've been told the developers are
374 working on allowing DHT to use TCP to avoid this problem. I also ran
375 into a problem when trying to talk to the version of Ring included in
376 Debian Stable (Stretch). Apparently the protocol changed between
377 beta2 and the current version, making these clients incompatible.
378 Hopefully the protocol will not be made incompatible in the
379 future.</p>
380
381 <p>It is worth noting that while looking at Jami and its features, I
382 came across another communication platform I have not tested yet. The
383 <a href="https://en.wikipedia.org/wiki/Tox_(protocol)">Tox protocol</a>
384 and <a href="https://tox.chat/">family of Tox clients</a>. It might
385 become the topic of a future blog post.</p>
386
387 <p>As usual, if you use Bitcoin and want to show your support of my
388 activities, please send Bitcoin donations to my address
389 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
390
391 </div>
392 <div class="tags">
393
394
395 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>.
396
397
398 </div>
399 </div>
400 <div class="padding"></div>
401
402 <div class="entry">
403 <div class="title">
404 <a href="http://people.skolelinux.org/pere/blog/Strategispillet_Unknown_Horizons_n__tilgjengelig_p__bokm_l.html">Strategispillet Unknown Horizons nå tilgjengelig på bokmål</a>
405 </div>
406 <div class="date">
407 23rd January 2019
408 </div>
409 <div class="body">
410 <p>I høst ble jeg inspirert til å bidra til oversettelsen av
411 <a href="http://unknown-horizons.org/">strategispillet Unknown
412 Horizons</a>, og oversatte de nesten 200 strengene i prosjektet til
413 bokmål. Deretter har jeg gått å ventet på at det kom en ny utgave som
414 inneholdt disse oversettelsene. Nå er endelig ventetiden over. Den
415 nye versjonen kom på nyåret, og ble
416 <a href="https://tracker.debian.org/pkg/unknown-horizons">lastet opp i
417 Debian</a> for noen få dager siden. I går kveld fikk jeg testet det ut, og
418 må innrømme at oversettelsene fungerer fint. Fant noen få tekster som
419 måtte justeres, men ikke noe alvorlig. Har oppdatert
420 <a href="https://hosted.weblate.org/projects/uh/">oversettelsen på
421 Weblate</a>, slik at neste utgave vil være enda bedre. :)</p>
422
423 <p>Spillet er et ressursstyringsspill ala Civilization, og er morsomt
424 å spille for oss som liker slikt. :)</p>
425
426 <p>Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til
427 det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner
428 til min adresse
429 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.
430 Merk, betaling med bitcoin er ikke anonymt. :)</p>
431
432 </div>
433 <div class="tags">
434
435
436 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>.
437
438
439 </div>
440 </div>
441 <div class="padding"></div>
442
443 <div class="entry">
444 <div class="title">
445 <a href="http://people.skolelinux.org/pere/blog/Debian_now_got_everything_you_need_to_program_Micro_bit.html">Debian now got everything you need to program Micro:bit</a>
446 </div>
447 <div class="date">
448 22nd January 2019
449 </div>
450 <div class="body">
451 <p>I am amazed and very pleased to discover that since a few days ago,
452 everything you need to program the <a href="https://microbit.org/">BBC
453 micro:bit</a> is available from the Debian archive. All this is
454 thanks to the hard work of Nick Morrott and the Debian python
455 packaging team. The micro:bit project recommend the mu-editor to
456 program the microcomputer, as this editor will take care of all the
457 machinery required to injekt/flash micropython alongside the program
458 into the micro:bit, as long as the pieces are available.</p>
459
460 <p>There are three main pieces involved. The first to enter Debian
461 was
462 <a href="https://tracker.debian.org/pkg/python-uflash">python-uflash</a>,
463 which was accepted into the archive 2019-01-12. The next one was
464 <a href="https://tracker.debian.org/pkg/mu-editor">mu-editor</a>, which
465 showed up 2019-01-13. The final and hardest part to to into the
466 archive was
467 <a href="https://tracker.debian.org/pkg/firmware-microbit-micropython">firmware-microbit-micropython</a>,
468 which needed to get its build system and dependencies into Debian
469 before it was accepted 2019-01-20. The last one is already in Debian
470 Unstable and should enter Debian Testing / Buster in three days. This
471 all allow any user of the micro:bit to get going by simply running
472 'apt install mu-editor' when using Testing or Unstable, and once
473 Buster is released as stable, all the users of Debian stable will be
474 catered for.</p>
475
476 <p>As a minor final touch, I added rules to
477 <a href="https://tracker.debian.org/pkg/isenkram">the isenkram
478 package</a> for recognizing micro:bit and recommend the mu-editor
479 package. This make sure any user of the isenkram desktop daemon will
480 get a popup suggesting to install mu-editor then the USB cable from
481 the micro:bit is inserted for the first time.</p>
482
483 <p>This should make it easier to have fun.</p>
484
485 <p>As usual, if you use Bitcoin and want to show your support of my
486 activities, please send Bitcoin donations to my address
487 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
488
489 </div>
490 <div class="tags">
491
492
493 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
494
495
496 </div>
497 </div>
498 <div class="padding"></div>
499
500 <div class="entry">
501 <div class="title">
502 <a href="http://people.skolelinux.org/pere/blog/Learn_to_program_with_Minetest_on_Debian.html">Learn to program with Minetest on Debian</a>
503 </div>
504 <div class="date">
505 15th December 2018
506 </div>
507 <div class="body">
508 <p>A fun way to learn how to program
509 <a href="https://www.python.org/">Python</a> is to follow the
510 instructions in the book
511 "<a href="https://nostarch.com/programwithminecraft">Learn to program
512 with Minecraft</a>", which introduces programming in Python to people
513 who like to play with Minecraft. The book uses a Python library to
514 talk to a TCP/IP socket with an API accepting build instructions and
515 providing information about the current players in a Minecraft world.
516 The TCP/IP API was first created for the Minecraft implementation for
517 Raspberry Pi, and has since been ported to some server versions of
518 Minecraft. The book contain recipes for those using Windows, MacOSX
519 and Raspian. But a little known fact is that you can follow the same
520 recipes using the free software construction game
521 <a href="https://minetest.net/">Minetest</a>.</p>
522
523 <p>There is <a href="https://github.com/sprintingkiwi/pycraft_mod">a
524 Minetest module implementing the same API</a>, making it possible to
525 use the Python programs coded to talk to Minecraft with Minetest too.
526 I
527 <a href="https://ftp-master.debian.org/new/minetest-mod-pycraft_0.20%2Bgit20180331.0376a0a%2Bdfsg-1.html">uploaded
528 this module</a> to Debian two weeks ago, and as soon as it clears the
529 FTP masters NEW queue, learning to program Python with Minetest on
530 Debian will be a simple 'apt install' away. The Debian package is
531 maintained as part of the Debian Games team, and
532 <a href="https://salsa.debian.org/games-team/unfinished/minetest-mod-pycraft">the
533 packaging rules</a> are currently located under 'unfinished' on
534 Salsa.</p>
535
536 <p>You will most likely need to install several of the Minetest
537 modules in Debian for the examples included with the library to work
538 well, as there are several blocks used by the example scripts that are
539 provided via modules in Minetest. Without the required blocks, a
540 simple stone block is used instead. My initial testing with a analog
541 clock did not get gold arms as instructed in the python library, but
542 instead used stone arms.</p>
543
544 <p>I tried to find a way to add the API to the desktop version of
545 Minecraft, but were unable to find any working recipes. The
546 <a href="https://www.epiphanydigest.com/tag/minecraft-python-api/">recipes</a>
547 I <a href="https://github.com/kbsriram/mcpiapi">found</a> are only
548 working with a standalone Minecraft server setup. Are there any
549 options to use with the normal desktop version?</p>
550
551 <p>As usual, if you use Bitcoin and want to show your support of my
552 activities, please send Bitcoin donations to my address
553 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
554
555 </div>
556 <div class="tags">
557
558
559 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
560
561
562 </div>
563 </div>
564 <div class="padding"></div>
565
566 <div class="entry">
567 <div class="title">
568 <a href="http://people.skolelinux.org/pere/blog/Time_for_an_official_MIME_type_for_patches_.html">Time for an official MIME type for patches?</a>
569 </div>
570 <div class="date">
571 1st November 2018
572 </div>
573 <div class="body">
574 <p>As part of my involvement in
575 <a href="https://gitlab.com/OsloMet-ABI/nikita-noark5-core">the Nikita
576 archive API project</a>, I've been importing a fairly large lump of
577 emails into a test instance of the archive to see how well this would
578 go. I picked a subset of <a href="https://notmuchmail.org/">my
579 notmuch email database</a>, all public emails sent to me via
580 @lists.debian.org, giving me a set of around 216 000 emails to import.
581 In the process, I had a look at the various attachments included in
582 these emails, to figure out what to do with attachments, and noticed
583 that one of the most common attachment formats do not have
584 <a href="https://www.iana.org/assignments/media-types/media-types.xhtml">an
585 official MIME type</a> registered with IANA/IETF. The output from
586 diff, ie the input for patch, is on the top 10 list of formats
587 included in these emails. At the moment people seem to use either
588 text/x-patch or text/x-diff, but neither is officially registered. It
589 would be better if one official MIME type were registered and used
590 everywhere.</p>
591
592 <p>To try to get one official MIME type for these files, I've brought
593 up the topic on
594 <a href="https://www.ietf.org/mailman/listinfo/media-types">the
595 media-types mailing list</a>. If you are interested in discussion
596 which MIME type to use as the official for patch files, or involved in
597 making software using a MIME type for patches, perhaps you would like
598 to join the discussion?</p>
599
600 <p>As usual, if you use Bitcoin and want to show your support of my
601 activities, please send Bitcoin donations to my address
602 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
603
604 </div>
605 <div class="tags">
606
607
608 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/noark5">noark5</a>, <a href="http://people.skolelinux.org/pere/blog/tags/standard">standard</a>.
609
610
611 </div>
612 </div>
613 <div class="padding"></div>
614
615 <div class="entry">
616 <div class="title">
617 <a href="http://people.skolelinux.org/pere/blog/Automatic_Google_Drive_sync_using_grive_in_Debian.html">Automatic Google Drive sync using grive in Debian</a>
618 </div>
619 <div class="date">
620 4th October 2018
621 </div>
622 <div class="body">
623 <p>A few days, I rescued a Windows victim over to Debian. To try to
624 rescue the remains, I helped set up automatic sync with Google Drive.
625 I did not find any sensible Debian package handling this
626 automatically, so I rebuild the grive2 source from
627 <a href="http://www.webupd8.org/">the Ubuntu UPD8 PPA</a> to do the
628 task and added a autostart desktop entry and a small shell script to
629 run in the background while the user is logged in to do the sync.
630 Here is a sketch of the setup for future reference.</p>
631
632 <p>I first created <tt>~/googledrive</tt>, entered the directory and
633 ran '<tt>grive -a</tt>' to authenticate the machine/user. Next, I
634 created a autostart hook in <tt>~/.config/autostart/grive.desktop</tt>
635 to start the sync when the user log in:</p>
636
637 <p><blockquote><pre>
638 [Desktop Entry]
639 Name=Google drive autosync
640 Type=Application
641 Exec=/home/user/bin/grive-sync
642 </pre></blockquote></p>
643
644 <p>Finally, I wrote the <tt>~/bin/grive-sync</tt> script to sync
645 ~/googledrive/ with the files in Google Drive.</p>
646
647 <p><blockquote><pre>
648 #!/bin/sh
649 set -e
650 cd ~/
651 cleanup() {
652 if [ "$syncpid" ] ; then
653 kill $syncpid
654 fi
655 }
656 trap cleanup EXIT INT QUIT
657 /usr/lib/grive/grive-sync.sh listen googledrive 2>&1 | sed "s%^%$0:%" &
658 syncpdi=$!
659 while true; do
660 if ! xhost >/dev/null 2>&1 ; then
661 echo "no DISPLAY, exiting as the user probably logged out"
662 exit 1
663 fi
664 if [ ! -e /run/user/1000/grive-sync.sh_googledrive ] ; then
665 /usr/lib/grive/grive-sync.sh sync googledrive
666 fi
667 sleep 300
668 done 2>&1 | sed "s%^%$0:%"
669 </pre></blockquote></p>
670
671 <p>Feel free to use the setup if you want. It can be assumed to be
672 GNU GPL v2 licensed (or any later version, at your leisure), but I
673 doubt this code is possible to claim copyright on.</p>
674
675 <p>As usual, if you use Bitcoin and want to show your support of my
676 activities, please send Bitcoin donations to my address
677 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
678
679 </div>
680 <div class="tags">
681
682
683 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
684
685
686 </div>
687 </div>
688 <div class="padding"></div>
689
690 <div class="entry">
691 <div class="title">
692 <a href="http://people.skolelinux.org/pere/blog/Using_the_Kodi_API_to_play_Youtube_videos.html">Using the Kodi API to play Youtube videos</a>
693 </div>
694 <div class="date">
695 2nd September 2018
696 </div>
697 <div class="body">
698 <p>I continue to explore my Kodi installation, and today I wanted to
699 tell it to play a youtube URL I received in a chat, without having to
700 insert search terms using the on-screen keyboard. After searching the
701 web for API access to the Youtube plugin and testing a bit, I managed
702 to find a recipe that worked. If you got a kodi instance with its API
703 available from http://kodihost/jsonrpc, you can try the following to
704 have check out a nice cover band.</p>
705
706 <p><blockquote><pre>curl --silent --header 'Content-Type: application/json' \
707 --data-binary '{ "id": 1, "jsonrpc": "2.0", "method": "Player.Open",
708 "params": {"item": { "file":
709 "plugin://plugin.video.youtube/play/?video_id=LuRGVM9O0qg" } } }' \
710 http://projector.local/jsonrpc</pre></blockquote></p>
711
712 <p>I've extended kodi-stream program to take a video source as its
713 first argument. It can now handle direct video links, youtube links
714 and 'desktop' to stream my desktop to Kodi. It is almost like a
715 Chromecast. :)</p>
716
717 <p>As usual, if you use Bitcoin and want to show your support of my
718 activities, please send Bitcoin donations to my address
719 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
720
721 </div>
722 <div class="tags">
723
724
725 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/kodi">kodi</a>, <a href="http://people.skolelinux.org/pere/blog/tags/video">video</a>.
726
727
728 </div>
729 </div>
730 <div class="padding"></div>
731
732 <div class="entry">
733 <div class="title">
734 <a href="http://people.skolelinux.org/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>
735 </div>
736 <div class="date">
737 31st July 2018
738 </div>
739 <div class="body">
740 <p>For a while now, I have looked for a sensible way to share images
741 with my family using a self hosted solution, as it is unacceptable to
742 place images from my personal life under the control of strangers
743 working for data hoarders like Google or Dropbox. The last few days I
744 have drafted an approach that might work out, and I would like to
745 share it with you. I would like to publish images on a server under
746 my control, and point some Internet connected display units using some
747 free and open standard to the images I published. As my primary
748 language is not limited to ASCII, I need to store metadata using
749 UTF-8. Many years ago, I hoped to find a digital photo frame capable
750 of reading a RSS feed with image references (aka using the
751 &lt;enclosure&gt; RSS tag), but was unable to find a current supplier
752 of such frames. In the end I gave up that approach.</p>
753
754 <p>Some months ago, I discovered that
755 <a href="https://www.jwz.org/xscreensaver/">XScreensaver</a> is able to
756 read images from a RSS feed, and used it to set up a screen saver on
757 my home info screen, showing images from the Daily images feed from
758 NASA. This proved to work well. More recently I discovered that
759 <a href="https://kodi.tv">Kodi</a> (both using
760 <a href="https://www.openelec.tv/">OpenELEC</a> and
761 <a href="https://libreelec.tv">LibreELEC</a>) provide the
762 <a href="https://github.com/grinsted/script.screensaver.feedreader">Feedreader</a>
763 screen saver capable of reading a RSS feed with images and news. For
764 fun, I used it this summer to test Kodi on my parents TV by hooking up
765 a Raspberry PI unit with LibreELEC, and wanted to provide them with a
766 screen saver showing selected pictures from my selection.</p>
767
768 <p>Armed with motivation and a test photo frame, I set out to generate
769 a RSS feed for the Kodi instance. I adjusted my <a
770 href="https://freedombox.org/">Freedombox</a> instance, created
771 /var/www/html/privatepictures/, wrote a small Perl script to extract
772 title and description metadata from the photo files and generate the
773 RSS file. I ended up using Perl instead of python, as the
774 libimage-exiftool-perl Debian package seemed to handle the EXIF/XMP
775 tags I ended up using, while python3-exif did not. The relevant EXIF
776 tags only support ASCII, so I had to find better alternatives. XMP
777 seem to have the support I need.</p>
778
779 <p>I am a bit unsure which EXIF/XMP tags to use, as I would like to
780 use tags that can be easily added/updated using normal free software
781 photo managing software. I ended up using the tags set using this
782 exiftool command, as these tags can also be set using digiKam:</p>
783
784 <blockquote><pre>
785 exiftool -headline='The RSS image title' \
786 -description='The RSS image description.' \
787 -subject+=for-family photo.jpeg
788 </pre></blockquote>
789
790 <p>I initially tried the "-title" and "keyword" tags, but they were
791 invisible in digiKam, so I changed to "-headline" and "-subject". I
792 use the keyword/subject 'for-family' to flag that the photo should be
793 shared with my family. Images with this keyword set are located and
794 copied into my Freedombox for the RSS generating script to find.</p>
795
796 <p>Are there better ways to do this? Get in touch if you have better
797 suggestions.</p>
798
799 <p>As usual, if you use Bitcoin and want to show your support of my
800 activities, please send Bitcoin donations to my address
801 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
802
803 </div>
804 <div class="tags">
805
806
807 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
808
809
810 </div>
811 </div>
812 <div class="padding"></div>
813
814 <div class="entry">
815 <div class="title">
816 <a href="http://people.skolelinux.org/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>
817 </div>
818 <div class="date">
819 12th July 2018
820 </div>
821 <div class="body">
822 <p>Last night, I wrote
823 <a href="http://people.skolelinux.org/pere/blog/Streaming_the_Linux_desktop_to_Kodi_using_VLC_and_RTSP.html">a
824 recipe to stream a Linux desktop using VLC to a instance of Kodi</a>.
825 During the day I received valuable feedback, and thanks to the
826 suggestions I have been able to rewrite the recipe into a much simpler
827 approach requiring no setup at all. It is a single script that take
828 care of it all.</p>
829
830 <p>This new script uses GStreamer instead of VLC to capture the
831 desktop and stream it to Kodi. This fixed the video quality issue I
832 saw initially. It further removes the need to add a m3u file on the
833 Kodi machine, as it instead connects to
834 <a href="https://kodi.wiki/view/JSON-RPC_API/v8">the JSON-RPC API in
835 Kodi</a> and simply ask Kodi to play from the stream created using
836 GStreamer. Streaming the desktop to Kodi now become trivial. Copy
837 the script below, run it with the DNS name or IP address of the kodi
838 server to stream to as the only argument, and watch your screen show
839 up on the Kodi screen. Note, it depend on multicast on the local
840 network, so if you need to stream outside the local network, the
841 script must be modified. Also note, I have no idea if audio work, as
842 I only care about the picture part.</p>
843
844 <blockquote><pre>
845 #!/bin/sh
846 #
847 # Stream the Linux desktop view to Kodi. See
848 # http://people.skolelinux.org/pere/blog/Streaming_the_Linux_desktop_to_Kodi_using_VLC_and_RTSP.html
849 # for backgorund information.
850
851 # Make sure the stream is stopped in Kodi and the gstreamer process is
852 # killed if something go wrong (for example if curl is unable to find the
853 # kodi server). Do the same when interrupting this script.
854 kodicmd() {
855 host="$1"
856 cmd="$2"
857 params="$3"
858 curl --silent --header 'Content-Type: application/json' \
859 --data-binary "{ \"id\": 1, \"jsonrpc\": \"2.0\", \"method\": \"$cmd\", \"params\": $params }" \
860 "http://$host/jsonrpc"
861 }
862 cleanup() {
863 if [ -n "$kodihost" ] ; then
864 # Stop the playing when we end
865 playerid=$(kodicmd "$kodihost" Player.GetActivePlayers "{}" |
866 jq .result[].playerid)
867 kodicmd "$kodihost" Player.Stop "{ \"playerid\" : $playerid }" > /dev/null
868 fi
869 if [ "$gstpid" ] && kill -0 "$gstpid" >/dev/null 2>&1; then
870 kill "$gstpid"
871 fi
872 }
873 trap cleanup EXIT INT
874
875 if [ -n "$1" ]; then
876 kodihost=$1
877 shift
878 else
879 kodihost=kodi.local
880 fi
881
882 mcast=239.255.0.1
883 mcastport=1234
884 mcastttl=1
885
886 pasrc=$(pactl list | grep -A2 'Source #' | grep 'Name: .*\.monitor$' | \
887 cut -d" " -f2|head -1)
888 gst-launch-1.0 ximagesrc use-damage=0 ! video/x-raw,framerate=30/1 ! \
889 videoconvert ! queue2 ! \
890 x264enc bitrate=8000 speed-preset=superfast tune=zerolatency qp-min=30 \
891 key-int-max=15 bframes=2 ! video/x-h264,profile=high ! queue2 ! \
892 mpegtsmux alignment=7 name=mux ! rndbuffersize max=1316 min=1316 ! \
893 udpsink host=$mcast port=$mcastport ttl-mc=$mcastttl auto-multicast=1 sync=0 \
894 pulsesrc device=$pasrc ! audioconvert ! queue2 ! avenc_aac ! queue2 ! mux. \
895 > /dev/null 2>&1 &
896 gstpid=$!
897
898 # Give stream a second to get going
899 sleep 1
900
901 # Ask kodi to start streaming using its JSON-RPC API
902 kodicmd "$kodihost" Player.Open \
903 "{\"item\": { \"file\": \"udp://@$mcast:$mcastport\" } }" > /dev/null
904
905 # wait for gst to end
906 wait "$gstpid"
907 </pre></blockquote>
908
909 <p>I hope you find the approach useful. I know I do.</p>
910
911 <p>As usual, if you use Bitcoin and want to show your support of my
912 activities, please send Bitcoin donations to my address
913 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
914
915 </div>
916 <div class="tags">
917
918
919 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/kodi">kodi</a>, <a href="http://people.skolelinux.org/pere/blog/tags/video">video</a>.
920
921
922 </div>
923 </div>
924 <div class="padding"></div>
925
926 <div class="entry">
927 <div class="title">
928 <a href="http://people.skolelinux.org/pere/blog/Streaming_the_Linux_desktop_to_Kodi_using_VLC_and_RTSP.html">Streaming the Linux desktop to Kodi using VLC and RTSP</a>
929 </div>
930 <div class="date">
931 12th July 2018
932 </div>
933 <div class="body">
934 <p>PS: See
935 <ahref="http://people.skolelinux.org/pere/blog/Simple_streaming_the_Linux_desktop_to_Kodi_using_GStreamer_and_RTP.html">the
936 followup post</a> for a even better approach.</p>
937
938 <p>A while back, I was asked by a friend how to stream the desktop to
939 my projector connected to Kodi. I sadly had to admit that I had no
940 idea, as it was a task I never had tried. Since then, I have been
941 looking for a way to do so, preferable without much extra software to
942 install on either side. Today I found a way that seem to kind of
943 work. Not great, but it is a start.</p>
944
945 <p>I had a look at several approaches, for example
946 <a href="https://github.com/mfoetsch/dlna_live_streaming">using uPnP
947 DLNA as described in 2011</a>, but it required a uPnP server, fuse and
948 local storage enough to store the stream locally. This is not going
949 to work well for me, lacking enough free space, and it would
950 impossible for my friend to get working.</p>
951
952 <p>Next, it occurred to me that perhaps I could use VLC to create a
953 video stream that Kodi could play. Preferably using
954 broadcast/multicast, to avoid having to change any setup on the Kodi
955 side when starting such stream. Unfortunately, the only recipe I
956 could find using multicast used the rtp protocol, and this protocol
957 seem to not be supported by Kodi.</p>
958
959 <p>On the other hand, the rtsp protocol is working! Unfortunately I
960 have to specify the IP address of the streaming machine in both the
961 sending command and the file on the Kodi server. But it is showing my
962 desktop, and thus allow us to have a shared look on the big screen at
963 the programs I work on.</p>
964
965 <p>I did not spend much time investigating codeces. I combined the
966 rtp and rtsp recipes from
967 <a href="https://wiki.videolan.org/Documentation:Streaming_HowTo/Command_Line_Examples/">the
968 VLC Streaming HowTo/Command Line Examples</a>, and was able to get
969 this working on the desktop/streaming end.</p>
970
971 <blockquote><pre>
972 vlc screen:// --sout \
973 '#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128}:rtp{dst=projector.local,port=1234,sdp=rtsp://192.168.11.4:8080/test.sdp}'
974 </pre></blockquote>
975
976 <p>I ssh-ed into my Kodi box and created a file like this with the
977 same IP address:</p>
978
979 <blockquote><pre>
980 echo rtsp://192.168.11.4:8080/test.sdp \
981 > /storage/videos/screenstream.m3u
982 </pre></blockquote>
983
984 <p>Note the 192.168.11.4 IP address is my desktops IP address. As far
985 as I can tell the IP must be hardcoded for this to work. In other
986 words, if someone elses machine is going to do the steaming, you have
987 to update screenstream.m3u on the Kodi machine and adjust the vlc
988 recipe. To get started, locate the file in Kodi and select the m3u
989 file while the VLC stream is running. The desktop then show up in my
990 big screen. :)</p>
991
992 <p>When using the same technique to stream a video file with audio,
993 the audio quality is really bad. No idea if the problem is package
994 loss or bad parameters for the transcode. I do not know VLC nor Kodi
995 enough to tell.</p>
996
997 <p><strong>Update 2018-07-12</strong>: Johannes Schauer send me a few
998 succestions and reminded me about an important step. The "screen:"
999 input source is only available once the vlc-plugin-access-extra
1000 package is installed on Debian. Without it, you will see this error
1001 message: "VLC is unable to open the MRL 'screen://'. Check the log
1002 for details." He further found that it is possible to drop some parts
1003 of the VLC command line to reduce the amount of hardcoded information.
1004 It is also useful to consider using cvlc to avoid having the VLC
1005 window in the desktop view. In sum, this give us this command line on
1006 the source end
1007
1008 <blockquote><pre>
1009 cvlc screen:// --sout \
1010 '#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128}:rtp{sdp=rtsp://:8080/}'
1011 </pre></blockquote>
1012
1013 <p>and this on the Kodi end<p>
1014
1015 <blockquote><pre>
1016 echo rtsp://192.168.11.4:8080/ \
1017 > /storage/videos/screenstream.m3u
1018 </pre></blockquote>
1019
1020 <p>Still bad image quality, though. But I did discover that streaming
1021 a DVD using dvdsimple:///dev/dvd as the source had excellent video and
1022 audio quality, so I guess the issue is in the input or transcoding
1023 parts, not the rtsp part. I've tried to change the vb and ab
1024 parameters to use more bandwidth, but it did not make a
1025 difference.</p>
1026
1027 <p>I further received a suggestion from Einar Haraldseid to try using
1028 gstreamer instead of VLC, and this proved to work great! He also
1029 provided me with the trick to get Kodi to use a multicast stream as
1030 its source. By using this monstrous oneliner, I can stream my desktop
1031 with good video quality in reasonable framerate to the 239.255.0.1
1032 multicast address on port 1234:
1033
1034 <blockquote><pre>
1035 gst-launch-1.0 ximagesrc use-damage=0 ! video/x-raw,framerate=30/1 ! \
1036 videoconvert ! queue2 ! \
1037 x264enc bitrate=8000 speed-preset=superfast tune=zerolatency qp-min=30 \
1038 key-int-max=15 bframes=2 ! video/x-h264,profile=high ! queue2 ! \
1039 mpegtsmux alignment=7 name=mux ! rndbuffersize max=1316 min=1316 ! \
1040 udpsink host=239.255.0.1 port=1234 ttl-mc=1 auto-multicast=1 sync=0 \
1041 pulsesrc device=$(pactl list | grep -A2 'Source #' | \
1042 grep 'Name: .*\.monitor$' | cut -d" " -f2|head -1) ! \
1043 audioconvert ! queue2 ! avenc_aac ! queue2 ! mux.
1044 </pre></blockquote>
1045
1046 <p>and this on the Kodi end<p>
1047
1048 <blockquote><pre>
1049 echo udp://@239.255.0.1:1234 \
1050 > /storage/videos/screenstream.m3u
1051 </pre></blockquote>
1052
1053 <p>Note the trick to pick a valid pulseaudio source. It might not
1054 pick the one you need. This approach will of course lead to trouble
1055 if more than one source uses the same multicast port and address.
1056 Note the ttl-mc=1 setting, which limit the multicast packages to the
1057 local network. If the value is increased, your screen will be
1058 broadcasted further, one network "hop" for each increase (read up on
1059 multicast to learn more. :)!</p>
1060
1061 <p>Having cracked how to get Kodi to receive multicast streams, I
1062 could use this VLC command to stream to the same multicast address.
1063 The image quality is way better than the rtsp approach, but gstreamer
1064 seem to be doing a better job.</p>
1065
1066 <blockquote><pre>
1067 cvlc screen:// --sout '#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128}:rtp{mux=ts,dst=239.255.0.1,port=1234,sdp=sap}'
1068 </pre></blockquote>
1069
1070 <p>As usual, if you use Bitcoin and want to show your support of my
1071 activities, please send Bitcoin donations to my address
1072 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1073
1074 </div>
1075 <div class="tags">
1076
1077
1078 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/kodi">kodi</a>, <a href="http://people.skolelinux.org/pere/blog/tags/video">video</a>.
1079
1080
1081 </div>
1082 </div>
1083 <div class="padding"></div>
1084
1085 <div class="entry">
1086 <div class="title">
1087 <a href="http://people.skolelinux.org/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>
1088 </div>
1089 <div class="date">
1090 9th July 2018
1091 </div>
1092 <div class="body">
1093 <p>Five years ago,
1094 <a href="http://people.skolelinux.org/pere/blog/What_is_the_most_supported_MIME_type_in_Debian_.html">I
1095 measured what the most supported MIME type in Debian was</a>, by
1096 analysing the desktop files in all packages in the archive. Since
1097 then, the DEP-11 AppStream system has been put into production, making
1098 the task a lot easier. This made me want to repeat the measurement,
1099 to see how much things changed. Here are the new numbers, for
1100 unstable only this time:
1101
1102 <p><strong>Debian Unstable:</strong></p>
1103
1104 <pre>
1105 count MIME type
1106 ----- -----------------------
1107 56 image/jpeg
1108 55 image/png
1109 49 image/tiff
1110 48 image/gif
1111 39 image/bmp
1112 38 text/plain
1113 37 audio/mpeg
1114 34 application/ogg
1115 33 audio/x-flac
1116 32 audio/x-mp3
1117 30 audio/x-wav
1118 30 audio/x-vorbis+ogg
1119 29 image/x-portable-pixmap
1120 27 inode/directory
1121 27 image/x-portable-bitmap
1122 27 audio/x-mpeg
1123 26 application/x-ogg
1124 25 audio/x-mpegurl
1125 25 audio/ogg
1126 24 text/html
1127 </pre>
1128
1129 <p>The list was created like this using a sid chroot: "cat
1130 /var/lib/apt/lists/*sid*_dep11_Components-amd64.yml.gz| zcat | awk '/^
1131 - \S+\/\S+$/ {print $2 }' | sort | uniq -c | sort -nr | head -20"</p>
1132
1133 <p>It is interesting to see how image formats have passed text/plain
1134 as the most announced supported MIME type. These days, thanks to the
1135 AppStream system, if you run into a file format you do not know, and
1136 want to figure out which packages support the format, you can find the
1137 MIME type of the file using "file --mime &lt;filename&gt;", and then
1138 look up all packages announcing support for this format in their
1139 AppStream metadata (XML or .desktop file) using "appstreamcli
1140 what-provides mimetype &lt;mime-type&gt;. For example if you, like
1141 me, want to know which packages support inode/directory, you can get a
1142 list like this:</p>
1143
1144 <p><blockquote><pre>
1145 % appstreamcli what-provides mimetype inode/directory | grep Package: | sort
1146 Package: anjuta
1147 Package: audacious
1148 Package: baobab
1149 Package: cervisia
1150 Package: chirp
1151 Package: dolphin
1152 Package: doublecmd-common
1153 Package: easytag
1154 Package: enlightenment
1155 Package: ephoto
1156 Package: filelight
1157 Package: gwenview
1158 Package: k4dirstat
1159 Package: kaffeine
1160 Package: kdesvn
1161 Package: kid3
1162 Package: kid3-qt
1163 Package: nautilus
1164 Package: nemo
1165 Package: pcmanfm
1166 Package: pcmanfm-qt
1167 Package: qweborf
1168 Package: ranger
1169 Package: sirikali
1170 Package: spacefm
1171 Package: spacefm
1172 Package: vifm
1173 %
1174 </pre></blockquote></p>
1175
1176 <p>Using the same method, I can quickly discover that the Sketchup file
1177 format is not yet supported by any package in Debian:</p>
1178
1179 <p><blockquote><pre>
1180 % appstreamcli what-provides mimetype application/vnd.sketchup.skp
1181 Could not find component providing 'mimetype::application/vnd.sketchup.skp'.
1182 %
1183 </pre></blockquote></p>
1184
1185 <p>Yesterday I used it to figure out which packages support the STL 3D
1186 format:</p>
1187
1188 <p><blockquote><pre>
1189 % appstreamcli what-provides mimetype application/sla|grep Package
1190 Package: cura
1191 Package: meshlab
1192 Package: printrun
1193 %
1194 </pre></blockquote></p>
1195
1196 <p>PS: A new version of Cura was uploaded to Debian yesterday.</p>
1197
1198 <p>As usual, if you use Bitcoin and want to show your support of my
1199 activities, please send Bitcoin donations to my address
1200 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1201
1202 </div>
1203 <div class="tags">
1204
1205
1206 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
1207
1208
1209 </div>
1210 </div>
1211 <div class="padding"></div>
1212
1213 <div class="entry">
1214 <div class="title">
1215 <a href="http://people.skolelinux.org/pere/blog/Debian_APT_upgrade_without_enough_free_space_on_the_disk___.html">Debian APT upgrade without enough free space on the disk...</a>
1216 </div>
1217 <div class="date">
1218 8th July 2018
1219 </div>
1220 <div class="body">
1221 <p>Quite regularly, I let my Debian Sid/Unstable chroot stay untouch
1222 for a while, and when I need to update it there is not enough free
1223 space on the disk for apt to do a normal 'apt upgrade'. I normally
1224 would resolve the issue by doing 'apt install &lt;somepackages&gt;' to
1225 upgrade only some of the packages in one batch, until the amount of
1226 packages to download fall below the amount of free space available.
1227 Today, I had about 500 packages to upgrade, and after a while I got
1228 tired of trying to install chunks of packages manually. I concluded
1229 that I did not have the spare hours required to complete the task, and
1230 decided to see if I could automate it. I came up with this small
1231 script which I call 'apt-in-chunks':</p>
1232
1233 <p><blockquote><pre>
1234 #!/bin/sh
1235 #
1236 # Upgrade packages when the disk is too full to upgrade every
1237 # upgradable package in one lump. Fetching packages to upgrade using
1238 # apt, and then installing using dpkg, to avoid changing the package
1239 # flag for manual/automatic.
1240
1241 set -e
1242
1243 ignore() {
1244 if [ "$1" ]; then
1245 grep -v "$1"
1246 else
1247 cat
1248 fi
1249 }
1250
1251 for p in $(apt list --upgradable | ignore "$@" |cut -d/ -f1 | grep -v '^Listing...'); do
1252 echo "Upgrading $p"
1253 apt clean
1254 apt install --download-only -y $p
1255 for f in /var/cache/apt/archives/*.deb; do
1256 if [ -e "$f" ]; then
1257 dpkg -i /var/cache/apt/archives/*.deb
1258 break
1259 fi
1260 done
1261 done
1262 </pre></blockquote></p>
1263
1264 <p>The script will extract the list of packages to upgrade, try to
1265 download the packages needed to upgrade one package, install the
1266 downloaded packages using dpkg. The idea is to upgrade packages
1267 without changing the APT mark for the package (ie the one recording of
1268 the package was manually requested or pulled in as a dependency). To
1269 use it, simply run it as root from the command line. If it fail, try
1270 'apt install -f' to clean up the mess and run the script again. This
1271 might happen if the new packages conflict with one of the old
1272 packages. dpkg is unable to remove, while apt can do this.</p>
1273
1274 <p>It take one option, a package to ignore in the list of packages to
1275 upgrade. The option to ignore a package is there to be able to skip
1276 the packages that are simply too large to unpack. Today this was
1277 'ghc', but I have run into other large packages causing similar
1278 problems earlier (like TeX).</p>
1279
1280 <p>Update 2018-07-08: Thanks to Paul Wise, I am aware of two
1281 alternative ways to handle this. The "unattended-upgrades
1282 --minimal-upgrade-steps" option will try to calculate upgrade sets for
1283 each package to upgrade, and then upgrade them in order, smallest set
1284 first. It might be a better option than my above mentioned script.
1285 Also, "aptutude upgrade" can upgrade single packages, thus avoiding
1286 the need for using "dpkg -i" in the script above.</p>
1287
1288 <p>As usual, if you use Bitcoin and want to show your support of my
1289 activities, please send Bitcoin donations to my address
1290 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1291
1292 </div>
1293 <div class="tags">
1294
1295
1296 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
1297
1298
1299 </div>
1300 </div>
1301 <div class="padding"></div>
1302
1303 <div class="entry">
1304 <div class="title">
1305 <a href="http://people.skolelinux.org/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>
1306 </div>
1307 <div class="date">
1308 13th February 2018
1309 </div>
1310 <div class="body">
1311 <p>A new version of the
1312 <a href="https://tracker.debian.org/pkg/cura">3D printer slicer
1313 software Cura</a>, version 3.1.0, is now available in Debian Testing
1314 (aka Buster) and Debian Unstable (aka Sid). I hope you find it
1315 useful. It was uploaded the last few days, and the last update will
1316 enter testing tomorrow. See the
1317 <a href="https://ultimaker.com/en/products/cura-software/release-notes">release
1318 notes</a> for the list of bug fixes and new features. Version 3.2
1319 was announced 6 days ago. We will try to get it into Debian as
1320 well.</p>
1321
1322 <p>More information related to 3D printing is available on the
1323 <a href="https://wiki.debian.org/3DPrinting">3D printing</a> and
1324 <a href="https://wiki.debian.org/3D-printer">3D printer</a> wiki pages
1325 in Debian.</p>
1326
1327 <p>As usual, if you use Bitcoin and want to show your support of my
1328 activities, please send Bitcoin donations to my address
1329 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1330
1331 </div>
1332 <div class="tags">
1333
1334
1335 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
1336
1337
1338 </div>
1339 </div>
1340 <div class="padding"></div>
1341
1342 <div class="entry">
1343 <div class="title">
1344 <a href="http://people.skolelinux.org/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>
1345 </div>
1346 <div class="date">
1347 17th December 2017
1348 </div>
1349 <div class="body">
1350 <p>After several months of working and waiting, I am happy to report
1351 that the nice and user friendly 3D printer slicer software Cura just
1352 entered Debian Unstable. It consist of five packages,
1353 <a href="https://tracker.debian.org/pkg/cura">cura</a>,
1354 <a href="https://tracker.debian.org/pkg/cura-engine">cura-engine</a>,
1355 <a href="https://tracker.debian.org/pkg/libarcus">libarcus</a>,
1356 <a href="https://tracker.debian.org/pkg/fdm-materials">fdm-materials</a>,
1357 <a href="https://tracker.debian.org/pkg/libsavitar">libsavitar</a> and
1358 <a href="https://tracker.debian.org/pkg/uranium">uranium</a>. The last
1359 two, uranium and cura, entered Unstable yesterday. This should make
1360 it easier for Debian users to print on at least the Ultimaker class of
1361 3D printers. My nearest 3D printer is an Ultimaker 2+, so it will
1362 make life easier for at least me. :)</p>
1363
1364 <p>The work to make this happen was done by Gregor Riepl, and I was
1365 happy to assist him in sponsoring the packages. With the introduction
1366 of Cura, Debian is up to three 3D printer slicers at your service,
1367 Cura, Slic3r and Slic3r Prusa. If you own or have access to a 3D
1368 printer, give it a go. :)</p>
1369
1370 <p>The 3D printer software is maintained by the 3D printer Debian
1371 team, flocking together on the
1372 <a href="http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/3dprinter-general">3dprinter-general</a>
1373 mailing list and the
1374 <a href="irc://irc.debian.org/#debian-3dprinting">#debian-3dprinting</a>
1375 IRC channel.</p>
1376
1377 <p>The next step for Cura in Debian is to update the cura package to
1378 version 3.0.3 and then update the entire set of packages to version
1379 3.1.0 which showed up the last few days.</p>
1380
1381 </div>
1382 <div class="tags">
1383
1384
1385 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
1386
1387
1388 </div>
1389 </div>
1390 <div class="padding"></div>
1391
1392 <div class="entry">
1393 <div class="title">
1394 <a href="http://people.skolelinux.org/pere/blog/Generating_3D_prints_in_Debian_using_Cura_and_Slic3r__prusa_.html">Generating 3D prints in Debian using Cura and Slic3r(-prusa)</a>
1395 </div>
1396 <div class="date">
1397 9th October 2017
1398 </div>
1399 <div class="body">
1400 <p>At my nearby maker space,
1401 <a href="http://sonen.ifi.uio.no/">Sonen</a>, I heard the story that it
1402 was easier to generate gcode files for theyr 3D printers (Ultimake 2+)
1403 on Windows and MacOS X than Linux, because the software involved had
1404 to be manually compiled and set up on Linux while premade packages
1405 worked out of the box on Windows and MacOS X. I found this annoying,
1406 as the software involved,
1407 <a href="https://github.com/Ultimaker/Cura">Cura</a>, is free software
1408 and should be trivial to get up and running on Linux if someone took
1409 the time to package it for the relevant distributions. I even found
1410 <a href="https://bugs.debian.org/706656">a request for adding into
1411 Debian</a> from 2013, which had seem some activity over the years but
1412 never resulted in the software showing up in Debian. So a few days
1413 ago I offered my help to try to improve the situation.</p>
1414
1415 <p>Now I am very happy to see that all the packages required by a
1416 working Cura in Debian are uploaded into Debian and waiting in the NEW
1417 queue for the ftpmasters to have a look. You can track the progress
1418 on
1419 <a href="https://qa.debian.org/developer.php?email=3dprinter-general%40lists.alioth.debian.org">the
1420 status page for the 3D printer team</a>.</p>
1421
1422 <p>The uploaded packages are a bit behind upstream, and was uploaded
1423 now to get slots in <a href="https://ftp-master.debian.org/new.html">the NEW
1424 queue</a> while we work up updating the packages to the latest
1425 upstream version.</p>
1426
1427 <p>On a related note, two competitors for Cura, which I found harder
1428 to use and was unable to configure correctly for Ultimaker 2+ in the
1429 short time I spent on it, are already in Debian. If you are looking
1430 for 3D printer "slicers" and want something already available in
1431 Debian, check out
1432 <a href="https://tracker.debian.org/pkg/slic3r">slic3r</a> and
1433 <a href="https://tracker.debian.org/pkg/slic3r-prusa">slic3r-prusa</a>.
1434 The latter is a fork of the former.</p>
1435
1436 <p>As usual, if you use Bitcoin and want to show your support of my
1437 activities, please send Bitcoin donations to my address
1438 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1439
1440 </div>
1441 <div class="tags">
1442
1443
1444 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
1445
1446
1447 </div>
1448 </div>
1449 <div class="padding"></div>
1450
1451 <div class="entry">
1452 <div class="title">
1453 <a href="http://people.skolelinux.org/pere/blog/Visualizing_GSM_radio_chatter_using_gr_gsm_and_Hopglass.html">Visualizing GSM radio chatter using gr-gsm and Hopglass</a>
1454 </div>
1455 <div class="date">
1456 29th September 2017
1457 </div>
1458 <div class="body">
1459 <p>Every mobile phone announce its existence over radio to the nearby
1460 mobile cell towers. And this radio chatter is available for anyone
1461 with a radio receiver capable of receiving them. Details about the
1462 mobile phones with very good accuracy is of course collected by the
1463 phone companies, but this is not the topic of this blog post. The
1464 mobile phone radio chatter make it possible to figure out when a cell
1465 phone is nearby, as it include the SIM card ID (IMSI). By paying
1466 attention over time, one can see when a phone arrive and when it leave
1467 an area. I believe it would be nice to make this information more
1468 available to the general public, to make more people aware of how
1469 their phones are announcing their whereabouts to anyone that care to
1470 listen.</p>
1471
1472 <p>I am very happy to report that we managed to get something
1473 visualizing this information up and running for
1474 <a href="http://norwaymakers.org/osf17">Oslo Skaperfestival 2017</a>
1475 (Oslo Makers Festival) taking place today and tomorrow at Deichmanske
1476 library. The solution is based on the
1477 <a href="http://people.skolelinux.org/pere/blog/Easier_recipe_to_observe_the_cell_phones_around_you.html">simple
1478 recipe for listening to GSM chatter</a> I posted a few days ago, and
1479 will show up at the stand of <a href="http://sonen.ifi.uio.no/">Åpen
1480 Sone from the Computer Science department of the University of
1481 Oslo</a>. The presentation will show the nearby mobile phones (aka
1482 IMSIs) as dots in a web browser graph, with lines to the dot
1483 representing mobile base station it is talking to. It was working in
1484 the lab yesterday, and was moved into place this morning.</p>
1485
1486 <p>We set up a fairly powerful desktop machine using Debian
1487 Buster/Testing with several (five, I believe) RTL2838 DVB-T receivers
1488 connected and visualize the visible cell phone towers using an
1489 <a href="https://github.com/marlow925/hopglass">English version of
1490 Hopglass</a>. A fairly powerfull machine is needed as the
1491 grgsm_livemon_headless processes from
1492 <a href="https://tracker.debian.org/pkg/gr-gsm">gr-gsm</a> converting
1493 the radio signal to data packages is quite CPU intensive.</p>
1494
1495 <p>The frequencies to listen to, are identified using a slightly
1496 patched scan-and-livemon (to set the --args values for each receiver),
1497 and the Hopglass data is generated using the
1498 <a href="https://github.com/petterreinholdtsen/IMSI-catcher/tree/meshviewer-output">patches
1499 in my meshviewer-output branch</a>. For some reason we could not get
1500 more than four SDRs working. There is also a geographical map trying
1501 to show the location of the base stations, but I believe their
1502 coordinates are hardcoded to some random location in Germany, I
1503 believe. The code should be replaced with code to look up location in
1504 a text file, a sqlite database or one of the online databases
1505 mentioned in
1506 <a href="https://github.com/Oros42/IMSI-catcher/issues/14">the github
1507 issue for the topic</a>.
1508
1509 <p>If this sound interesting, visit the stand at the festival!</p>
1510
1511 </div>
1512 <div class="tags">
1513
1514
1515 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>.
1516
1517
1518 </div>
1519 </div>
1520 <div class="padding"></div>
1521
1522 <div class="entry">
1523 <div class="title">
1524 <a href="http://people.skolelinux.org/pere/blog/Easier_recipe_to_observe_the_cell_phones_around_you.html">Easier recipe to observe the cell phones around you</a>
1525 </div>
1526 <div class="date">
1527 24th September 2017
1528 </div>
1529 <div class="body">
1530 <p>A little more than a month ago I wrote
1531 <a href="http://people.skolelinux.org/pere/blog/Simpler_recipe_on_how_to_make_a_simple__7_IMSI_Catcher_using_Debian.html">how
1532 to observe the SIM card ID (aka IMSI number) of mobile phones talking
1533 to nearby mobile phone base stations using Debian GNU/Linux and a
1534 cheap USB software defined radio</a>, and thus being able to pinpoint
1535 the location of people and equipment (like cars and trains) with an
1536 accuracy of a few kilometer. Since then we have worked to make the
1537 procedure even simpler, and it is now possible to do this without any
1538 manual frequency tuning and without building your own packages.</p>
1539
1540 <p>The <a href="https://tracker.debian.org/pkg/gr-gsm">gr-gsm</a>
1541 package is now included in Debian testing and unstable, and the
1542 IMSI-catcher code no longer require root access to fetch and decode
1543 the GSM data collected using gr-gsm.</p>
1544
1545 <p>Here is an updated recipe, using packages built by Debian and a git
1546 clone of two python scripts:</p>
1547
1548 <ol>
1549
1550 <li>Start with a Debian machine running the Buster version (aka
1551 testing).</li>
1552
1553 <li>Run '<tt>apt install gr-gsm python-numpy python-scipy
1554 python-scapy</tt>' as root to install required packages.</li>
1555
1556 <li>Fetch the code decoding GSM packages using '<tt>git clone
1557 github.com/Oros42/IMSI-catcher.git</tt>'.</li>
1558
1559 <li>Insert USB software defined radio supported by GNU Radio.</li>
1560
1561 <li>Enter the IMSI-catcher directory and run '<tt>python
1562 scan-and-livemon</tt>' to locate the frequency of nearby base
1563 stations and start listening for GSM packages on one of them.</li>
1564
1565 <li>Enter the IMSI-catcher directory and run '<tt>python
1566 simple_IMSI-catcher.py</tt>' to display the collected information.</li>
1567
1568 </ol>
1569
1570 <p>Note, due to a bug somewhere the scan-and-livemon program (actually
1571 <a href="https://github.com/ptrkrysik/gr-gsm/issues/336">its underlying
1572 program grgsm_scanner</a>) do not work with the HackRF radio. It does
1573 work with RTL 8232 and other similar USB radio receivers you can get
1574 very cheaply
1575 (<a href="https://www.ebay.com/sch/items/?_nkw=rtl+2832">for example
1576 from ebay</a>), so for now the solution is to scan using the RTL radio
1577 and only use HackRF for fetching GSM data.</p>
1578
1579 <p>As far as I can tell, a cell phone only show up on one of the
1580 frequencies at the time, so if you are going to track and count every
1581 cell phone around you, you need to listen to all the frequencies used.
1582 To listen to several frequencies, use the --numrecv argument to
1583 scan-and-livemon to use several receivers. Further, I am not sure if
1584 phones using 3G or 4G will show as talking GSM to base stations, so
1585 this approach might not see all phones around you. I typically see
1586 0-400 IMSI numbers an hour when looking around where I live.</p>
1587
1588 <p>I've tried to run the scanner on a
1589 <a href="https://wiki.debian.org/RaspberryPi">Raspberry Pi 2 and 3
1590 running Debian Buster</a>, but the grgsm_livemon_headless process seem
1591 to be too CPU intensive to keep up. When GNU Radio print 'O' to
1592 stdout, I am told there it is caused by a buffer overflow between the
1593 radio and GNU Radio, caused by the program being unable to read the
1594 GSM data fast enough. If you see a stream of 'O's from the terminal
1595 where you started scan-and-livemon, you need a give the process more
1596 CPU power. Perhaps someone are able to optimize the code to a point
1597 where it become possible to set up RPi3 based GSM sniffers? I tried
1598 using Raspbian instead of Debian, but there seem to be something wrong
1599 with GNU Radio on raspbian, causing glibc to abort().</p>
1600
1601 </div>
1602 <div class="tags">
1603
1604
1605 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>.
1606
1607
1608 </div>
1609 </div>
1610 <div class="padding"></div>
1611
1612 <div class="entry">
1613 <div class="title">
1614 <a href="http://people.skolelinux.org/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>
1615 </div>
1616 <div class="date">
1617 9th August 2017
1618 </div>
1619 <div class="body">
1620 <p>On friday, I came across an interesting article in the Norwegian
1621 web based ICT news magazine digi.no on
1622 <a href="https://www.digi.no/artikler/sikkerhetsforsker-lagde-enkel-imsi-catcher-for-60-kroner-na-kan-mobiler-kartlegges-av-alle/398588">how
1623 to collect the IMSI numbers of nearby cell phones</a> using the cheap
1624 DVB-T software defined radios. The article refered to instructions
1625 and <a href="https://www.youtube.com/watch?v=UjwgNd_as30">a recipe by
1626 Keld Norman on Youtube on how to make a simple $7 IMSI Catcher</a>, and I decided to test them out.</p>
1627
1628 <p>The instructions said to use Ubuntu, install pip using apt (to
1629 bypass apt), use pip to install pybombs (to bypass both apt and pip),
1630 and the ask pybombs to fetch and build everything you need from
1631 scratch. I wanted to see if I could do the same on the most recent
1632 Debian packages, but this did not work because pybombs tried to build
1633 stuff that no longer build with the most recent openssl library or
1634 some other version skew problem. While trying to get this recipe
1635 working, I learned that the apt->pip->pybombs route was a long detour,
1636 and the only piece of software dependency missing in Debian was the
1637 gr-gsm package. I also found out that the lead upstream developer of
1638 gr-gsm (the name stand for GNU Radio GSM) project already had a set of
1639 Debian packages provided in an Ubuntu PPA repository. All I needed to
1640 do was to dget the Debian source package and built it.</p>
1641
1642 <p>The IMSI collector is a python script listening for packages on the
1643 loopback network device and printing to the terminal some specific GSM
1644 packages with IMSI numbers in them. The code is fairly short and easy
1645 to understand. The reason this work is because gr-gsm include a tool
1646 to read GSM data from a software defined radio like a DVB-T USB stick
1647 and other software defined radios, decode them and inject them into a
1648 network device on your Linux machine (using the loopback device by
1649 default). This proved to work just fine, and I've been testing the
1650 collector for a few days now.</p>
1651
1652 <p>The updated and simpler recipe is thus to</p>
1653
1654 <ol>
1655
1656 <li>start with a Debian machine running Stretch or newer,</li>
1657
1658 <li>build and install the gr-gsm package available from
1659 <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>
1660
1661 <li>clone the git repostory from <a href="https://github.com/Oros42/IMSI-catcher">https://github.com/Oros42/IMSI-catcher</a>,</li>
1662
1663 <li>run grgsm_livemon and adjust the frequency until the terminal
1664 where it was started is filled with a stream of text (meaning you
1665 found a GSM station).</li>
1666
1667 <li>go into the IMSI-catcher directory and run 'sudo python simple_IMSI-catcher.py' to extract the IMSI numbers.</li>
1668
1669 </ol>
1670
1671 <p>To make it even easier in the future to get this sniffer up and
1672 running, I decided to package
1673 <a href="https://github.com/ptrkrysik/gr-gsm/">the gr-gsm project</a>
1674 for Debian (<a href="https://bugs.debian.org/871055">WNPP
1675 #871055</a>), and the package was uploaded into the NEW queue today.
1676 Luckily the gnuradio maintainer has promised to help me, as I do not
1677 know much about gnuradio stuff yet.</p>
1678
1679 <p>I doubt this "IMSI cacher" is anywhere near as powerfull as
1680 commercial tools like
1681 <a href="https://www.thespyphone.com/portable-imsi-imei-catcher/">The
1682 Spy Phone Portable IMSI / IMEI Catcher</a> or the
1683 <a href="https://en.wikipedia.org/wiki/Stingray_phone_tracker">Harris
1684 Stingray</a>, but I hope the existance of cheap alternatives can make
1685 more people realise how their whereabouts when carrying a cell phone
1686 is easily tracked. Seeing the data flow on the screen, realizing that
1687 I live close to a police station and knowing that the police is also
1688 wearing cell phones, I wonder how hard it would be for criminals to
1689 track the position of the police officers to discover when there are
1690 police near by, or for foreign military forces to track the location
1691 of the Norwegian military forces, or for anyone to track the location
1692 of government officials...</p>
1693
1694 <p>It is worth noting that the data reported by the IMSI-catcher
1695 script mentioned above is only a fraction of the data broadcasted on
1696 the GSM network. It will only collect one frequency at the time,
1697 while a typical phone will be using several frequencies, and not all
1698 phones will be using the frequencies tracked by the grgsm_livemod
1699 program. Also, there is a lot of radio chatter being ignored by the
1700 simple_IMSI-catcher script, which would be collected by extending the
1701 parser code. I wonder if gr-gsm can be set up to listen to more than
1702 one frequency?</p>
1703
1704 </div>
1705 <div class="tags">
1706
1707
1708 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>.
1709
1710
1711 </div>
1712 </div>
1713 <div class="padding"></div>
1714
1715 <div class="entry">
1716 <div class="title">
1717 <a href="http://people.skolelinux.org/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>
1718 </div>
1719 <div class="date">
1720 25th July 2017
1721 </div>
1722 <div class="body">
1723 <p align="center"><img align="center" src="http://people.skolelinux.org/pere/blog/images/2017-07-25-debian-handbook-nb-testprint.png"/></p>
1724
1725 <p>I finally received a copy of the Norwegian Bokmål edition of
1726 "<a href="https://debian-handbook.info/">The Debian Administrator's
1727 Handbook</a>". This test copy arrived in the mail a few days ago, and
1728 I am very happy to hold the result in my hand. We spent around one and a half year translating it. This paperbook edition
1729 <a href="https://debian-handbook.info/get/#norwegian">is available
1730 from lulu.com</a>. If you buy it quickly, you save 25% on the list
1731 price. The book is also available for download in electronic form as
1732 PDF, EPUB and Mobipocket, as can be
1733 <a href="https://debian-handbook.info/browse/nb-NO/stable/">read online
1734 as a web page</a>.</p>
1735
1736 <p>This is the second book I publish (the first was the book
1737 "<a href="http://free-culture.cc/">Free Culture</a>" by Lawrence Lessig
1738 in
1739 <a href="http://www.lulu.com/shop/lawrence-lessig/free-culture/paperback/product-22440520.html">English</a>,
1740 <a href="http://www.lulu.com/shop/lawrence-lessig/culture-libre/paperback/product-22645082.html">French</a>
1741 and
1742 <a href="http://www.lulu.com/shop/lawrence-lessig/fri-kultur/paperback/product-22441576.html">Norwegian
1743 Bokmål</a>), and I am very excited to finally wrap up this
1744 project. I hope
1745 "<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
1746 for Debian-administratoren</a>" will be well received.</p>
1747
1748 </div>
1749 <div class="tags">
1750
1751
1752 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
1753
1754
1755 </div>
1756 </div>
1757 <div class="padding"></div>
1758
1759 <div class="entry">
1760 <div class="title">
1761 <a href="http://people.skolelinux.org/pere/blog/N_r_nynorskoversettelsen_svikter_til_eksamen___.html">Når nynorskoversettelsen svikter til eksamen...</a>
1762 </div>
1763 <div class="date">
1764 3rd June 2017
1765 </div>
1766 <div class="body">
1767 <p><a href="http://www.aftenposten.no/norge/Krever-at-elever-ma-fa-annullert-eksamen-etter-rot-med-oppgavetekster-622459b.html">Aftenposten
1768 melder i dag</a> om feil i eksamensoppgavene for eksamen i politikk og
1769 menneskerettigheter, der teksten i bokmåls og nynorskutgaven ikke var
1770 like. Oppgaveteksten er gjengitt i artikkelen, og jeg ble nysgjerring
1771 på om den fri oversetterløsningen
1772 <a href="https://www.apertium.org/">Apertium</a> ville gjort en bedre
1773 jobb enn Utdanningsdirektoratet. Det kan se slik ut.</p>
1774
1775 <p>Her er bokmålsoppgaven fra eksamenen:</p>
1776
1777 <blockquote>
1778 <p>Drøft utfordringene knyttet til nasjonalstatenes og andre aktørers
1779 rolle og muligheter til å håndtere internasjonale utfordringer, som
1780 for eksempel flykningekrisen.</p>
1781
1782 <p>Vedlegge er eksempler på tekster som kan gi relevante perspektiver
1783 på temaet:</p>
1784 <ol>
1785 <li>Flykningeregnskapet 2016, UNHCR og IDMC
1786 <li>«Grenseløst Europa for fall» A-Magasinet, 26. november 2015
1787 </ol>
1788
1789 </blockquote>
1790
1791 <p>Dette oversetter Apertium slik:</p>
1792
1793 <blockquote>
1794 <p>Drøft utfordringane knytte til nasjonalstatane sine og rolla til
1795 andre aktørar og høve til å handtera internasjonale utfordringar, som
1796 til dømes *flykningekrisen.</p>
1797
1798 <p>Vedleggja er døme på tekster som kan gje relevante perspektiv på
1799 temaet:</p>
1800
1801 <ol>
1802 <li>*Flykningeregnskapet 2016, *UNHCR og *IDMC</li>
1803 <li>«*Grenseløst Europa for fall» A-Magasinet, 26. november 2015</li>
1804 </ol>
1805
1806 </blockquote>
1807
1808 <p>Ord som ikke ble forstått er markert med stjerne (*), og trenger
1809 ekstra språksjekk. Men ingen ord er forsvunnet, slik det var i
1810 oppgaven elevene fikk presentert på eksamen. Jeg mistenker dog at
1811 "andre aktørers rolle og muligheter til ..." burde vært oversatt til
1812 "rolla til andre aktørar og deira høve til ..." eller noe slikt, men
1813 det er kanskje flisespikking. Det understreker vel bare at det alltid
1814 trengs korrekturlesning etter automatisk oversettelse.</p>
1815
1816 </div>
1817 <div class="tags">
1818
1819
1820 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>, <a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll</a>.
1821
1822
1823 </div>
1824 </div>
1825 <div class="padding"></div>
1826
1827 <div class="entry">
1828 <div class="title">
1829 <a href="http://people.skolelinux.org/pere/blog/Detecting_NFS_hangs_on_Linux_without_hanging_yourself___.html">Detecting NFS hangs on Linux without hanging yourself...</a>
1830 </div>
1831 <div class="date">
1832 9th March 2017
1833 </div>
1834 <div class="body">
1835 <p>Over the years, administrating thousand of NFS mounting linux
1836 computers at the time, I often needed a way to detect if the machine
1837 was experiencing NFS hang. If you try to use <tt>df</tt> or look at a
1838 file or directory affected by the hang, the process (and possibly the
1839 shell) will hang too. So you want to be able to detect this without
1840 risking the detection process getting stuck too. It has not been
1841 obvious how to do this. When the hang has lasted a while, it is
1842 possible to find messages like these in dmesg:</p>
1843
1844 <p><blockquote>
1845 nfs: server nfsserver not responding, still trying
1846 <br>nfs: server nfsserver OK
1847 </blockquote></p>
1848
1849 <p>It is hard to know if the hang is still going on, and it is hard to
1850 be sure looking in dmesg is going to work. If there are lots of other
1851 messages in dmesg the lines might have rotated out of site before they
1852 are noticed.</p>
1853
1854 <p>While reading through the nfs client implementation in linux kernel
1855 code, I came across some statistics that seem to give a way to detect
1856 it. The om_timeouts sunrpc value in the kernel will increase every
1857 time the above log entry is inserted into dmesg. And after digging a
1858 bit further, I discovered that this value show up in
1859 /proc/self/mountstats on Linux.</p>
1860
1861 <p>The mountstats content seem to be shared between files using the
1862 same file system context, so it is enough to check one of the
1863 mountstats files to get the state of the mount point for the machine.
1864 I assume this will not show lazy umounted NFS points, nor NFS mount
1865 points in a different process context (ie with a different filesystem
1866 view), but that does not worry me.</p>
1867
1868 <p>The content for a NFS mount point look similar to this:</p>
1869
1870 <p><blockquote><pre>
1871 [...]
1872 device /dev/mapper/Debian-var mounted on /var with fstype ext3
1873 device nfsserver:/mnt/nfsserver/home0 mounted on /mnt/nfsserver/home0 with fstype nfs statvers=1.1
1874 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
1875 age: 7863311
1876 caps: caps=0x3fe7,wtmult=4096,dtsize=8192,bsize=0,namlen=255
1877 sec: flavor=1,pseudoflavor=1
1878 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
1879 bytes: 166253035039 219519120027 0 0 40783504807 185466229638 11677877 45561809
1880 RPC iostats version: 1.0 p/v: 100003/3 (nfs)
1881 xprt: tcp 925 1 6810 0 0 111505412 111480497 109 2672418560317 0 248 53869103 22481820
1882 per-op statistics
1883 NULL: 0 0 0 0 0 0 0 0
1884 GETATTR: 61063106 61063108 0 9621383060 6839064400 453650 77291321 78926132
1885 SETATTR: 463469 463470 0 92005440 66739536 63787 603235 687943
1886 LOOKUP: 17021657 17021657 0 3354097764 4013442928 57216 35125459 35566511
1887 ACCESS: 14281703 14290009 5 2318400592 1713803640 1709282 4865144 7130140
1888 READLINK: 125 125 0 20472 18620 0 1112 1118
1889 READ: 4214236 4214237 0 715608524 41328653212 89884 22622768 22806693
1890 WRITE: 8479010 8494376 22 187695798568 1356087148 178264904 51506907 231671771
1891 CREATE: 171708 171708 0 38084748 46702272 873 1041833 1050398
1892 MKDIR: 3680 3680 0 773980 993920 26 23990 24245
1893 SYMLINK: 903 903 0 233428 245488 6 5865 5917
1894 MKNOD: 80 80 0 20148 21760 0 299 304
1895 REMOVE: 429921 429921 0 79796004 61908192 3313 2710416 2741636
1896 RMDIR: 3367 3367 0 645112 484848 22 5782 6002
1897 RENAME: 466201 466201 0 130026184 121212260 7075 5935207 5961288
1898 LINK: 289155 289155 0 72775556 67083960 2199 2565060 2585579
1899 READDIR: 2933237 2933237 0 516506204 13973833412 10385 3190199 3297917
1900 READDIRPLUS: 1652839 1652839 0 298640972 6895997744 84735 14307895 14448937
1901 FSSTAT: 6144 6144 0 1010516 1032192 51 9654 10022
1902 FSINFO: 2 2 0 232 328 0 1 1
1903 PATHCONF: 1 1 0 116 140 0 0 0
1904 COMMIT: 0 0 0 0 0 0 0 0
1905
1906 device binfmt_misc mounted on /proc/sys/fs/binfmt_misc with fstype binfmt_misc
1907 [...]
1908 </pre></blockquote></p>
1909
1910 <p>The key number to look at is the third number in the per-op list.
1911 It is the number of NFS timeouts experiences per file system
1912 operation. Here 22 write timeouts and 5 access timeouts. If these
1913 numbers are increasing, I believe the machine is experiencing NFS
1914 hang. Unfortunately the timeout value do not start to increase right
1915 away. The NFS operations need to time out first, and this can take a
1916 while. The exact timeout value depend on the setup. For example the
1917 defaults for TCP and UDP mount points are quite different, and the
1918 timeout value is affected by the soft, hard, timeo and retrans NFS
1919 mount options.</p>
1920
1921 <p>The only way I have been able to get working on Debian and RedHat
1922 Enterprise Linux for getting the timeout count is to peek in /proc/.
1923 But according to
1924 <ahref="http://docs.oracle.com/cd/E19253-01/816-4555/netmonitor-12/index.html">Solaris
1925 10 System Administration Guide: Network Services</a>, the 'nfsstat -c'
1926 command can be used to get these timeout values. But this do not work
1927 on Linux, as far as I can tell. I
1928 <ahref="http://bugs.debian.org/857043">asked Debian about this</a>,
1929 but have not seen any replies yet.</p>
1930
1931 <p>Is there a better way to figure out if a Linux NFS client is
1932 experiencing NFS hangs? Is there a way to detect which processes are
1933 affected? Is there a way to get the NFS mount going quickly once the
1934 network problem causing the NFS hang has been cleared? I would very
1935 much welcome some clues, as we regularly run into NFS hangs.</p>
1936
1937 </div>
1938 <div class="tags">
1939
1940
1941 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin</a>.
1942
1943
1944 </div>
1945 </div>
1946 <div class="padding"></div>
1947
1948 <div class="entry">
1949 <div class="title">
1950 <a href="http://people.skolelinux.org/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>
1951 </div>
1952 <div class="date">
1953 3rd March 2017
1954 </div>
1955 <div class="body">
1956 <p>For almost a year now, we have been working on making a Norwegian
1957 Bokmål edition of <a href="https://debian-handbook.info/">The Debian
1958 Administrator's Handbook</a>. Now, thanks to the tireless effort of
1959 Ole-Erik, Ingrid and Andreas, the initial translation is complete, and
1960 we are working on the proof reading to ensure consistent language and
1961 use of correct computer science terms. The plan is to make the book
1962 available on paper, as well as in electronic form. For that to
1963 happen, the proof reading must be completed and all the figures need
1964 to be translated. If you want to help out, get in touch.</p>
1965
1966 <p><a href="http://people.skolelinux.org/pere/debian-handbook/debian-handbook-nb-NO.pdf">A
1967
1968 fresh PDF edition</a> in A4 format (the final book will have smaller
1969 pages) of the book created every morning is available for
1970 proofreading. If you find any errors, please
1971 <a href="https://hosted.weblate.org/projects/debian-handbook/">visit
1972 Weblate and correct the error</a>. The
1973 <a href="http://l.github.io/debian-handbook/stat/nb-NO/index.html">state
1974 of the translation including figures</a> is a useful source for those
1975 provide Norwegian bokmål screen shots and figures.</p>
1976
1977 </div>
1978 <div class="tags">
1979
1980
1981 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
1982
1983
1984 </div>
1985 </div>
1986 <div class="padding"></div>
1987
1988 <div class="entry">
1989 <div class="title">
1990 <a href="http://people.skolelinux.org/pere/blog/Unlimited_randomness_with_the_ChaosKey_.html">Unlimited randomness with the ChaosKey?</a>
1991 </div>
1992 <div class="date">
1993 1st March 2017
1994 </div>
1995 <div class="body">
1996 <p>A few days ago I ordered a small batch of
1997 <a href="http://altusmetrum.org/ChaosKey/">the ChaosKey</a>, a small
1998 USB dongle for generating entropy created by Bdale Garbee and Keith
1999 Packard. Yesterday it arrived, and I am very happy to report that it
2000 work great! According to its designers, to get it to work out of the
2001 box, you need the Linux kernel version 4.1 or later. I tested on a
2002 Debian Stretch machine (kernel version 4.9), and there it worked just
2003 fine, increasing the available entropy very quickly. I wrote a small
2004 test oneliner to test. It first print the current entropy level,
2005 drain /dev/random, and then print the entropy level for five seconds.
2006 Here is the situation without the ChaosKey inserted:</p>
2007
2008 <blockquote><pre>
2009 % cat /proc/sys/kernel/random/entropy_avail; \
2010 dd bs=1M if=/dev/random of=/dev/null count=1; \
2011 for n in $(seq 1 5); do \
2012 cat /proc/sys/kernel/random/entropy_avail; \
2013 sleep 1; \
2014 done
2015 300
2016 0+1 oppføringer inn
2017 0+1 oppføringer ut
2018 28 byte kopiert, 0,000264565 s, 106 kB/s
2019 4
2020 8
2021 12
2022 17
2023 21
2024 %
2025 </pre></blockquote>
2026
2027 <p>The entropy level increases by 3-4 every second. In such case any
2028 application requiring random bits (like a HTTPS enabled web server)
2029 will halt and wait for more entrpy. And here is the situation with
2030 the ChaosKey inserted:</p>
2031
2032 <blockquote><pre>
2033 % cat /proc/sys/kernel/random/entropy_avail; \
2034 dd bs=1M if=/dev/random of=/dev/null count=1; \
2035 for n in $(seq 1 5); do \
2036 cat /proc/sys/kernel/random/entropy_avail; \
2037 sleep 1; \
2038 done
2039 1079
2040 0+1 oppføringer inn
2041 0+1 oppføringer ut
2042 104 byte kopiert, 0,000487647 s, 213 kB/s
2043 433
2044 1028
2045 1031
2046 1035
2047 1038
2048 %
2049 </pre></blockquote>
2050
2051 <p>Quite the difference. :) I bought a few more than I need, in case
2052 someone want to buy one here in Norway. :)</p>
2053
2054 <p>Update: The dongle was presented at Debconf last year. You might
2055 find <a href="https://debconf16.debconf.org/talks/94/">the talk
2056 recording illuminating</a>. It explains exactly what the source of
2057 randomness is, if you are unable to spot it from the schema drawing
2058 available from the ChaosKey web site linked at the start of this blog
2059 post.</p>
2060
2061 </div>
2062 <div class="tags">
2063
2064
2065 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
2066
2067
2068 </div>
2069 </div>
2070 <div class="padding"></div>
2071
2072 <div class="entry">
2073 <div class="title">
2074 <a href="http://people.skolelinux.org/pere/blog/Where_did_that_package_go___mdash__geolocated_IP_traceroute.html">Where did that package go? &mdash; geolocated IP traceroute</a>
2075 </div>
2076 <div class="date">
2077 9th January 2017
2078 </div>
2079 <div class="body">
2080 <p>Did you ever wonder where the web trafic really flow to reach the
2081 web servers, and who own the network equipment it is flowing through?
2082 It is possible to get a glimpse of this from using traceroute, but it
2083 is hard to find all the details. Many years ago, I wrote a system to
2084 map the Norwegian Internet (trying to figure out if our plans for a
2085 network game service would get low enough latency, and who we needed
2086 to talk to about setting up game servers close to the users. Back
2087 then I used traceroute output from many locations (I asked my friends
2088 to run a script and send me their traceroute output) to create the
2089 graph and the map. The output from traceroute typically look like
2090 this:
2091
2092 <p><pre>
2093 traceroute to www.stortinget.no (85.88.67.10), 30 hops max, 60 byte packets
2094 1 uio-gw10.uio.no (129.240.202.1) 0.447 ms 0.486 ms 0.621 ms
2095 2 uio-gw8.uio.no (129.240.24.229) 0.467 ms 0.578 ms 0.675 ms
2096 3 oslo-gw1.uninett.no (128.39.65.17) 0.385 ms 0.373 ms 0.358 ms
2097 4 te3-1-2.br1.fn3.as2116.net (193.156.90.3) 1.174 ms 1.172 ms 1.153 ms
2098 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
2099 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
2100 7 89.191.10.146 (89.191.10.146) 0.931 ms 0.917 ms 0.955 ms
2101 8 * * *
2102 9 * * *
2103 [...]
2104 </pre></p>
2105
2106 <p>This show the DNS names and IP addresses of (at least some of the)
2107 network equipment involved in getting the data traffic from me to the
2108 www.stortinget.no server, and how long it took in milliseconds for a
2109 package to reach the equipment and return to me. Three packages are
2110 sent, and some times the packages do not follow the same path. This
2111 is shown for hop 5, where three different IP addresses replied to the
2112 traceroute request.</p>
2113
2114 <p>There are many ways to measure trace routes. Other good traceroute
2115 implementations I use are traceroute (using ICMP packages) mtr (can do
2116 both ICMP, UDP and TCP) and scapy (python library with ICMP, UDP, TCP
2117 traceroute and a lot of other capabilities). All of them are easily
2118 available in <a href="https://www.debian.org/">Debian</a>.</p>
2119
2120 <p>This time around, I wanted to know the geographic location of
2121 different route points, to visualize how visiting a web page spread
2122 information about the visit to a lot of servers around the globe. The
2123 background is that a web site today often will ask the browser to get
2124 from many servers the parts (for example HTML, JSON, fonts,
2125 JavaScript, CSS, video) required to display the content. This will
2126 leak information about the visit to those controlling these servers
2127 and anyone able to peek at the data traffic passing by (like your ISP,
2128 the ISPs backbone provider, FRA, GCHQ, NSA and others).</p>
2129
2130 <p>Lets pick an example, the Norwegian parliament web site
2131 www.stortinget.no. It is read daily by all members of parliament and
2132 their staff, as well as political journalists, activits and many other
2133 citizens of Norway. A visit to the www.stortinget.no web site will
2134 ask your browser to contact 8 other servers: ajax.googleapis.com,
2135 insights.hotjar.com, script.hotjar.com, static.hotjar.com,
2136 stats.g.doubleclick.net, www.google-analytics.com,
2137 www.googletagmanager.com and www.netigate.se. I extracted this by
2138 asking <a href="http://phantomjs.org/">PhantomJS</a> to visit the
2139 Stortinget web page and tell me all the URLs PhantomJS downloaded to
2140 render the page (in HAR format using
2141 <a href="https://github.com/ariya/phantomjs/blob/master/examples/netsniff.js">their
2142 netsniff example</a>. I am very grateful to Gorm for showing me how
2143 to do this). My goal is to visualize network traces to all IP
2144 addresses behind these DNS names, do show where visitors personal
2145 information is spread when visiting the page.</p>
2146
2147 <p align="center"><a href="www.stortinget.no-geoip.kml"><img
2148 src="http://people.skolelinux.org/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>
2149
2150 <p>When I had a look around for options, I could not find any good
2151 free software tools to do this, and decided I needed my own traceroute
2152 wrapper outputting KML based on locations looked up using GeoIP. KML
2153 is easy to work with and easy to generate, and understood by several
2154 of the GIS tools I have available. I got good help from by NUUG
2155 colleague Anders Einar with this, and the result can be seen in
2156 <a href="https://github.com/petterreinholdtsen/kmltraceroute">my
2157 kmltraceroute git repository</a>. Unfortunately, the quality of the
2158 free GeoIP databases I could find (and the for-pay databases my
2159 friends had access to) is not up to the task. The IP addresses of
2160 central Internet infrastructure would typically be placed near the
2161 controlling companies main office, and not where the router is really
2162 located, as you can see from <a href="www.stortinget.no-geoip.kml">the
2163 KML file I created</a> using the GeoLite City dataset from MaxMind.
2164
2165 <p align="center"><a href="http://people.skolelinux.org/pere/blog/images/2017-01-09-www.stortinget.no-scapy.svg"><img
2166 src="http://people.skolelinux.org/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>
2167
2168 <p>I also had a look at the visual traceroute graph created by
2169 <a href="http://www.secdev.org/projects/scapy/">the scrapy project</a>,
2170 showing IP network ownership (aka AS owner) for the IP address in
2171 question.
2172 <a href="http://people.skolelinux.org/pere/blog/images/2017-01-09-www.stortinget.no-scapy.svg">The
2173 graph display a lot of useful information about the traceroute in SVG
2174 format</a>, and give a good indication on who control the network
2175 equipment involved, but it do not include geolocation. This graph
2176 make it possible to see the information is made available at least for
2177 UNINETT, Catchcom, Stortinget, Nordunet, Google, Amazon, Telia, Level
2178 3 Communications and NetDNA.</p>
2179
2180 <p align="center"><a href="https://geotraceroute.com/index.php?node=4&host=www.stortinget.no"><img
2181 src="http://people.skolelinux.org/pere/blog/images/2017-01-09-www.stortinget.no-geotraceroute-small.png" alt="example geotraceroute view for www.stortinget.no"/></a></p>
2182
2183 <p>In the process, I came across the
2184 <a href="https://geotraceroute.com/">web service GeoTraceroute</a> by
2185 Salim Gasmi. Its methology of combining guesses based on DNS names,
2186 various location databases and finally use latecy times to rule out
2187 candidate locations seemed to do a very good job of guessing correct
2188 geolocation. But it could only do one trace at the time, did not have
2189 a sensor in Norway and did not make the geolocations easily available
2190 for postprocessing. So I contacted the developer and asked if he
2191 would be willing to share the code (he refused until he had time to
2192 clean it up), but he was interested in providing the geolocations in a
2193 machine readable format, and willing to set up a sensor in Norway. So
2194 since yesterday, it is possible to run traces from Norway in this
2195 service thanks to a sensor node set up by
2196 <a href="https://www.nuug.no/">the NUUG assosiation</a>, and get the
2197 trace in KML format for further processing.</p>
2198
2199 <p align="center"><a href="http://people.skolelinux.org/pere/blog/images/2017-01-09-www.stortinget.no-geotraceroute-kml-join.kml"><img
2200 src="http://people.skolelinux.org/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>
2201
2202 <p>Here we can see a lot of trafic passes Sweden on its way to
2203 Denmark, Germany, Holland and Ireland. Plenty of places where the
2204 Snowden confirmations verified the traffic is read by various actors
2205 without your best interest as their top priority.</p>
2206
2207 <p>Combining KML files is trivial using a text editor, so I could loop
2208 over all the hosts behind the urls imported by www.stortinget.no and
2209 ask for the KML file from GeoTraceroute, and create a combined KML
2210 file with all the traces (unfortunately only one of the IP addresses
2211 behind the DNS name is traced this time. To get them all, one would
2212 have to request traces using IP number instead of DNS names from
2213 GeoTraceroute). That might be the next step in this project.</p>
2214
2215 <p>Armed with these tools, I find it a lot easier to figure out where
2216 the IP traffic moves and who control the boxes involved in moving it.
2217 And every time the link crosses for example the Swedish border, we can
2218 be sure Swedish Signal Intelligence (FRA) is listening, as GCHQ do in
2219 Britain and NSA in USA and cables around the globe. (Hm, what should
2220 we tell them? :) Keep that in mind if you ever send anything
2221 unencrypted over the Internet.</p>
2222
2223 <p>PS: KML files are drawn using
2224 <a href="http://ivanrublev.me/kml/">the KML viewer from Ivan
2225 Rublev<a/>, as it was less cluttered than the local Linux application
2226 Marble. There are heaps of other options too.</p>
2227
2228 <p>As usual, if you use Bitcoin and want to show your support of my
2229 activities, please send Bitcoin donations to my address
2230 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2231
2232 </div>
2233 <div class="tags">
2234
2235
2236 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/kart">kart</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>, <a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern</a>, <a href="http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>.
2237
2238
2239 </div>
2240 </div>
2241 <div class="padding"></div>
2242
2243 <div class="entry">
2244 <div class="title">
2245 <a href="http://people.skolelinux.org/pere/blog/Appstream_just_learned_how_to_map_hardware_to_packages_too_.html">Appstream just learned how to map hardware to packages too!</a>
2246 </div>
2247 <div class="date">
2248 23rd December 2016
2249 </div>
2250 <div class="body">
2251 <p>I received a very nice Christmas present today. As my regular
2252 readers probably know, I have been working on the
2253 <a href="http://packages.qa.debian.org/isenkram">the Isenkram
2254 system</a> for many years. The goal of the Isenkram system is to make
2255 it easier for users to figure out what to install to get a given piece
2256 of hardware to work in Debian, and a key part of this system is a way
2257 to map hardware to packages. Isenkram have its own mapping database,
2258 and also uses data provided by each package using the AppStream
2259 metadata format. And today,
2260 <a href="https://tracker.debian.org/pkg/appstream">AppStream</a> in
2261 Debian learned to look up hardware the same way Isenkram is doing it,
2262 ie using fnmatch():</p>
2263
2264 <p><pre>
2265 % appstreamcli what-provides modalias \
2266 usb:v1130p0202d0100dc00dsc00dp00ic03isc00ip00in00
2267 Identifier: pymissile [generic]
2268 Name: pymissile
2269 Summary: Control original Striker USB Missile Launcher
2270 Package: pymissile
2271 % appstreamcli what-provides modalias usb:v0694p0002d0000
2272 Identifier: libnxt [generic]
2273 Name: libnxt
2274 Summary: utility library for talking to the LEGO Mindstorms NXT brick
2275 Package: libnxt
2276 ---
2277 Identifier: t2n [generic]
2278 Name: t2n
2279 Summary: Simple command-line tool for Lego NXT
2280 Package: t2n
2281 ---
2282 Identifier: python-nxt [generic]
2283 Name: python-nxt
2284 Summary: Python driver/interface/wrapper for the Lego Mindstorms NXT robot
2285 Package: python-nxt
2286 ---
2287 Identifier: nbc [generic]
2288 Name: nbc
2289 Summary: C compiler for LEGO Mindstorms NXT bricks
2290 Package: nbc
2291 %
2292 </pre></p>
2293
2294 <p>A similar query can be done using the combined AppStream and
2295 Isenkram databases using the isenkram-lookup tool:</p>
2296
2297 <p><pre>
2298 % isenkram-lookup usb:v1130p0202d0100dc00dsc00dp00ic03isc00ip00in00
2299 pymissile
2300 % isenkram-lookup usb:v0694p0002d0000
2301 libnxt
2302 nbc
2303 python-nxt
2304 t2n
2305 %
2306 </pre></p>
2307
2308 <p>You can find modalias values relevant for your machine using
2309 <tt>cat $(find /sys/devices/ -name modalias)</tt>.
2310
2311 <p>If you want to make this system a success and help Debian users
2312 make the most of the hardware they have, please
2313 help<a href="https://wiki.debian.org/AppStream/Guidelines">add
2314 AppStream metadata for your package following the guidelines</a>
2315 documented in the wiki. So far only 11 packages provide such
2316 information, among the several hundred hardware specific packages in
2317 Debian. The Isenkram database on the other hand contain 101 packages,
2318 mostly related to USB dongles. Most of the packages with hardware
2319 mapping in AppStream are LEGO Mindstorms related, because I have, as
2320 part of my involvement in
2321 <a href="https://wiki.debian.org/LegoDesigners">the Debian LEGO
2322 team</a> given priority to making sure LEGO users get proposed the
2323 complete set of packages in Debian for that particular hardware. The
2324 team also got a nice Christmas present today. The
2325 <a href="https://tracker.debian.org/pkg/nxt-firmware">nxt-firmware
2326 package</a> made it into Debian. With this package in place, it is
2327 now possible to use the LEGO Mindstorms NXT unit with only free
2328 software, as the nxt-firmware package contain the source and firmware
2329 binaries for the NXT brick.</p>
2330
2331 <p>As usual, if you use Bitcoin and want to show your support of my
2332 activities, please send Bitcoin donations to my address
2333 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2334
2335 </div>
2336 <div class="tags">
2337
2338
2339 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
2340
2341
2342 </div>
2343 </div>
2344 <div class="padding"></div>
2345
2346 <div class="entry">
2347 <div class="title">
2348 <a href="http://people.skolelinux.org/pere/blog/Isenkram_updated_with_a_lot_more_hardware_package_mappings.html">Isenkram updated with a lot more hardware-package mappings</a>
2349 </div>
2350 <div class="date">
2351 20th December 2016
2352 </div>
2353 <div class="body">
2354 <p><a href="http://packages.qa.debian.org/isenkram">The Isenkram
2355 system</a> I wrote two years ago to make it easier in Debian to find
2356 and install packages to get your hardware dongles to work, is still
2357 going strong. It is a system to look up the hardware present on or
2358 connected to the current system, and map the hardware to Debian
2359 packages. It can either be done using the tools in isenkram-cli or
2360 using the user space daemon in the isenkram package. The latter will
2361 notify you, when inserting new hardware, about what packages to
2362 install to get the dongle working. It will even provide a button to
2363 click on to ask packagekit to install the packages.</p>
2364
2365 <p>Here is an command line example from my Thinkpad laptop:</p>
2366
2367 <p><pre>
2368 % isenkram-lookup
2369 bluez
2370 cheese
2371 ethtool
2372 fprintd
2373 fprintd-demo
2374 gkrellm-thinkbat
2375 hdapsd
2376 libpam-fprintd
2377 pidgin-blinklight
2378 thinkfan
2379 tlp
2380 tp-smapi-dkms
2381 tp-smapi-source
2382 tpb
2383 %
2384 </pre></p>
2385
2386 <p>It can also list the firware package providing firmware requested
2387 by the load kernel modules, which in my case is an empty list because
2388 I have all the firmware my machine need:
2389
2390 <p><pre>
2391 % /usr/sbin/isenkram-autoinstall-firmware -l
2392 info: did not find any firmware files requested by loaded kernel modules. exiting
2393 %
2394 </pre></p>
2395
2396 <p>The last few days I had a look at several of the around 250
2397 packages in Debian with udev rules. These seem like good candidates
2398 to install when a given hardware dongle is inserted, and I found
2399 several that should be proposed by isenkram. I have not had time to
2400 check all of them, but am happy to report that now there are 97
2401 packages packages mapped to hardware by Isenkram. 11 of these
2402 packages provide hardware mapping using AppStream, while the rest are
2403 listed in the modaliases file provided in isenkram.</p>
2404
2405 <p>These are the packages with hardware mappings at the moment. The
2406 <strong>marked packages</strong> are also announcing their hardware
2407 support using AppStream, for everyone to use:</p>
2408
2409 <p>air-quality-sensor, alsa-firmware-loaders, argyll,
2410 <strong>array-info</strong>, avarice, avrdude, b43-fwcutter,
2411 bit-babbler, bluez, bluez-firmware, <strong>brltty</strong>,
2412 <strong>broadcom-sta-dkms</strong>, calibre, cgminer, cheese, colord,
2413 <strong>colorhug-client</strong>, dahdi-firmware-nonfree, dahdi-linux,
2414 dfu-util, dolphin-emu, ekeyd, ethtool, firmware-ipw2x00, fprintd,
2415 fprintd-demo, <strong>galileo</strong>, gkrellm-thinkbat, gphoto2,
2416 gpsbabel, gpsbabel-gui, gpsman, gpstrans, gqrx-sdr, gr-fcdproplus,
2417 gr-osmosdr, gtkpod, hackrf, hdapsd, hdmi2usb-udev, hpijs-ppds, hplip,
2418 ipw3945-source, ipw3945d, kde-config-tablet, kinect-audio-setup,
2419 <strong>libnxt</strong>, libpam-fprintd, <strong>lomoco</strong>,
2420 madwimax, minidisc-utils, mkgmap, msi-keyboard, mtkbabel,
2421 <strong>nbc</strong>, <strong>nqc</strong>, nut-hal-drivers, ola,
2422 open-vm-toolbox, open-vm-tools, openambit, pcgminer, pcmciautils,
2423 pcscd, pidgin-blinklight, printer-driver-splix,
2424 <strong>pymissile</strong>, python-nxt, qlandkartegt,
2425 qlandkartegt-garmin, rosegarden, rt2x00-source, sispmctl,
2426 soapysdr-module-hackrf, solaar, squeak-plugins-scratch, sunxi-tools,
2427 <strong>t2n</strong>, thinkfan, thinkfinger-tools, tlp, tp-smapi-dkms,
2428 tp-smapi-source, tpb, tucnak, uhd-host, usbmuxd, viking,
2429 virtualbox-ose-guest-x11, w1retap, xawtv, xserver-xorg-input-vmmouse,
2430 xserver-xorg-input-wacom, xserver-xorg-video-qxl,
2431 xserver-xorg-video-vmware, yubikey-personalization and
2432 zd1211-firmware</p>
2433
2434 <p>If you know of other packages, please let me know with a wishlist
2435 bug report against the isenkram-cli package, and ask the package
2436 maintainer to
2437 <a href="https://wiki.debian.org/AppStream/Guidelines">add AppStream
2438 metadata according to the guidelines</a> to provide the information
2439 for everyone. In time, I hope to get rid of the isenkram specific
2440 hardware mapping and depend exclusively on AppStream.</p>
2441
2442 <p>Note, the AppStream metadata for broadcom-sta-dkms is matching too
2443 much hardware, and suggest that the package with with any ethernet
2444 card. See <a href="http://bugs.debian.org/838735">bug #838735</a> for
2445 the details. I hope the maintainer find time to address it soon. In
2446 the mean time I provide an override in isenkram.</p>
2447
2448 </div>
2449 <div class="tags">
2450
2451
2452 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
2453
2454
2455 </div>
2456 </div>
2457 <div class="padding"></div>
2458
2459 <div class="entry">
2460 <div class="title">
2461 <a href="http://people.skolelinux.org/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>
2462 </div>
2463 <div class="date">
2464 11th December 2016
2465 </div>
2466 <div class="body">
2467 <p align="center"><img width="70%" src="http://people.skolelinux.org/pere/blog/images/2016-12-11-nice-oolite.png"/></p>
2468
2469 <p>In my early years, I played
2470 <a href="http://wiki.alioth.net/index.php/Classic_Elite">the epic game
2471 Elite</a> on my PC. I spent many months trading and fighting in
2472 space, and reached the 'elite' fighting status before I moved on. The
2473 original Elite game was available on Commodore 64 and the IBM PC
2474 edition I played had a 64 KB executable. I am still impressed today
2475 that the authors managed to squeeze both a 3D engine and details about
2476 more than 2000 planet systems across 7 galaxies into a binary so
2477 small.</p>
2478
2479 <p>I have known about <a href="http://www.oolite.org/">the free
2480 software game Oolite inspired by Elite</a> for a while, but did not
2481 really have time to test it properly until a few days ago. It was
2482 great to discover that my old knowledge about trading routes were
2483 still valid. But my fighting and flying abilities were gone, so I had
2484 to retrain to be able to dock on a space station. And I am still not
2485 able to make much resistance when I am attacked by pirates, so I
2486 bougth and mounted the most powerful laser in the rear to be able to
2487 put up at least some resistance while fleeing for my life. :)</p>
2488
2489 <p>When playing Elite in the late eighties, I had to discover
2490 everything on my own, and I had long lists of prices seen on different
2491 planets to be able to decide where to trade what. This time I had the
2492 advantages of the
2493 <a href="http://wiki.alioth.net/index.php/Main_Page">Elite wiki</a>,
2494 where information about each planet is easily available with common
2495 price ranges and suggested trading routes. This improved my ability
2496 to earn money and I have been able to earn enough to buy a lot of
2497 useful equipent in a few days. I believe I originally played for
2498 months before I could get a docking computer, while now I could get it
2499 after less then a week.</p>
2500
2501 <p>If you like science fiction and dreamed of a life as a vagabond in
2502 space, you should try out Oolite. It is available for Linux, MacOSX
2503 and Windows, and is included in Debian and derivatives since 2011.</p>
2504
2505 <p>As usual, if you use Bitcoin and want to show your support of my
2506 activities, please send Bitcoin donations to my address
2507 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2508
2509 </div>
2510 <div class="tags">
2511
2512
2513 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>.
2514
2515
2516 </div>
2517 </div>
2518 <div class="padding"></div>
2519
2520 <div class="entry">
2521 <div class="title">
2522 <a href="http://people.skolelinux.org/pere/blog/Quicker_Debian_installations_using_eatmydata.html">Quicker Debian installations using eatmydata</a>
2523 </div>
2524 <div class="date">
2525 25th November 2016
2526 </div>
2527 <div class="body">
2528 <p>Two years ago, I did some experiments with eatmydata and the Debian
2529 installation system, observing how using
2530 <a href="http://people.skolelinux.org/pere/blog/Speeding_up_the_Debian_installer_using_eatmydata_and_dpkg_divert.html">eatmydata
2531 could speed up the installation</a> quite a bit. My testing measured
2532 speedup around 20-40 percent for Debian Edu, where we install around
2533 1000 packages from within the installer. The eatmydata package
2534 provide a way to disable/delay file system flushing. This is a bit
2535 risky in the general case, as files that should be stored on disk will
2536 stay only in memory a bit longer than expected, causing problems if a
2537 machine crashes at an inconvenient time. But for an installation, if
2538 the machine crashes during installation the process is normally
2539 restarted, and avoiding disk operations as much as possible to speed
2540 up the process make perfect sense.
2541
2542 <p>I added code in the Debian Edu specific installation code to enable
2543 <a href="https://tracker.debian.org/pkg/libeatmydata">eatmydata</a>,
2544 but did not have time to push it any further. But a few months ago I
2545 picked it up again and worked with the libeatmydata package maintainer
2546 Mattia Rizzolo to make it easier for everyone to get this installation
2547 speedup in Debian. Thanks to our cooperation There is now an
2548 eatmydata-udeb package in Debian testing and unstable, and simply
2549 enabling/installing it in debian-installer (d-i) is enough to get the
2550 quicker installations. It can be enabled using preseeding. The
2551 following untested kernel argument should do the trick:</p>
2552
2553 <blockquote><pre>
2554 preseed/early_command="anna-install eatmydata-udeb"
2555 </pre></blockquote>
2556
2557 <p>This should ask d-i to install the package inside the d-i
2558 environment early in the installation sequence. Having it installed
2559 in d-i in turn will make sure the relevant scripts are called just
2560 after debootstrap filled /target/ with the freshly installed Debian
2561 system to configure apt to run dpkg with eatmydata. This is enough to
2562 speed up the installation process. There is a proposal to
2563 <a href="https://bugs.debian.org/841153">extend the idea a bit further
2564 by using /etc/ld.so.preload instead of apt.conf</a>, but I have not
2565 tested its impact.</p>
2566
2567
2568 </div>
2569 <div class="tags">
2570
2571
2572 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
2573
2574
2575 </div>
2576 </div>
2577 <div class="padding"></div>
2578
2579 <div class="entry">
2580 <div class="title">
2581 <a href="http://people.skolelinux.org/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>
2582 </div>
2583 <div class="date">
2584 24th November 2016
2585 </div>
2586 <div class="body">
2587 <p>I Norge er det mange som trenger å skrive både bokmål og nynorsk.
2588 Eksamensoppgaver, offentlige brev og nyheter er eksempler på tekster
2589 der det er krav om skriftspråk. I tillegg til alle skoleoppgavene som
2590 elever over det ganske land skal levere inn hvert år. Det mange ikke
2591 vet er at selv om de kommersielle alternativene
2592 <a href="https://translate.google.com/">Google Translate</a> og
2593 <a href="https://www.bing.com/translator/">Bing Translator</a> ikke kan
2594 bidra med å oversette mellom bokmål og nynorsk, så finnes det et
2595 utmerket fri programvarealternativ som kan. Oversetterverktøyet
2596 Apertium har støtte for en rekke språkkombinasjoner, og takket være
2597 den utrettelige innsatsen til blant annet Kevin Brubeck Unhammer, kan
2598 en bruke webtjenesten til å fylle inn en tekst på bokmål eller
2599 nynorsk, og få den automatoversatt til det andre skriftspråket.
2600 Resultatet er ikke perfekt, men et svært godt utgangspunkt. Av og til
2601 er resultatet så bra at det kan benyttes uten endringer. Jeg vet
2602 f.eks. at store deler av Joomla ble oversatt til nynorsk ved hjelp
2603 Apertium. Høres det ut som noe du kan ha bruk for? Besøk i så fall
2604 <a href="https://www.apertium.org/">Apertium.org</a> og fyll inn
2605 teksten din i webskjemaet der.
2606
2607 <p>Hvis du trenger maskinell tilgang til den bakenforliggende
2608 teknologien kan du enten installere pakken
2609 <a href="https://tracker.debian.org/apertium-nno-nob">apertium-nno-nob</a>
2610 på en Debian-maskin eller bruke web-API-et tilgjengelig fra
2611 api.apertium.org. Se
2612 <a href="http://wiki.apertium.org/wiki/Apertium-apy">API-dokumentasjonen</a>
2613 for detaljer om web-API-et. Her kan du se hvordan resultatet blir for
2614 denne teksten som ble skrevet på bokmål over maskinoversatt til
2615 nynorsk.</p>
2616
2617 <hr/>
2618
2619 <p>I Noreg er det mange som treng å skriva både bokmål og nynorsk.
2620 Eksamensoppgåver, offentlege brev og nyhende er døme på tekster der
2621 det er krav om skriftspråk. I tillegg til alle skuleoppgåvene som
2622 elevar over det ganske land skal levera inn kvart år. Det mange ikkje
2623 veit er at sjølv om dei kommersielle alternativa
2624 <a href="https://translate.google.com/">Google *Translate</a> og
2625 <a href="https://www.bing.com/translator/">Bing *Translator</a> ikkje
2626 kan bidra med å omsetja mellom bokmål og nynorsk, så finst det eit
2627 utmerka fri programvarealternativ som kan. Omsetjarverktøyet
2628 *Apertium har støtte for ei rekkje språkkombinasjonar, og takka vera
2629 den utrøyttelege innsatsen til blant anna Kevin Brubeck Unhammer, kan
2630 ein bruka *webtjenesten til å fylla inn ei tekst på bokmål eller
2631 nynorsk, og få den *automatoversatt til det andre skriftspråket.
2632 Resultatet er ikkje perfekt, men eit svært godt utgangspunkt. Av og
2633 til er resultatet så bra at det kan nyttast utan endringar. Eg veit
2634 t.d. at store delar av *Joomla vart omsett til nynorsk ved hjelp
2635 *Apertium. Høyrast det ut som noko du kan ha bruk for? Besøk i så
2636 fall <a href="https://www.apertium.org/">*Apertium.org</a> og fyll inn
2637 teksta di i *webskjemaet der.
2638
2639 <p>Viss du treng *maskinell tilgjenge til den *bakenforliggende
2640 teknologien kan du anten installera pakken
2641 <a href="https://tracker.debian.org/apertium-nno-nob">*apertium-*nno-*nob</a>
2642 på ein *Debian-maskin eller bruka *web-*API-eit tilgjengeleg frå
2643 *api.*apertium.org. Sjå
2644 <a href="http://wiki.apertium.org/wiki/Apertium-apy">*API-dokumentasjonen</a>
2645 for detaljar om *web-*API-eit. Her kan du sjå korleis resultatet vert
2646 for denne teksta som vart skreva på bokmål over *maskinoversatt til
2647 nynorsk.</p>
2648
2649 </div>
2650 <div class="tags">
2651
2652
2653 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>, <a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll</a>.
2654
2655
2656 </div>
2657 </div>
2658 <div class="padding"></div>
2659
2660 <div class="entry">
2661 <div class="title">
2662 <a href="http://people.skolelinux.org/pere/blog/Coz_profiler_for_multi_threaded_software_is_now_in_Debian.html">Coz profiler for multi-threaded software is now in Debian</a>
2663 </div>
2664 <div class="date">
2665 13th November 2016
2666 </div>
2667 <div class="body">
2668 <p><a href="http://coz-profiler.org/">The Coz profiler</a>, a nice
2669 profiler able to run benchmarking experiments on the instrumented
2670 multi-threaded program, finally
2671 <a href="https://tracker.debian.org/pkg/coz-profiler">made it into
2672 Debian unstable yesterday</A>. Lluís Vilanova and I have spent many
2673 months since
2674 <a href="http://people.skolelinux.org/pere/blog/Coz_can_help_you_find_bottlenecks_in_multi_threaded_software___nice_free_software.html">I
2675 blogged about the coz tool</a> in August working with upstream to make
2676 it suitable for Debian. There are still issues with clang
2677 compatibility, inline assembly only working x86 and minimized
2678 JavaScript libraries.</p>
2679
2680 <p>To test it, install 'coz-profiler' using apt and run it like this:</p>
2681
2682 <p><blockquote>
2683 <tt>coz run --- /path/to/binary-with-debug-info</tt>
2684 </blockquote></p>
2685
2686 <p>This will produce a profile.coz file in the current working
2687 directory with the profiling information. This is then given to a
2688 JavaScript application provided in the package and available from
2689 <a href="http://plasma-umass.github.io/coz/">a project web page</a>.
2690 To start the local copy, invoke it in a browser like this:</p>
2691
2692 <p><blockquote>
2693 <tt>sensible-browser /usr/share/coz-profiler/viewer/index.htm</tt>
2694 </blockquote></p>
2695
2696 <p>See the project home page and the
2697 <a href="https://www.usenix.org/publications/login/summer2016/curtsinger">USENIX
2698 ;login: article on Coz</a> for more information on how it is
2699 working.</p>
2700
2701 </div>
2702 <div class="tags">
2703
2704
2705 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
2706
2707
2708 </div>
2709 </div>
2710 <div class="padding"></div>
2711
2712 <div class="entry">
2713 <div class="title">
2714 <a href="http://people.skolelinux.org/pere/blog/My_own_self_balancing_Lego_Segway.html">My own self balancing Lego Segway</a>
2715 </div>
2716 <div class="date">
2717 4th November 2016
2718 </div>
2719 <div class="body">
2720 <p>A while back I received a Gyro sensor for the NXT
2721 <a href="mindstorms.lego.com">Mindstorms</a> controller as a birthday
2722 present. It had been on my wishlist for a while, because I wanted to
2723 build a Segway like balancing lego robot. I had already built
2724 <a href="http://www.nxtprograms.com/NXT2/segway/">a simple balancing
2725 robot</a> with the kids, using the light/color sensor included in the
2726 NXT kit as the balance sensor, but it was not working very well. It
2727 could balance for a while, but was very sensitive to the light
2728 condition in the room and the reflective properties of the surface and
2729 would fall over after a short while. I wanted something more robust,
2730 and had
2731 <a href="https://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NGY1044">the
2732 gyro sensor from HiTechnic</a> I believed would solve it on my
2733 wishlist for some years before it suddenly showed up as a gift from my
2734 loved ones. :)</p>
2735
2736 <p>Unfortunately I have not had time to sit down and play with it
2737 since then. But that changed some days ago, when I was searching for
2738 lego segway information and came across a recipe from HiTechnic for
2739 building
2740 <a href="http://www.hitechnic.com/blog/gyro-sensor/htway/">the
2741 HTWay</a>, a segway like balancing robot. Build instructions and
2742 <a href="https://www.hitechnic.com/upload/786-HTWayC.nxc">source
2743 code</a> was included, so it was just a question of putting it all
2744 together. And thanks to the great work of many Debian developers, the
2745 compiler needed to build the source for the NXT is already included in
2746 Debian, so I was read to go in less than an hour. The resulting robot
2747 do not look very impressive in its simplicity:</p>
2748
2749 <p align="center"><img width="70%" src="http://people.skolelinux.org/pere/blog/images/2016-11-04-lego-htway-robot.jpeg"></p>
2750
2751 <p>Because I lack the infrared sensor used to control the robot in the
2752 design from HiTechnic, I had to comment out the last task
2753 (taskControl). I simply placed /* and */ around it get the program
2754 working without that sensor present. Now it balances just fine until
2755 the battery status run low:</p>
2756
2757 <p align="center"><video width="70%" controls="true">
2758 <source src="http://people.skolelinux.org/pere/blog/images/2016-11-04-lego-htway-balancing.ogv" type="video/ogg">
2759 </video></p>
2760
2761 <p>Now we would like to teach it how to follow a line and take remote
2762 control instructions using the included Bluetooth receiver in the NXT.</p>
2763
2764 <p>If you, like me, love LEGO and want to make sure we find the tools
2765 they need to work with LEGO in Debian and all our derivative
2766 distributions like Ubuntu, check out
2767 <a href="http://wiki.debian.org/LegoDesigners">the LEGO designers
2768 project page</a> and join the Debian LEGO team. Personally I own a
2769 RCX and NXT controller (no EV3), and would like to make sure the
2770 Debian tools needed to program the systems I own work as they
2771 should.</p>
2772
2773 </div>
2774 <div class="tags">
2775
2776
2777 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/lego">lego</a>, <a href="http://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
2778
2779
2780 </div>
2781 </div>
2782 <div class="padding"></div>
2783
2784 <div class="entry">
2785 <div class="title">
2786 <a href="http://people.skolelinux.org/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>
2787 </div>
2788 <div class="date">
2789 10th October 2016
2790 </div>
2791 <div class="body">
2792 <p>In July
2793 <a href="http://people.skolelinux.org/pere/blog/How_to_use_the_Signal_app_if_you_only_have_a_land_line__ie_no_mobile_phone_.html">I
2794 wrote how to get the Signal Chrome/Chromium app working</a> without
2795 the ability to receive SMS messages (aka without a cell phone). It is
2796 time to share some experiences and provide an updated setup.</p>
2797
2798 <p>The Signal app have worked fine for several months now, and I use
2799 it regularly to chat with my loved ones. I had a major snag at the
2800 end of my summer vacation, when the the app completely forgot my
2801 setup, identity and keys. The reason behind this major mess was
2802 running out of disk space. To avoid that ever happening again I have
2803 started storing everything in <tt>userdata/</tt> in git, to be able to
2804 roll back to an earlier version if the files are wiped by mistake. I
2805 had to use it once after introducing the git backup. When rolling
2806 back to an earlier version, one need to use the 'reset session' option
2807 in Signal to get going, and notify the people you talk with about the
2808 problem. I assume there is some sequence number tracking in the
2809 protocol to detect rollback attacks. The git repository is rather big
2810 (674 MiB so far), but I have not tried to figure out if some of the
2811 content can be added to a .gitignore file due to lack of spare
2812 time.</p>
2813
2814 <p>I've also hit the 90 days timeout blocking, and noticed that this
2815 make it impossible to send messages using Signal. I could still
2816 receive them, but had to patch the code with a new timestamp to send.
2817 I believe the timeout is added by the developers to force people to
2818 upgrade to the latest version of the app, even when there is no
2819 protocol changes, to reduce the version skew among the user base and
2820 thus try to keep the number of support requests down.</p>
2821
2822 <p>Since my original recipe, the Signal source code changed slightly,
2823 making the old patch fail to apply cleanly. Below is an updated
2824 patch, including the shell wrapper I use to start Signal. The
2825 original version required a new user to locate the JavaScript console
2826 and call a function from there. I got help from a friend with more
2827 JavaScript knowledge than me to modify the code to provide a GUI
2828 button instead. This mean that to get started you just need to run
2829 the wrapper and click the 'Register without mobile phone' to get going
2830 now. I've also modified the timeout code to always set it to 90 days
2831 in the future, to avoid having to patch the code regularly.</p>
2832
2833 <p>So, the updated recipe for Debian Jessie:</p>
2834
2835 <ol>
2836
2837 <li>First, install required packages to get the source code and the
2838 browser you need. Signal only work with Chrome/Chromium, as far as I
2839 know, so you need to install it.
2840
2841 <pre>
2842 apt install git tor chromium
2843 git clone https://github.com/WhisperSystems/Signal-Desktop.git
2844 </pre></li>
2845
2846 <li>Modify the source code using command listed in the the patch
2847 block below.</li>
2848
2849 <li>Start Signal using the run-signal-app wrapper (for example using
2850 <tt>`pwd`/run-signal-app</tt>).
2851
2852 <li>Click on the 'Register without mobile phone', will in a phone
2853 number you can receive calls to the next minute, receive the
2854 verification code and enter it into the form field and press
2855 'Register'. Note, the phone number you use will be user Signal
2856 username, ie the way others can find you on Signal.</li>
2857
2858 <li>You can now use Signal to contact others. Note, new contacts do
2859 not show up in the contact list until you restart Signal, and there is
2860 no way to assign names to Contacts. There is also no way to create or
2861 update chat groups. I suspect this is because the web app do not have
2862 a associated contact database.</li>
2863
2864 </ol>
2865
2866 <p>I am still a bit uneasy about using Signal, because of the way its
2867 main author moxie0 reject federation and accept dependencies to major
2868 corporations like Google (part of the code is fetched from Google) and
2869 Amazon (the central coordination point is owned by Amazon). See for
2870 example
2871 <a href="https://github.com/LibreSignal/LibreSignal/issues/37">the
2872 LibreSignal issue tracker</a> for a thread documenting the authors
2873 view on these issues. But the network effect is strong in this case,
2874 and several of the people I want to communicate with already use
2875 Signal. Perhaps we can all move to <a href="https://ring.cx/">Ring</a>
2876 once it <a href="https://bugs.debian.org/830265">work on my
2877 laptop</a>? It already work on Windows and Android, and is included
2878 in <a href="https://tracker.debian.org/pkg/ring">Debian</a> and
2879 <a href="https://launchpad.net/ubuntu/+source/ring">Ubuntu</a>, but not
2880 working on Debian Stable.</p>
2881
2882 <p>Anyway, this is the patch I apply to the Signal code to get it
2883 working. It switch to the production servers, disable to timeout,
2884 make registration easier and add the shell wrapper:</p>
2885
2886 <pre>
2887 cd Signal-Desktop; cat &lt;&lt;EOF | patch -p1
2888 diff --git a/js/background.js b/js/background.js
2889 index 24b4c1d..579345f 100644
2890 --- a/js/background.js
2891 +++ b/js/background.js
2892 @@ -33,9 +33,9 @@
2893 });
2894 });
2895
2896 - var SERVER_URL = 'https://textsecure-service-staging.whispersystems.org';
2897 + var SERVER_URL = 'https://textsecure-service-ca.whispersystems.org';
2898 var SERVER_PORTS = [80, 4433, 8443];
2899 - var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments-staging.s3.amazonaws.com';
2900 + var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments.s3.amazonaws.com';
2901 var messageReceiver;
2902 window.getSocketStatus = function() {
2903 if (messageReceiver) {
2904 diff --git a/js/expire.js b/js/expire.js
2905 index 639aeae..beb91c3 100644
2906 --- a/js/expire.js
2907 +++ b/js/expire.js
2908 @@ -1,6 +1,6 @@
2909 ;(function() {
2910 'use strict';
2911 - var BUILD_EXPIRATION = 0;
2912 + var BUILD_EXPIRATION = Date.now() + (90 * 24 * 60 * 60 * 1000);
2913
2914 window.extension = window.extension || {};
2915
2916 diff --git a/js/views/install_view.js b/js/views/install_view.js
2917 index 7816f4f..1d6233b 100644
2918 --- a/js/views/install_view.js
2919 +++ b/js/views/install_view.js
2920 @@ -38,7 +38,8 @@
2921 return {
2922 'click .step1': this.selectStep.bind(this, 1),
2923 'click .step2': this.selectStep.bind(this, 2),
2924 - 'click .step3': this.selectStep.bind(this, 3)
2925 + 'click .step3': this.selectStep.bind(this, 3),
2926 + 'click .callreg': function() { extension.install('standalone') },
2927 };
2928 },
2929 clearQR: function() {
2930 diff --git a/options.html b/options.html
2931 index dc0f28e..8d709f6 100644
2932 --- a/options.html
2933 +++ b/options.html
2934 @@ -14,7 +14,10 @@
2935 &lt;div class='nav'>
2936 &lt;h1>{{ installWelcome }}&lt;/h1>
2937 &lt;p>{{ installTagline }}&lt;/p>
2938 - &lt;div> &lt;a class='button step2'>{{ installGetStartedButton }}&lt;/a> &lt;/div>
2939 + &lt;div> &lt;a class='button step2'>{{ installGetStartedButton }}&lt;/a>
2940 + &lt;br> &lt;a class="button callreg">Register without mobile phone&lt;/a>
2941 +
2942 + &lt;/div>
2943 &lt;span class='dot step1 selected'>&lt;/span>
2944 &lt;span class='dot step2'>&lt;/span>
2945 &lt;span class='dot step3'>&lt;/span>
2946 --- /dev/null 2016-10-07 09:55:13.730181472 +0200
2947 +++ b/run-signal-app 2016-10-10 08:54:09.434172391 +0200
2948 @@ -0,0 +1,12 @@
2949 +#!/bin/sh
2950 +set -e
2951 +cd $(dirname $0)
2952 +mkdir -p userdata
2953 +userdata="`pwd`/userdata"
2954 +if [ -d "$userdata" ] && [ ! -d "$userdata/.git" ] ; then
2955 + (cd $userdata && git init)
2956 +fi
2957 +(cd $userdata && git add . && git commit -m "Current status." || true)
2958 +exec chromium \
2959 + --proxy-server="socks://localhost:9050" \
2960 + --user-data-dir=$userdata --load-and-launch-app=`pwd`
2961 EOF
2962 chmod a+rx run-signal-app
2963 </pre>
2964
2965 <p>As usual, if you use Bitcoin and want to show your support of my
2966 activities, please send Bitcoin donations to my address
2967 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2968
2969 </div>
2970 <div class="tags">
2971
2972
2973 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>.
2974
2975
2976 </div>
2977 </div>
2978 <div class="padding"></div>
2979
2980 <div class="entry">
2981 <div class="title">
2982 <a href="http://people.skolelinux.org/pere/blog/Isenkram__Appstream_and_udev_make_life_as_a_LEGO_builder_easier.html">Isenkram, Appstream and udev make life as a LEGO builder easier</a>
2983 </div>
2984 <div class="date">
2985 7th October 2016
2986 </div>
2987 <div class="body">
2988 <p><a href="http://packages.qa.debian.org/isenkram">The Isenkram
2989 system</a> provide a practical and easy way to figure out which
2990 packages support the hardware in a given machine. The command line
2991 tool <tt>isenkram-lookup</tt> and the tasksel options provide a
2992 convenient way to list and install packages relevant for the current
2993 hardware during system installation, both user space packages and
2994 firmware packages. The GUI background daemon on the other hand provide
2995 a pop-up proposing to install packages when a new dongle is inserted
2996 while using the computer. For example, if you plug in a smart card
2997 reader, the system will ask if you want to install <tt>pcscd</tt> if
2998 that package isn't already installed, and if you plug in a USB video
2999 camera the system will ask if you want to install <tt>cheese</tt> if
3000 cheese is currently missing. This already work just fine.</p>
3001
3002 <p>But Isenkram depend on a database mapping from hardware IDs to
3003 package names. When I started no such database existed in Debian, so
3004 I made my own data set and included it with the isenkram package and
3005 made isenkram fetch the latest version of this database from git using
3006 http. This way the isenkram users would get updated package proposals
3007 as soon as I learned more about hardware related packages.</p>
3008
3009 <p>The hardware is identified using modalias strings. The modalias
3010 design is from the Linux kernel where most hardware descriptors are
3011 made available as a strings that can be matched using filename style
3012 globbing. It handle USB, PCI, DMI and a lot of other hardware related
3013 identifiers.</p>
3014
3015 <p>The downside to the Isenkram specific database is that there is no
3016 information about relevant distribution / Debian version, making
3017 isenkram propose obsolete packages too. But along came AppStream, a
3018 cross distribution mechanism to store and collect metadata about
3019 software packages. When I heard about the proposal, I contacted the
3020 people involved and suggested to add a hardware matching rule using
3021 modalias strings in the specification, to be able to use AppStream for
3022 mapping hardware to packages. This idea was accepted and AppStream is
3023 now a great way for a package to announce the hardware it support in a
3024 distribution neutral way. I wrote
3025 <a href="http://people.skolelinux.org/pere/blog/Using_appstream_with_isenkram_to_install_hardware_related_packages_in_Debian.html">a
3026 recipe on how to add such meta-information</a> in a blog post last
3027 December. If you have a hardware related package in Debian, please
3028 announce the relevant hardware IDs using AppStream.</p>
3029
3030 <p>In Debian, almost all packages that can talk to a LEGO Mindestorms
3031 RCX or NXT unit, announce this support using AppStream. The effect is
3032 that when you insert such LEGO robot controller into your Debian
3033 machine, Isenkram will propose to install the packages needed to get
3034 it working. The intention is that this should allow the local user to
3035 start programming his robot controller right away without having to
3036 guess what packages to use or which permissions to fix.</p>
3037
3038 <p>But when I sat down with my son the other day to program our NXT
3039 unit using his Debian Stretch computer, I discovered something
3040 annoying. The local console user (ie my son) did not get access to
3041 the USB device for programming the unit. This used to work, but no
3042 longer in Jessie and Stretch. After some investigation and asking
3043 around on #debian-devel, I discovered that this was because udev had
3044 changed the mechanism used to grant access to local devices. The
3045 ConsoleKit mechanism from <tt>/lib/udev/rules.d/70-udev-acl.rules</tt>
3046 no longer applied, because LDAP users no longer was added to the
3047 plugdev group during login. Michael Biebl told me that this method
3048 was obsolete and the new method used ACLs instead. This was good
3049 news, as the plugdev mechanism is a mess when using a remote user
3050 directory like LDAP. Using ACLs would make sure a user lost device
3051 access when she logged out, even if the user left behind a background
3052 process which would retain the plugdev membership with the ConsoleKit
3053 setup. Armed with this knowledge I moved on to fix the access problem
3054 for the LEGO Mindstorms related packages.</p>
3055
3056 <p>The new system uses a udev tag, 'uaccess'. It can either be
3057 applied directly for a device, or is applied in
3058 /lib/udev/rules.d/70-uaccess.rules for classes of devices. As the
3059 LEGO Mindstorms udev rules did not have a class, I decided to add the
3060 tag directly in the udev rules files included in the packages. Here
3061 is one example. For the nqc C compiler for the RCX, the
3062 <tt>/lib/udev/rules.d/60-nqc.rules</tt> file now look like this:
3063
3064 <p><pre>
3065 SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0694", ATTR{idProduct}=="0001", \
3066 SYMLINK+="rcx-%k", TAG+="uaccess"
3067 </pre></p>
3068
3069 <p>The key part is the 'TAG+="uaccess"' at the end. I suspect all
3070 packages using plugdev in their /lib/udev/rules.d/ files should be
3071 changed to use this tag (either directly or indirectly via
3072 <tt>70-uaccess.rules</tt>). Perhaps a lintian check should be created
3073 to detect this?</p>
3074
3075 <p>I've been unable to find good documentation on the uaccess feature.
3076 It is unclear to me if the uaccess tag is an internal implementation
3077 detail like the udev-acl tag used by
3078 <tt>/lib/udev/rules.d/70-udev-acl.rules</tt>. If it is, I guess the
3079 indirect method is the preferred way. Michael
3080 <a href="https://github.com/systemd/systemd/issues/4288">asked for more
3081 documentation from the systemd project</a> and I hope it will make
3082 this clearer. For now I use the generic classes when they exist and
3083 is already handled by <tt>70-uaccess.rules</tt>, and add the tag
3084 directly if no such class exist.</p>
3085
3086 <p>To learn more about the isenkram system, please check out
3087 <a href="http://people.skolelinux.org/pere/blog/tags/isenkram/">my
3088 blog posts tagged isenkram</a>.</p>
3089
3090 <p>To help out making life for LEGO constructors in Debian easier,
3091 please join us on our IRC channel
3092 <a href="irc://irc.debian.org/%23debian-lego">#debian-lego</a> and join
3093 the <a href="https://alioth.debian.org/projects/debian-lego/">Debian
3094 LEGO team</a> in the Alioth project we created yesterday. A mailing
3095 list is not yet created, but we are working on it. :)</p>
3096
3097 <p>As usual, if you use Bitcoin and want to show your support of my
3098 activities, please send Bitcoin donations to my address
3099 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
3100
3101 </div>
3102 <div class="tags">
3103
3104
3105 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>, <a href="http://people.skolelinux.org/pere/blog/tags/lego">lego</a>.
3106
3107
3108 </div>
3109 </div>
3110 <div class="padding"></div>
3111
3112 <div class="entry">
3113 <div class="title">
3114 <a href="http://people.skolelinux.org/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>
3115 </div>
3116 <div class="date">
3117 30th August 2016
3118 </div>
3119 <div class="body">
3120 <p>In April we
3121 <a href="http://people.skolelinux.org/pere/blog/Lets_make_a_Norwegian_Bokm_l_edition_of_The_Debian_Administrator_s_Handbook.html">started
3122 to work</a> on a Norwegian Bokmål edition of the "open access" book on
3123 how to set up and administrate a Debian system. Today I am happy to
3124 report that the first draft is now publicly available. You can find
3125 it on <a href="https://debian-handbook.info/get/">get the Debian
3126 Administrator's Handbook page</a> (under Other languages). The first
3127 eight chapters have a first draft translation, and we are working on
3128 proofreading the content. If you want to help out, please start
3129 contributing using
3130 <a href="https://hosted.weblate.org/projects/debian-handbook/">the
3131 hosted weblate project page</a>, and get in touch using
3132 <a href="http://lists.alioth.debian.org/mailman/listinfo/debian-handbook-translators">the
3133 translators mailing list</a>. Please also check out
3134 <a href="https://debian-handbook.info/contribute/">the instructions for
3135 contributors</a>. A good way to contribute is to proofread the text
3136 and update weblate if you find errors.</p>
3137
3138 <p>Our goal is still to make the Norwegian book available on paper as well as
3139 electronic form.</p>
3140
3141 </div>
3142 <div class="tags">
3143
3144
3145 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
3146
3147
3148 </div>
3149 </div>
3150 <div class="padding"></div>
3151
3152 <div class="entry">
3153 <div class="title">
3154 <a href="http://people.skolelinux.org/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>
3155 </div>
3156 <div class="date">
3157 11th August 2016
3158 </div>
3159 <div class="body">
3160 <p>This summer, I read a great article
3161 "<a href="https://www.usenix.org/publications/login/summer2016/curtsinger">coz:
3162 This Is the Profiler You're Looking For</a>" in USENIX ;login: about
3163 how to profile multi-threaded programs. It presented a system for
3164 profiling software by running experiences in the running program,
3165 testing how run time performance is affected by "speeding up" parts of
3166 the code to various degrees compared to a normal run. It does this by
3167 slowing down parallel threads while the "faster up" code is running
3168 and measure how this affect processing time. The processing time is
3169 measured using probes inserted into the code, either using progress
3170 counters (COZ_PROGRESS) or as latency meters (COZ_BEGIN/COZ_END). It
3171 can also measure unmodified code by measuring complete the program
3172 runtime and running the program several times instead.</p>
3173
3174 <p>The project and presentation was so inspiring that I would like to
3175 get the system into Debian. I
3176 <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=830708">created
3177 a WNPP request for it</a> and contacted upstream to try to make the
3178 system ready for Debian by sending patches. The build process need to
3179 be changed a bit to avoid running 'git clone' to get dependencies, and
3180 to include the JavaScript web page used to visualize the collected
3181 profiling information included in the source package.
3182 But I expect that should work out fairly soon.</p>
3183
3184 <p>The way the system work is fairly simple. To run an coz experiment
3185 on a binary with debug symbols available, start the program like this:
3186
3187 <p><blockquote><pre>
3188 coz run --- program-to-run
3189 </pre></blockquote></p>
3190
3191 <p>This will create a text file profile.coz with the instrumentation
3192 information. To show what part of the code affect the performance
3193 most, use a web browser and either point it to
3194 <a href="http://plasma-umass.github.io/coz/">http://plasma-umass.github.io/coz/</a>
3195 or use the copy from git (in the gh-pages branch). Check out this web
3196 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
3197 profiling more useful you include &lt;coz.h&gt; and insert the
3198 COZ_PROGRESS or COZ_BEGIN and COZ_END at appropriate places in the
3199 code, rebuild and run the profiler. This allow coz to do more
3200 targeted experiments.</p>
3201
3202 <p>A video published by ACM
3203 <a href="https://www.youtube.com/watch?v=jE0V-p1odPg">presenting the
3204 Coz profiler</a> is available from Youtube. There is also a paper
3205 from the 25th Symposium on Operating Systems Principles available
3206 titled
3207 <a href="https://www.usenix.org/conference/atc16/technical-sessions/presentation/curtsinger">Coz:
3208 finding code that counts with causal profiling</a>.</p>
3209
3210 <p><a href="https://github.com/plasma-umass/coz">The source code</a>
3211 for Coz is available from github. It will only build with clang
3212 because it uses a
3213 <a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55606">C++
3214 feature missing in GCC</a>, but I've submitted
3215 <a href="https://github.com/plasma-umass/coz/pull/67">a patch to solve
3216 it</a> and hope it will be included in the upstream source soon.</p>
3217
3218 <p>Please get in touch if you, like me, would like to see this piece
3219 of software in Debian. I would very much like some help with the
3220 packaging effort, as I lack the in depth knowledge on how to package
3221 C++ libraries.</p>
3222
3223 </div>
3224 <div class="tags">
3225
3226
3227 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>.
3228
3229
3230 </div>
3231 </div>
3232 <div class="padding"></div>
3233
3234 <div class="entry">
3235 <div class="title">
3236 <a href="http://people.skolelinux.org/pere/blog/Unlocking_HTC_Desire_HD_on_Linux_using_unruu_and_fastboot.html">Unlocking HTC Desire HD on Linux using unruu and fastboot</a>
3237 </div>
3238 <div class="date">
3239 7th July 2016
3240 </div>
3241 <div class="body">
3242 <p>Yesterday, I tried to unlock a HTC Desire HD phone, and it proved
3243 to be a slight challenge. Here is the recipe if I ever need to do it
3244 again. It all started by me wanting to try the recipe to set up
3245 <a href="https://blog.torproject.org/blog/mission-impossible-hardening-android-security-and-privacy">an
3246 hardened Android installation</a> from the Tor project blog on a
3247 device I had access to. It is a old mobile phone with a broken
3248 microphone The initial idea had been to just
3249 <a href="http://wiki.cyanogenmod.org/w/Install_CM_for_ace">install
3250 CyanogenMod on it</a>, but did not quite find time to start on it
3251 until a few days ago.</p>
3252
3253 <p>The unlock process is supposed to be simple: (1) Boot into the boot
3254 loader (press volume down and power at the same time), (2) select
3255 'fastboot' before (3) connecting the device via USB to a Linux
3256 machine, (4) request the device identifier token by running 'fastboot
3257 oem get_identifier_token', (5) request the device unlocking key using
3258 the <a href="http://www.htcdev.com/bootloader/">HTC developer web
3259 site</a> and unlock the phone using the key file emailed to you.</p>
3260
3261 <p>Unfortunately, this only work fi you have hboot version 2.00.0029
3262 or newer, and the device I was working on had 2.00.0027. This
3263 apparently can be easily fixed by downloading a Windows program and
3264 running it on your Windows machine, if you accept the terms Microsoft
3265 require you to accept to use Windows - which I do not. So I had to
3266 come up with a different approach. I got a lot of help from AndyCap
3267 on #nuug, and would not have been able to get this working without
3268 him.</p>
3269
3270 <p>First I needed to extract the hboot firmware from
3271 <a href="http://www.htcdev.com/ruu/PD9810000_Ace_Sense30_S_hboot_2.00.0029.exe">the
3272 windows binary for HTC Desire HD</a> downloaded as 'the RUU' from HTC.
3273 For this there is is <a href="https://github.com/kmdm/unruu/">a github
3274 project named unruu</a> using libunshield. The unshield tool did not
3275 recognise the file format, but unruu worked and extracted rom.zip,
3276 containing the new hboot firmware and a text file describing which
3277 devices it would work for.</p>
3278
3279 <p>Next, I needed to get the new firmware into the device. For this I
3280 followed some instructions
3281 <a href="http://www.htc1guru.com/2013/09/new-ruu-zips-posted/">available
3282 from HTC1Guru.com</a>, and ran these commands as root on a Linux
3283 machine with Debian testing:</p>
3284
3285 <p><pre>
3286 adb reboot-bootloader
3287 fastboot oem rebootRUU
3288 fastboot flash zip rom.zip
3289 fastboot flash zip rom.zip
3290 fastboot reboot
3291 </pre></p>
3292
3293 <p>The flash command apparently need to be done twice to take effect,
3294 as the first is just preparations and the second one do the flashing.
3295 The adb command is just to get to the boot loader menu, so turning the
3296 device on while holding volume down and the power button should work
3297 too.</p>
3298
3299 <p>With the new hboot version in place I could start following the
3300 instructions on the HTC developer web site. I got the device token
3301 like this:</p>
3302
3303 <p><pre>
3304 fastboot oem get_identifier_token 2>&1 | sed 's/(bootloader) //'
3305 </pre>
3306
3307 <p>And once I got the unlock code via email, I could use it like
3308 this:</p>
3309
3310 <p><pre>
3311 fastboot flash unlocktoken Unlock_code.bin
3312 </pre></p>
3313
3314 <p>And with that final step in place, the phone was unlocked and I
3315 could start stuffing the software of my own choosing into the device.
3316 So far I only inserted a replacement recovery image to wipe the phone
3317 before I start. We will see what happen next. Perhaps I should
3318 install <a href="https://www.debian.org/">Debian</a> on it. :)</p>
3319
3320 </div>
3321 <div class="tags">
3322
3323
3324 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
3325
3326
3327 </div>
3328 </div>
3329 <div class="padding"></div>
3330
3331 <div class="entry">
3332 <div class="title">
3333 <a href="http://people.skolelinux.org/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>
3334 </div>
3335 <div class="date">
3336 3rd July 2016
3337 </div>
3338 <div class="body">
3339 <p>For a while now, I have wanted to test
3340 <a href="https://whispersystems.org/">the Signal app</a>, as it is
3341 said to provide end to end encrypted communication and several of my
3342 friends and family are already using it. As I by choice do not own a
3343 mobile phone, this proved to be harder than expected. And I wanted to
3344 have the source of the client and know that it was the code used on my
3345 machine. But yesterday I managed to get it working. I used the
3346 Github source, compared it to the source in
3347 <a href="https://chrome.google.com/webstore/detail/signal-private-messenger/bikioccmkafdpakkkcpdbppfkghcmihk?hl=en-US">the
3348 Signal Chrome app</a> available from the Chrome web store, applied
3349 patches to use the production Signal servers, started the app and
3350 asked for the hidden "register without a smart phone" form. Here is
3351 the recipe how I did it.</p>
3352
3353 <p>First, I fetched the Signal desktop source from Github, using
3354
3355 <pre>
3356 git clone https://github.com/WhisperSystems/Signal-Desktop.git
3357 </pre>
3358
3359 <p>Next, I patched the source to use the production servers, to be
3360 able to talk to other Signal users:</p>
3361
3362 <pre>
3363 cat &lt;&lt;EOF | patch -p0
3364 diff -ur ./js/background.js userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/background.js
3365 --- ./js/background.js 2016-06-29 13:43:15.630344628 +0200
3366 +++ userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/background.js 2016-06-29 14:06:29.530300934 +0200
3367 @@ -47,8 +47,8 @@
3368 });
3369 });
3370
3371 - var SERVER_URL = 'https://textsecure-service-staging.whispersystems.org';
3372 - var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments-staging.s3.amazonaws.com';
3373 + var SERVER_URL = 'https://textsecure-service-ca.whispersystems.org:4433';
3374 + var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments.s3.amazonaws.com';
3375 var messageReceiver;
3376 window.getSocketStatus = function() {
3377 if (messageReceiver) {
3378 diff -ur ./js/expire.js userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/expire.js
3379 --- ./js/expire.js 2016-06-29 13:43:15.630344628 +0200
3380 +++ userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/expire.js2016-06-29 14:06:29.530300934 +0200
3381 @@ -1,6 +1,6 @@
3382 ;(function() {
3383 'use strict';
3384 - var BUILD_EXPIRATION = 0;
3385 + var BUILD_EXPIRATION = 1474492690000;
3386
3387 window.extension = window.extension || {};
3388
3389 EOF
3390 </pre>
3391
3392 <p>The first part is changing the servers, and the second is updating
3393 an expiration timestamp. This timestamp need to be updated regularly.
3394 It is set 90 days in the future by the build process (Gruntfile.js).
3395 The value is seconds since 1970 times 1000, as far as I can tell.</p>
3396
3397 <p>Based on a tip and good help from the #nuug IRC channel, I wrote a
3398 script to launch Signal in Chromium.</p>
3399
3400 <pre>
3401 #!/bin/sh
3402 cd $(dirname $0)
3403 mkdir -p userdata
3404 exec chromium \
3405 --proxy-server="socks://localhost:9050" \
3406 --user-data-dir=`pwd`/userdata --load-and-launch-app=`pwd`
3407 </pre>
3408
3409 <p> The script start the app and configure Chromium to use the Tor
3410 SOCKS5 proxy to make sure those controlling the Signal servers (today
3411 Amazon and Whisper Systems) as well as those listening on the lines
3412 will have a harder time location my laptop based on the Signal
3413 connections if they use source IP address.</p>
3414
3415 <p>When the script starts, one need to follow the instructions under
3416 "Standalone Registration" in the CONTRIBUTING.md file in the git
3417 repository. I right clicked on the Signal window to get up the
3418 Chromium debugging tool, visited the 'Console' tab and wrote
3419 'extension.install("standalone")' on the console prompt to get the
3420 registration form. Then I entered by land line phone number and
3421 pressed 'Call'. 5 seconds later the phone rang and a robot voice
3422 repeated the verification code three times. After entering the number
3423 into the verification code field in the form, I could start using
3424 Signal from my laptop.
3425
3426 <p>As far as I can tell, The Signal app will leak who is talking to
3427 whom and thus who know who to those controlling the central server,
3428 but such leakage is hard to avoid with a centrally controlled server
3429 setup. It is something to keep in mind when using Signal - the
3430 content of your chats are harder to intercept, but the meta data
3431 exposing your contact network is available to people you do not know.
3432 So better than many options, but not great. And sadly the usage is
3433 connected to my land line, thus allowing those controlling the server
3434 to associate it to my home and person. I would prefer it if only
3435 those I knew could tell who I was on Signal. There are options
3436 avoiding such information leakage, but most of my friends are not
3437 using them, so I am stuck with Signal for now.</p>
3438
3439 <p><strong>Update 2017-01-10</strong>: There is an updated blog post
3440 on this topic in
3441 <a href="http://people.skolelinux.org/pere/blog/Experience_and_updated_recipe_for_using_the_Signal_app_without_a_mobile_phone.html">Experience
3442 and updated recipe for using the Signal app without a mobile
3443 phone</a>.</p>
3444
3445 </div>
3446 <div class="tags">
3447
3448
3449 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>.
3450
3451
3452 </div>
3453 </div>
3454 <div class="padding"></div>
3455
3456 <div class="entry">
3457 <div class="title">
3458 <a href="http://people.skolelinux.org/pere/blog/The_new__best__multimedia_player_in_Debian_.html">The new "best" multimedia player in Debian?</a>
3459 </div>
3460 <div class="date">
3461 6th June 2016
3462 </div>
3463 <div class="body">
3464 <p>When I set out a few weeks ago to figure out
3465 <a href="http://people.skolelinux.org/pere/blog/What_is_the_best_multimedia_player_in_Debian_.html">which
3466 multimedia player in Debian claimed to support most file formats /
3467 MIME types</a>, I was a bit surprised how varied the sets of MIME types
3468 the various players claimed support for. The range was from 55 to 130
3469 MIME types. I suspect most media formats are supported by all
3470 players, but this is not really reflected in the MimeTypes values in
3471 their desktop files. There are probably also some bogus MIME types
3472 listed, but it is hard to identify which one this is.</p>
3473
3474 <p>Anyway, in the mean time I got in touch with upstream for some of
3475 the players suggesting to add more MIME types to their desktop files,
3476 and decided to spend some time myself improving the situation for my
3477 favorite media player VLC. The fixes for VLC entered Debian unstable
3478 yesterday. The complete list of MIME types can be seen on the
3479 <a href="https://wiki.debian.org/DebianMultimedia/PlayerSupport">Multimedia
3480 player MIME type support status</a> Debian wiki page.</p>
3481
3482 <p>The new "best" multimedia player in Debian? It is VLC, followed by
3483 totem, parole, kplayer, gnome-mpv, mpv, smplayer, mplayer-gui and
3484 kmplayer. I am sure some of the other players desktop files support
3485 several of the formats currently listed as working only with vlc,
3486 toten and parole.</p>
3487
3488 <p>A sad observation is that only 14 MIME types are listed as
3489 supported by all the tested multimedia players in Debian in their
3490 desktop files: audio/mpeg, audio/vnd.rn-realaudio, audio/x-mpegurl,
3491 audio/x-ms-wma, audio/x-scpls, audio/x-wav, video/mp4, video/mpeg,
3492 video/quicktime, video/vnd.rn-realvideo, video/x-matroska,
3493 video/x-ms-asf, video/x-ms-wmv and video/x-msvideo. Personally I find
3494 it sad that video/ogg and video/webm is not supported by all the media
3495 players in Debian. As far as I can tell, all of them can handle both
3496 formats.</p>
3497
3498 </div>
3499 <div class="tags">
3500
3501
3502 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="http://people.skolelinux.org/pere/blog/tags/video">video</a>.
3503
3504
3505 </div>
3506 </div>
3507 <div class="padding"></div>
3508
3509 <div class="entry">
3510 <div class="title">
3511 <a href="http://people.skolelinux.org/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>
3512 </div>
3513 <div class="date">
3514 5th June 2016
3515 </div>
3516 <div class="body">
3517 <p>Many years ago, when koffice was fresh and with few users, I
3518 decided to test its presentation tool when making the slides for a
3519 talk I was giving for NUUG on Japhar, a free Java virtual machine. I
3520 wrote the first draft of the slides, saved the result and went to bed
3521 the day before I would give the talk. The next day I took a plane to
3522 the location where the meeting should take place, and on the plane I
3523 started up koffice again to polish the talk a bit, only to discover
3524 that kpresenter refused to load its own data file. I cursed a bit and
3525 started making the slides again from memory, to have something to
3526 present when I arrived. I tested that the saved files could be
3527 loaded, and the day seemed to be rescued. I continued to polish the
3528 slides until I suddenly discovered that the saved file could no longer
3529 be loaded into kpresenter. In the end I had to rewrite the slides
3530 three times, condensing the content until the talk became shorter and
3531 shorter. After the talk I was able to pinpoint the problem &ndash;
3532 kpresenter wrote inline images in a way itself could not understand.
3533 Eventually that bug was fixed and kpresenter ended up being a great
3534 program to make slides. The point I'm trying to make is that we
3535 expect a program to be able to load its own data files, and it is
3536 embarrassing to its developers if it can't.</p>
3537
3538 <p>Did you ever experience a program failing to load its own data
3539 files from the desktop file browser? It is not a uncommon problem. A
3540 while back I discovered that the screencast recorder
3541 gtk-recordmydesktop would save an Ogg Theora video file the KDE file
3542 browser would refuse to open. No video player claimed to understand
3543 such file. I tracked down the cause being <tt>file --mime-type</tt>
3544 returning the application/ogg MIME type, which no video player I had
3545 installed listed as a MIME type they would understand. I asked for
3546 <a href="http://bugs.gw.com/view.php?id=382">file to change its
3547 behavour</a> and use the MIME type video/ogg instead. I also asked
3548 several video players to add video/ogg to their desktop files, to give
3549 the file browser an idea what to do about Ogg Theora files. After a
3550 while, the desktop file browsers in Debian started to handle the
3551 output from gtk-recordmydesktop properly.</p>
3552
3553 <p>But history repeats itself. A few days ago I tested the music
3554 system Rosegarden again, and I discovered that the KDE and xfce file
3555 browsers did not know what to do with the Rosegarden project files
3556 (*.rg). I've reported <a href="http://bugs.debian.org/825993">the
3557 rosegarden problem to BTS</a> and a fix is commited to git and will be
3558 included in the next upload. To increase the chance of me remembering
3559 how to fix the problem next time some program fail to load its files
3560 from the file browser, here are some notes on how to fix it.</p>
3561
3562 <p>The file browsers in Debian in general operates on MIME types.
3563 There are two sources for the MIME type of a given file. The output from
3564 <tt>file --mime-type</tt> mentioned above, and the content of the
3565 shared MIME type registry (under /usr/share/mime/). The file MIME
3566 type is mapped to programs supporting the MIME type, and this
3567 information is collected from
3568 <a href="https://www.freedesktop.org/wiki/Specifications/desktop-entry-spec/">the
3569 desktop files</a> available in /usr/share/applications/. If there is
3570 one desktop file claiming support for the MIME type of the file, it is
3571 activated when asking to open a given file. If there are more, one
3572 can normally select which one to use by right-clicking on the file and
3573 selecting the wanted one using 'Open with' or similar. In general
3574 this work well. But it depend on each program picking a good MIME
3575 type (preferably
3576 <a href="http://www.iana.org/assignments/media-types/media-types.xhtml">a
3577 MIME type registered with IANA</a>), file and/or the shared MIME
3578 registry recognizing the file and the desktop file to list the MIME
3579 type in its list of supported MIME types.</p>
3580
3581 <p>The <tt>/usr/share/mime/packages/rosegarden.xml</tt> entry for
3582 <a href="http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec">the
3583 Shared MIME database</a> look like this:</p>
3584
3585 <p><blockquote><pre>
3586 &lt;?xml version="1.0" encoding="UTF-8"?&gt;
3587 &lt;mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"&gt;
3588 &lt;mime-type type="audio/x-rosegarden"&gt;
3589 &lt;sub-class-of type="application/x-gzip"/&gt;
3590 &lt;comment&gt;Rosegarden project file&lt;/comment&gt;
3591 &lt;glob pattern="*.rg"/&gt;
3592 &lt;/mime-type&gt;
3593 &lt;/mime-info&gt;
3594 </pre></blockquote></p>
3595
3596 <p>This states that audio/x-rosegarden is a kind of application/x-gzip
3597 (it is a gzipped XML file). Note, it is much better to use an
3598 official MIME type registered with IANA than it is to make up ones own
3599 unofficial ones like the x-rosegarden type used by rosegarden.</p>
3600
3601 <p>The desktop file of the rosegarden program failed to list
3602 audio/x-rosegarden in its list of supported MIME types, causing the
3603 file browsers to have no idea what to do with *.rg files:</p>
3604
3605 <p><blockquote><pre>
3606 % grep Mime /usr/share/applications/rosegarden.desktop
3607 MimeType=audio/x-rosegarden-composition;audio/x-rosegarden-device;audio/x-rosegarden-project;audio/x-rosegarden-template;audio/midi;
3608 X-KDE-NativeMimeType=audio/x-rosegarden-composition
3609 %
3610 </pre></blockquote></p>
3611
3612 <p>The fix was to add "audio/x-rosegarden;" at the end of the
3613 MimeType= line.</p>
3614
3615 <p>If you run into a file which fail to open the correct program when
3616 selected from the file browser, please check out the output from
3617 <tt>file --mime-type</tt> for the file, ensure the file ending and
3618 MIME type is registered somewhere under /usr/share/mime/ and check
3619 that some desktop file under /usr/share/applications/ is claiming
3620 support for this MIME type. If not, please report a bug to have it
3621 fixed. :)</p>
3622
3623 </div>
3624 <div class="tags">
3625
3626
3627 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
3628
3629
3630 </div>
3631 </div>
3632 <div class="padding"></div>
3633
3634 <div class="entry">
3635 <div class="title">
3636 <a href="http://people.skolelinux.org/pere/blog/Isenkram_with_PackageKit_support___new_version_0_23_available_in_Debian_unstable.html">Isenkram with PackageKit support - new version 0.23 available in Debian unstable</a>
3637 </div>
3638 <div class="date">
3639 25th May 2016
3640 </div>
3641 <div class="body">
3642 <p><a href="https://tracker.debian.org/pkg/isenkram">The isenkram
3643 system</a> is a user-focused solution in Debian for handling hardware
3644 related packages. The idea is to have a database of mappings between
3645 hardware and packages, and pop up a dialog suggesting for the user to
3646 install the packages to use a given hardware dongle. Some use cases
3647 are when you insert a Yubikey, it proposes to install the software
3648 needed to control it; when you insert a braille reader list it
3649 proposes to install the packages needed to send text to the reader;
3650 and when you insert a ColorHug screen calibrator it suggests to
3651 install the driver for it. The system work well, and even have a few
3652 command line tools to install firmware packages and packages for the
3653 hardware already in the machine (as opposed to hotpluggable hardware).</p>
3654
3655 <p>The system was initially written using aptdaemon, because I found
3656 good documentation and example code on how to use it. But aptdaemon
3657 is going away and is generally being replaced by
3658 <a href="http://www.freedesktop.org/software/PackageKit/">PackageKit</a>,
3659 so Isenkram needed a rewrite. And today, thanks to the great patch
3660 from my college Sunil Mohan Adapa in the FreedomBox project, the
3661 rewrite finally took place. I've just uploaded a new version of
3662 Isenkram into Debian Unstable with the patch included, and the default
3663 for the background daemon is now to use PackageKit. To check it out,
3664 install the <tt>isenkram</tt> package and insert some hardware dongle
3665 and see if it is recognised.</p>
3666
3667 <p>If you want to know what kind of packages isenkram would propose for
3668 the machine it is running on, you can check out the isenkram-lookup
3669 program. This is what it look like on a Thinkpad X230:</p>
3670
3671 <p><blockquote><pre>
3672 % isenkram-lookup
3673 bluez
3674 cheese
3675 fprintd
3676 fprintd-demo
3677 gkrellm-thinkbat
3678 hdapsd
3679 libpam-fprintd
3680 pidgin-blinklight
3681 thinkfan
3682 tleds
3683 tp-smapi-dkms
3684 tp-smapi-source
3685 tpb
3686 %p
3687 </pre></blockquote></p>
3688
3689 <p>The hardware mappings come from several places. The preferred way
3690 is for packages to announce their hardware support using
3691 <a href="https://www.freedesktop.org/software/appstream/docs/">the
3692 cross distribution appstream system</a>.
3693 See
3694 <a href="http://people.skolelinux.org/pere/blog/tags/isenkram/">previous
3695 blog posts about isenkram</a> to learn how to do that.</p>
3696
3697 </div>
3698 <div class="tags">
3699
3700
3701 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
3702
3703
3704 </div>
3705 </div>
3706 <div class="padding"></div>
3707
3708 <div class="entry">
3709 <div class="title">
3710 <a href="http://people.skolelinux.org/pere/blog/Discharge_rate_estimate_in_new_battery_statistics_collector_for_Debian.html">Discharge rate estimate in new battery statistics collector for Debian</a>
3711 </div>
3712 <div class="date">
3713 23rd May 2016
3714 </div>
3715 <div class="body">
3716 <p>Yesterday I updated the
3717 <a href="https://tracker.debian.org/pkg/battery-stats">battery-stats
3718 package in Debian</a> with a few patches sent to me by skilled and
3719 enterprising users. There were some nice user and visible changes.
3720 First of all, both desktop menu entries now work. A design flaw in
3721 one of the script made the history graph fail to show up (its PNG was
3722 dumped in ~/.xsession-errors) if no controlling TTY was available.
3723 The script worked when called from the command line, but not when
3724 called from the desktop menu. I changed this to look for a DISPLAY
3725 variable or a TTY before deciding where to draw the graph, and now the
3726 graph window pop up as expected.</p>
3727
3728 <p>The next new feature is a discharge rate estimator in one of the
3729 graphs (the one showing the last few hours). New is also the user of
3730 colours showing charging in blue and discharge in red. The percentages
3731 of this graph is relative to last full charge, not battery design
3732 capacity.</p>
3733
3734 <p align="center"><img src="http://people.skolelinux.org/pere/blog/images/2016-05-23-battery-stats-rate.png"/></p>
3735
3736 <p>The other graph show the entire history of the collected battery
3737 statistics, comparing it to the design capacity of the battery to
3738 visualise how the battery life time get shorter over time. The red
3739 line in this graph is what the previous graph considers 100 percent:
3740
3741 <p align="center"><img src="http://people.skolelinux.org/pere/blog/images/2016-05-23-battery-stats-history.png"/></p>
3742
3743 <p>In this graph you can see that I only charge the battery to 80
3744 percent of last full capacity, and how the capacity of the battery is
3745 shrinking. :(</p>
3746
3747 <p>The last new feature is in the collector, which now will handle
3748 more hardware models. On some hardware, Linux power supply
3749 information is stored in /sys/class/power_supply/ACAD/, while the
3750 collector previously only looked in /sys/class/power_supply/AC/. Now
3751 both are checked to figure if there is power connected to the
3752 machine.</p>
3753
3754 <p>If you are interested in how your laptop battery is doing, please
3755 check out the
3756 <a href="https://tracker.debian.org/pkg/battery-stats">battery-stats</a>
3757 in Debian unstable, or rebuild it on Jessie to get it working on
3758 Debian stable. :) The upstream source is available from <a
3759 href="https://github.com/petterreinholdtsen/battery-stats">github</a>.
3760 Patches are very welcome.</p>
3761
3762 <p>As usual, if you use Bitcoin and want to show your support of my
3763 activities, please send Bitcoin donations to my address
3764 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
3765
3766 </div>
3767 <div class="tags">
3768
3769
3770 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
3771
3772
3773 </div>
3774 </div>
3775 <div class="padding"></div>
3776
3777 <div class="entry">
3778 <div class="title">
3779 <a href="http://people.skolelinux.org/pere/blog/Debian_now_with_ZFS_on_Linux_included.html">Debian now with ZFS on Linux included</a>
3780 </div>
3781 <div class="date">
3782 12th May 2016
3783 </div>
3784 <div class="body">
3785 <p>Today, after many years of hard work from many people,
3786 <a href="http://zfsonlinux.org/">ZFS for Linux</a> finally entered
3787 Debian. The package status can be seen on
3788 <a href="https://tracker.debian.org/pkg/zfs-linux">the package tracker
3789 for zfs-linux</a>. and
3790 <a href="https://qa.debian.org/developer.php?login=pkg-zfsonlinux-devel@lists.alioth.debian.org">the
3791 team status page</a>. If you want to help out, please join us.
3792 <a href="http://anonscm.debian.org/gitweb/?p=pkg-zfsonlinux/zfs.git">The
3793 source code</a> is available via git on Alioth. It would also be
3794 great if you could help out with
3795 <a href="https://tracker.debian.org/pkg/dkms">the dkms package</a>, as
3796 it is an important piece of the puzzle to get ZFS working.</p>
3797
3798 </div>
3799 <div class="tags">
3800
3801
3802 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
3803
3804
3805 </div>
3806 </div>
3807 <div class="padding"></div>
3808
3809 <div class="entry">
3810 <div class="title">
3811 <a href="http://people.skolelinux.org/pere/blog/What_is_the_best_multimedia_player_in_Debian_.html">What is the best multimedia player in Debian?</a>
3812 </div>
3813 <div class="date">
3814 8th May 2016
3815 </div>
3816 <div class="body">
3817 <p><strong>Where I set out to figure out which multimedia player in
3818 Debian claim support for most file formats.</strong></p>
3819
3820 <p>A few years ago, I had a look at the media support for Browser
3821 plugins in Debian, to get an idea which plugins to include in Debian
3822 Edu. I created a script to extract the set of supported MIME types
3823 for each plugin, and used this to find out which multimedia browser
3824 plugin supported most file formats / media types.
3825 <a href="https://wiki.debian.org/DebianEdu/BrowserMultimedia">The
3826 result</a> can still be seen on the Debian wiki, even though it have
3827 not been updated for a while. But browser plugins are less relevant
3828 these days, so I thought it was time to look at standalone
3829 players.</p>
3830
3831 <p>A few days ago I was tired of VLC not being listed as a viable
3832 player when I wanted to play videos from the Norwegian National
3833 Broadcasting Company, and decided to investigate why. The cause is a
3834 <a href="https://bugs.debian.org/822245">missing MIME type in the VLC
3835 desktop file</a>. In the process I wrote a script to compare the set
3836 of MIME types announced in the desktop file and the browser plugin,
3837 only to discover that there is quite a large difference between the
3838 two for VLC. This discovery made me dig up the script I used to
3839 compare browser plugins, and adjust it to compare desktop files
3840 instead, to try to figure out which multimedia player in Debian
3841 support most file formats.</p>
3842
3843 <p>The result can be seen on the Debian Wiki, as
3844 <a href="https://wiki.debian.org/DebianMultimedia/PlayerSupport">a
3845 table listing all MIME types supported by one of the packages included
3846 in the table</a>, with the package supporting most MIME types being
3847 listed first in the table.</p>
3848
3849 </p>The best multimedia player in Debian? It is totem, followed by
3850 parole, kplayer, mpv, vlc, smplayer mplayer-gui gnome-mpv and
3851 kmplayer. Time for the other players to update their announced MIME
3852 support?</p>
3853
3854 </div>
3855 <div class="tags">
3856
3857
3858 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="http://people.skolelinux.org/pere/blog/tags/video">video</a>.
3859
3860
3861 </div>
3862 </div>
3863 <div class="padding"></div>
3864
3865 <div class="entry">
3866 <div class="title">
3867 <a href="http://people.skolelinux.org/pere/blog/The_Pyra___handheld_computer_with_Debian_preinstalled.html">The Pyra - handheld computer with Debian preinstalled</a>
3868 </div>
3869 <div class="date">
3870 4th May 2016
3871 </div>
3872 <div class="body">
3873 A friend of mine made me aware of
3874 <a href="https://pyra-handheld.com/boards/pages/pyra/">The Pyra</a>, a
3875 handheld computer which will be delivered with Debian preinstalled. I
3876 would love to get one of those for my birthday. :)</p>
3877
3878 <p>The machine is a complete ARM-based PC with micro HDMI, SATA, USB
3879 plugs and many others connectors, and include a full keyboard and a 5"
3880 LCD touch screen. The 6000mAh battery is claimed to provide a whole
3881 day of battery life time, but I have not seen any independent tests
3882 confirming this. The vendor is still collecting preorders, and the
3883 last I heard last night was that 22 more orders were needed before
3884 production started.</p>
3885
3886 <p>As far as I know, this is the first handheld preinstalled with
3887 Debian. Please let me know if you know of any others. Is it the
3888 first computer being sold with Debian preinstalled?</p>
3889
3890 </div>
3891 <div class="tags">
3892
3893
3894 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
3895
3896
3897 </div>
3898 </div>
3899 <div class="padding"></div>
3900
3901 <div class="entry">
3902 <div class="title">
3903 <a href="http://people.skolelinux.org/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>
3904 </div>
3905 <div class="date">
3906 10th April 2016
3907 </div>
3908 <div class="body">
3909 <p>During this weekends
3910 <a href="http://www.nuug.no/news/Oslo__Takk_for_feilfiksingsfesten.shtml">bug
3911 squashing party and developer gathering</a>, we decided to do our part
3912 to make sure there are good books about Debian available in Norwegian
3913 Bokmål, and got in touch with the people behind the
3914 <a href="http://debian-handbook.info/">Debian Administrator's Handbook
3915 project</a> to get started. If you want to help out, please start
3916 contributing using
3917 <a href="https://hosted.weblate.org/projects/debian-handbook/">the
3918 hosted weblate project page</a>, and get in touch using
3919 <a href="http://lists.alioth.debian.org/mailman/listinfo/debian-handbook-translators">the
3920 translators mailing list</a>. Please also check out
3921 <a href="https://debian-handbook.info/contribute/">the instructions for
3922 contributors</a>.</p>
3923
3924 <p>The book is already available on paper in English, French and
3925 Japanese, and our goal is to get it available on paper in Norwegian
3926 Bokmål too. In addition to the paper edition, there are also EPUB and
3927 Mobi versions available. And there are incomplete translations
3928 available for many more languages.</p>
3929
3930 </div>
3931 <div class="tags">
3932
3933
3934 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
3935
3936
3937 </div>
3938 </div>
3939 <div class="padding"></div>
3940
3941 <div class="entry">
3942 <div class="title">
3943 <a href="http://people.skolelinux.org/pere/blog/One_in_two_hundred_Debian_users_using_ZFS_on_Linux_.html">One in two hundred Debian users using ZFS on Linux?</a>
3944 </div>
3945 <div class="date">
3946 7th April 2016
3947 </div>
3948 <div class="body">
3949 <p>Just for fun I had a look at the popcon number of ZFS related
3950 packages in Debian, and was quite surprised with what I found. I use
3951 ZFS myself at home, but did not really expect many others to do so.
3952 But I might be wrong.</p>
3953
3954 <p>According to
3955 <a href="https://qa.debian.org/popcon.php?package=spl-linux">the popcon
3956 results for spl-linux</a>, there are 1019 Debian installations, or
3957 0.53% of the population, with the package installed. As far as I know
3958 the only use of the spl-linux package is as a support library for ZFS
3959 on Linux, so I use it here as proxy for measuring the number of ZFS
3960 installation on Linux in Debian. In the kFreeBSD variant of Debian
3961 the ZFS feature is already available, and there
3962 <a href="https://qa.debian.org/popcon.php?package=zfsutils">the popcon
3963 results for zfsutils</a> show 1625 Debian installations or 0.84% of
3964 the population. So I guess I am not alone in using ZFS on Debian.</p>
3965
3966 <p>But even though the Debian project leader Lucas Nussbaum
3967 <a href="https://lists.debian.org/debian-devel-announce/2015/04/msg00006.html">announced
3968 in April 2015</a> that the legal obstacles blocking ZFS on Debian were
3969 cleared, the package is still not in Debian. The package is again in
3970 the NEW queue. Several uploads have been rejected so far because the
3971 debian/copyright file was incomplete or wrong, but there is no reason
3972 to give up. The current status can be seen on
3973 <a href="https://qa.debian.org/developer.php?login=pkg-zfsonlinux-devel@lists.alioth.debian.org">the
3974 team status page</a>, and
3975 <a href="http://anonscm.debian.org/gitweb/?p=pkg-zfsonlinux/zfs.git">the
3976 source code</a> is available on Alioth.</p>
3977
3978 <p>As I want ZFS to be included in next version of Debian to make sure
3979 my home server can function in the future using only official Debian
3980 packages, and the current blocker is to get the debian/copyright file
3981 accepted by the FTP masters in Debian, I decided a while back to try
3982 to help out the team. This was the background for my blog post about
3983 <a href="http://people.skolelinux.org/pere/blog/Creating__updating_and_checking_debian_copyright_semi_automatically.html">creating,
3984 updating and checking debian/copyright semi-automatically</a>, and I
3985 used the techniques I explored there to try to find any errors in the
3986 copyright file. It is not very easy to check every one of the around
3987 2000 files in the source package, but I hope we this time got it
3988 right. If you want to help out, check out the git source and try to
3989 find missing entries in the debian/copyright file.</p>
3990
3991 </div>
3992 <div class="tags">
3993
3994
3995 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
3996
3997
3998 </div>
3999 </div>
4000 <div class="padding"></div>
4001
4002 <div class="entry">
4003 <div class="title">
4004 <a href="http://people.skolelinux.org/pere/blog/Full_battery_stats_collector_is_now_available_in_Debian.html">Full battery stats collector is now available in Debian</a>
4005 </div>
4006 <div class="date">
4007 23rd March 2016
4008 </div>
4009 <div class="body">
4010 <p>Since this morning, the battery-stats package in Debian include an
4011 extended collector that will collect the complete battery history for
4012 later processing and graphing. The original collector store the
4013 battery level as percentage of last full level, while the new
4014 collector also record battery vendor, model, serial number, design
4015 full level, last full level and current battery level. This make it
4016 possible to predict the lifetime of the battery as well as visualise
4017 the energy flow when the battery is charging or discharging.</p>
4018
4019 <p>The new tools are available in <tt>/usr/share/battery-stats/</tt>
4020 in the version 0.5.1 package in unstable. Get the new battery level graph
4021 and lifetime prediction by running:
4022
4023 <p><pre>
4024 /usr/share/battery-stats/battery-stats-graph /var/log/battery-stats.csv
4025 </pre></p>
4026
4027 <p>Or select the 'Battery Level Graph' from your application menu.</p>
4028
4029 <p>The flow in/out of the battery can be seen by running (no menu
4030 entry yet):</p>
4031
4032 <p><pre>
4033 /usr/share/battery-stats/battery-stats-graph-flow
4034 </pre></p>
4035
4036 <p>I'm not quite happy with the way the data is visualised, at least
4037 when there are few data points. The graphs look a bit better with a
4038 few years of data.</p>
4039
4040 <p>A while back one important feature I use in the battery stats
4041 collector broke in Debian. The scripts in
4042 <tt>/usr/lib/pm-utils/power.d/</tt> were no longer executed. I
4043 suspect it happened when Jessie started using systemd, but I do not
4044 know. The issue is reported as
4045 <a href="https://bugs.debian.org/818649">bug #818649</a> against
4046 pm-utils. I managed to work around it by adding an udev rule to call
4047 the collector script every time the power connector is connected and
4048 disconnected. With this fix in place it was finally time to make a
4049 new release of the package, and get it into Debian.</p>
4050
4051 <p>If you are interested in how your laptop battery is doing, please
4052 check out the
4053 <a href="https://tracker.debian.org/pkg/battery-stats">battery-stats</a>
4054 in Debian unstable, or rebuild it on Jessie to get it working on
4055 Debian stable. :) The upstream source is available from
4056 <a href="https://github.com/petterreinholdtsen/battery-stats">github</a>.
4057 As always, patches are very welcome.</p>
4058
4059 </div>
4060 <div class="tags">
4061
4062
4063 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
4064
4065
4066 </div>
4067 </div>
4068 <div class="padding"></div>
4069
4070 <div class="entry">
4071 <div class="title">
4072 <a href="http://people.skolelinux.org/pere/blog/Making_battery_measurements_a_little_easier_in_Debian.html">Making battery measurements a little easier in Debian</a>
4073 </div>
4074 <div class="date">
4075 15th March 2016
4076 </div>
4077 <div class="body">
4078 <p>Back in September, I blogged about
4079 <a href="http://people.skolelinux.org/pere/blog/The_life_and_death_of_a_laptop_battery.html">the
4080 system I wrote to collect statistics about my laptop battery</a>, and
4081 how it showed the decay and death of this battery (now replaced). I
4082 created a simple deb package to handle the collection and graphing,
4083 but did not want to upload it to Debian as there were already
4084 <a href="https://tracker.debian.org/pkg/battery-stats">a battery-stats
4085 package in Debian</a> that should do the same thing, and I did not see
4086 a point of uploading a competing package when battery-stats could be
4087 fixed instead. I reported a few bugs about its non-function, and
4088 hoped someone would step in and fix it. But no-one did.</p>
4089
4090 <p>I got tired of waiting a few days ago, and took matters in my own
4091 hands. The end result is that I am now the new upstream developer of
4092 battery stats (<a href="https://github.com/petterreinholdtsen/battery-stats">available from github</a>) and part of the team maintaining
4093 battery-stats in Debian, and the package in Debian unstable is finally
4094 able to collect battery status using the <tt>/sys/class/power_supply/</tt>
4095 information provided by the Linux kernel. If you install the
4096 battery-stats package from unstable now, you will be able to get a
4097 graph of the current battery fill level, to get some idea about the
4098 status of the battery. The source package build and work just fine in
4099 Debian testing and stable (and probably oldstable too, but I have not
4100 tested). The default graph you get for that system look like this:</p>
4101
4102 <p align="center"><img src="http://people.skolelinux.org/pere/blog/images/2016-03-15-battery-stats-graph-example.png" width="70%" align="center"></p>
4103
4104 <p>My plans for the future is to merge my old scripts into the
4105 battery-stats package, as my old scripts collected a lot more details
4106 about the battery. The scripts are merged into the upstream
4107 battery-stats git repository already, but I am not convinced they work
4108 yet, as I changed a lot of paths along the way. Will have to test a
4109 bit more before I make a new release.</p>
4110
4111 <p>I will also consider changing the file format slightly, as I
4112 suspect the way I combine several values into one field might make it
4113 impossible to know the type of the value when using it for processing
4114 and graphing.</p>
4115
4116 <p>If you would like I would like to keep an close eye on your laptop
4117 battery, check out the battery-stats package in
4118 <a href="https://tracker.debian.org/pkg/battery-stats">Debian</a> and
4119 on
4120 <a href="https://github.com/petterreinholdtsen/battery-stats">github</a>.
4121 I would love some help to improve the system further.</p>
4122
4123 </div>
4124 <div class="tags">
4125
4126
4127 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
4128
4129
4130 </div>
4131 </div>
4132 <div class="padding"></div>
4133
4134 <div class="entry">
4135 <div class="title">
4136 <a href="http://people.skolelinux.org/pere/blog/Creating__updating_and_checking_debian_copyright_semi_automatically.html">Creating, updating and checking debian/copyright semi-automatically</a>
4137 </div>
4138 <div class="date">
4139 19th February 2016
4140 </div>
4141 <div class="body">
4142 <p>Making packages for Debian requires quite a lot of attention to
4143 details. And one of the details is the content of the
4144 debian/copyright file, which should list all relevant licenses used by
4145 the code in the package in question, preferably in
4146 <a href="https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/">machine
4147 readable DEP5 format</a>.</p>
4148
4149 <p>For large packages with lots of contributors it is hard to write
4150 and update this file manually, and if you get some detail wrong, the
4151 package is normally rejected by the ftpmasters. So getting it right
4152 the first time around get the package into Debian faster, and save
4153 both you and the ftpmasters some work.. Today, while trying to figure
4154 out what was wrong with
4155 <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=686447">the
4156 zfsonlinux copyright file</a>, I decided to spend some time on
4157 figuring out the options for doing this job automatically, or at least
4158 semi-automatically.</p>
4159
4160 <p>Lucikly, there are at least two tools available for generating the
4161 file based on the code in the source package,
4162 <tt><a href="https://tracker.debian.org/pkg/debmake">debmake</a></tt>
4163 and <tt><a href="https://tracker.debian.org/pkg/cme">cme</a></tt>. I'm
4164 not sure which one of them came first, but both seem to be able to
4165 create a sensible draft file. As far as I can tell, none of them can
4166 be trusted to get the result just right, so the content need to be
4167 polished a bit before the file is OK to upload. I found the debmake
4168 option in
4169 <a href="http://goofying-with-debian.blogspot.com/2014/07/debmake-checking-source-against-dep-5.html">a
4170 blog posts from 2014</a>.
4171
4172 <p>To generate using debmake, use the -cc option:
4173
4174 <p><pre>
4175 debmake -cc > debian/copyright
4176 </pre></p>
4177
4178 <p>Note there are some problems with python and non-ASCII names, so
4179 this might not be the best option.</p>
4180
4181 <p>The cme option is based on a config parsing library, and I found
4182 this approach in
4183 <a href="https://ddumont.wordpress.com/2015/04/05/improving-creation-of-debian-copyright-file/">a
4184 blog post from 2015</a>. To generate using cme, use the 'update
4185 dpkg-copyright' option:
4186
4187 <p><pre>
4188 cme update dpkg-copyright
4189 </pre></p>
4190
4191 <p>This will create or update debian/copyright. The cme tool seem to
4192 handle UTF-8 names better than debmake.</p>
4193
4194 <p>When the copyright file is created, I would also like some help to
4195 check if the file is correct. For this I found two good options,
4196 <tt>debmake -k</tt> and <tt>license-reconcile</tt>. The former seem
4197 to focus on license types and file matching, and is able to detect
4198 ineffective blocks in the copyright file. The latter reports missing
4199 copyright holders and years, but was confused by inconsistent license
4200 names (like CDDL vs. CDDL-1.0). I suspect it is good to use both and
4201 fix all issues reported by them before uploading. But I do not know
4202 if the tools and the ftpmasters agree on what is important to fix in a
4203 copyright file, so the package might still be rejected.</p>
4204
4205 <p>The devscripts tool <tt>licensecheck</tt> deserve mentioning. It
4206 will read through the source and try to find all copyright statements.
4207 It is not comparing the result to the content of debian/copyright, but
4208 can be useful when verifying the content of the copyright file.</p>
4209
4210 <p>Are you aware of better tools in Debian to create and update
4211 debian/copyright file. Please let me know, or blog about it on
4212 planet.debian.org.</p>
4213
4214 <p>As usual, if you use Bitcoin and want to show your support of my
4215 activities, please send Bitcoin donations to my address
4216 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
4217
4218 <p><strong>Update 2016-02-20</strong>: I got a tip from Mike Gabriel
4219 on how to use licensecheck and cdbs to create a draft copyright file
4220
4221 <p><pre>
4222 licensecheck --copyright -r `find * -type f` | \
4223 /usr/lib/cdbs/licensecheck2dep5 > debian/copyright.auto
4224 </pre></p>
4225
4226 <p>He mentioned that he normally check the generated file into the
4227 version control system to make it easier to discover license and
4228 copyright changes in the upstream source. I will try to do the same
4229 with my packages in the future.</p>
4230
4231 <p><strong>Update 2016-02-21</strong>: The cme author recommended
4232 against using -quiet for new users, so I removed it from the proposed
4233 command line.</p>
4234
4235 </div>
4236 <div class="tags">
4237
4238
4239 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
4240
4241
4242 </div>
4243 </div>
4244 <div class="padding"></div>
4245
4246 <div class="entry">
4247 <div class="title">
4248 <a href="http://people.skolelinux.org/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>
4249 </div>
4250 <div class="date">
4251 4th February 2016
4252 </div>
4253 <div class="body">
4254 <p>The <a href="https://wiki.debian.org/DEP-11">appstream system</a>
4255 is taking shape in Debian, and one provided feature is a very
4256 convenient way to tell you which package to install to make a given
4257 firmware file available when the kernel is looking for it. This can
4258 be done using apt-file too, but that is for someone else to blog
4259 about. :)</p>
4260
4261 <p>Here is a small recipe to find the package with a given firmware
4262 file, in this example I am looking for ctfw-3.2.3.0.bin, randomly
4263 picked from the set of firmware announced using appstream in Debian
4264 unstable. In general you would be looking for the firmware requested
4265 by the kernel during kernel module loading. To find the package
4266 providing the example file, do like this:</p>
4267
4268 <blockquote><pre>
4269 % apt install appstream
4270 [...]
4271 % apt update
4272 [...]
4273 % appstreamcli what-provides firmware:runtime ctfw-3.2.3.0.bin | \
4274 awk '/Package:/ {print $2}'
4275 firmware-qlogic
4276 %
4277 </pre></blockquote>
4278
4279 <p>See <a href="https://wiki.debian.org/AppStream/Guidelines">the
4280 appstream wiki</a> page to learn how to embed the package metadata in
4281 a way appstream can use.</p>
4282
4283 <p>This same approach can be used to find any package supporting a
4284 given MIME type. This is very useful when you get a file you do not
4285 know how to handle. First find the mime type using <tt>file
4286 --mime-type</tt>, and next look up the package providing support for
4287 it. Lets say you got an SVG file. Its MIME type is image/svg+xml,
4288 and you can find all packages handling this type like this:</p>
4289
4290 <blockquote><pre>
4291 % apt install appstream
4292 [...]
4293 % apt update
4294 [...]
4295 % appstreamcli what-provides mimetype image/svg+xml | \
4296 awk '/Package:/ {print $2}'
4297 bkchem
4298 phototonic
4299 inkscape
4300 shutter
4301 tetzle
4302 geeqie
4303 xia
4304 pinta
4305 gthumb
4306 karbon
4307 comix
4308 mirage
4309 viewnior
4310 postr
4311 ristretto
4312 kolourpaint4
4313 eog
4314 eom
4315 gimagereader
4316 midori
4317 %
4318 </pre></blockquote>
4319
4320 <p>I believe the MIME types are fetched from the desktop file for
4321 packages providing appstream metadata.</p>
4322
4323 </div>
4324 <div class="tags">
4325
4326
4327 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
4328
4329
4330 </div>
4331 </div>
4332 <div class="padding"></div>
4333
4334 <div class="entry">
4335 <div class="title">
4336 <a href="http://people.skolelinux.org/pere/blog/Creepy__visualise_geotagged_social_media_information___nice_free_software.html">Creepy, visualise geotagged social media information - nice free software</a>
4337 </div>
4338 <div class="date">
4339 24th January 2016
4340 </div>
4341 <div class="body">
4342 <p>Most people seem not to realise that every time they walk around
4343 with the computerised radio beacon known as a mobile phone their
4344 position is tracked by the phone company and often stored for a long
4345 time (like every time a SMS is received or sent). And if their
4346 computerised radio beacon is capable of running programs (often called
4347 mobile apps) downloaded from the Internet, these programs are often
4348 also capable of tracking their location (if the app requested access
4349 during installation). And when these programs send out information to
4350 central collection points, the location is often included, unless
4351 extra care is taken to not send the location. The provided
4352 information is used by several entities, for good and bad (what is
4353 good and bad, depend on your point of view). What is certain, is that
4354 the private sphere and the right to free movement is challenged and
4355 perhaps even eradicated for those announcing their location this way,
4356 when they share their whereabouts with private and public
4357 entities.</p>
4358
4359 <p align="center"><img width="70%" src="http://people.skolelinux.org/pere/blog/images/2016-01-24-nice-creepy-desktop-window.png"></p>
4360
4361 <p>The phone company logs provide a register of locations to check out
4362 when one want to figure out what the tracked person was doing. It is
4363 unavailable for most of us, but provided to selected government
4364 officials, company staff, those illegally buying information from
4365 unfaithful servants and crackers stealing the information. But the
4366 public information can be collected and analysed, and a free software
4367 tool to do so is called
4368 <a href="http://www.geocreepy.com/">Creepy or Cree.py</a>. I
4369 discovered it when I read
4370 <a href="http://www.aftenposten.no/kultur/Slik-kan-du-bli-overvaket-pa-Twitter-og-Instagram-uten-a-ane-det-7787884.html">an
4371 article about Creepy</a> in the Norwegian newspaper Aftenposten i
4372 November 2014, and decided to check if it was available in Debian.
4373 The python program was in Debian, but
4374 <a href="https://tracker.debian.org/pkg/creepy">the version in
4375 Debian</a> was completely broken and practically unmaintained. I
4376 uploaded a new version which did not work quite right, but did not
4377 have time to fix it then. This Christmas I decided to finally try to
4378 get Creepy operational in Debian. Now a fixed version is available in
4379 Debian unstable and testing, and almost all Debian specific patches
4380 are now included
4381 <a href="https://github.com/jkakavas/creepy">upstream</a>.</p>
4382
4383 <p>The Creepy program visualises geolocation information fetched from
4384 Twitter, Instagram, Flickr and Google+, and allow one to get a
4385 complete picture of every social media message posted recently in a
4386 given area, or track the movement of a given individual across all
4387 these services. Earlier it was possible to use the search API of at
4388 least some of these services without identifying oneself, but these
4389 days it is impossible. This mean that to use Creepy, you need to
4390 configure it to log in as yourself on these services, and provide
4391 information to them about your search interests. This should be taken
4392 into account when using Creepy, as it will also share information
4393 about yourself with the services.</p>
4394
4395 <p>The picture above show the twitter messages sent from (or at least
4396 geotagged with a position from) the city centre of Oslo, the capital
4397 of Norway. One useful way to use Creepy is to first look at
4398 information tagged with an area of interest, and next look at all the
4399 information provided by one or more individuals who was in the area.
4400 I tested it by checking out which celebrity provide their location in
4401 twitter messages by checkout out who sent twitter messages near a
4402 Norwegian TV station, and next could track their position over time,
4403 making it possible to locate their home and work place, among other
4404 things. A similar technique have been
4405 <a href="http://www.buzzfeed.com/maxseddon/does-this-soldiers-instagram-account-prove-russia-is-covertl">used
4406 to locate Russian soldiers in Ukraine</a>, and it is both a powerful
4407 tool to discover lying governments, and a useful tool to help people
4408 understand the value of the private information they provide to the
4409 public.</p>
4410
4411 <p>The package is not trivial to backport to Debian Stable/Jessie, as
4412 it depend on several python modules currently missing in Jessie (at
4413 least python-instagram, python-flickrapi and
4414 python-requests-toolbelt).</p>
4415
4416 <p>(I have uploaded
4417 <a href="https://screenshots.debian.net/package/creepy">the image to
4418 screenshots.debian.net</a> and licensed it under the same terms as the
4419 Creepy program in Debian.)</p>
4420
4421 </div>
4422 <div class="tags">
4423
4424
4425 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>.
4426
4427
4428 </div>
4429 </div>
4430 <div class="padding"></div>
4431
4432 <div class="entry">
4433 <div class="title">
4434 <a href="http://people.skolelinux.org/pere/blog/Always_download_Debian_packages_using_Tor___the_simple_recipe.html">Always download Debian packages using Tor - the simple recipe</a>
4435 </div>
4436 <div class="date">
4437 15th January 2016
4438 </div>
4439 <div class="body">
4440 <p>During his DebConf15 keynote, Jacob Appelbaum
4441 <a href="https://summit.debconf.org/debconf15/meeting/331/what-is-to-be-done/">observed
4442 that those listening on the Internet lines would have good reason to
4443 believe a computer have a given security hole</a> if it download a
4444 security fix from a Debian mirror. This is a good reason to always
4445 use encrypted connections to the Debian mirror, to make sure those
4446 listening do not know which IP address to attack. In August, Richard
4447 Hartmann observed that encryption was not enough, when it was possible
4448 to interfere download size to security patches or the fact that
4449 download took place shortly after a security fix was released, and
4450 <a href="http://richardhartmann.de/blog/posts/2015/08/24-Tor-enabled_Debian_mirror/">proposed
4451 to always use Tor to download packages from the Debian mirror</a>. He
4452 was not the first to propose this, as the
4453 <tt><a href="https://tracker.debian.org/pkg/apt-transport-tor">apt-transport-tor</a></tt>
4454 package by Tim Retout already existed to make it easy to convince apt
4455 to use <a href="https://www.torproject.org/">Tor</a>, but I was not
4456 aware of that package when I read the blog post from Richard.</p>
4457
4458 <p>Richard discussed the idea with Peter Palfrader, one of the Debian
4459 sysadmins, and he set up a Tor hidden service on one of the central
4460 Debian mirrors using the address vwakviie2ienjx6t.onion, thus making
4461 it possible to download packages directly between two tor nodes,
4462 making sure the network traffic always were encrypted.</p>
4463
4464 <p>Here is a short recipe for enabling this on your machine, by
4465 installing <tt>apt-transport-tor</tt> and replacing http and https
4466 urls with tor+http and tor+https, and using the hidden service instead
4467 of the official Debian mirror site. I recommend installing
4468 <tt>etckeeper</tt> before you start to have a history of the changes
4469 done in /etc/.</p>
4470
4471 <blockquote><pre>
4472 apt install apt-transport-tor
4473 sed -i 's% http://ftp.debian.org/% tor+http://vwakviie2ienjx6t.onion/%' /etc/apt/sources.list
4474 sed -i 's% http% tor+http%' /etc/apt/sources.list
4475 </pre></blockquote>
4476
4477 <p>If you have more sources listed in /etc/apt/sources.list.d/, run
4478 the sed commands for these too. The sed command is assuming your are
4479 using the ftp.debian.org Debian mirror. Adjust the command (or just
4480 edit the file manually) to match your mirror.</p>
4481
4482 <p>This work in Debian Jessie and later. Note that tools like
4483 <tt>apt-file</tt> only recently started using the apt transport
4484 system, and do not work with these tor+http URLs. For
4485 <tt>apt-file</tt> you need the version currently in experimental,
4486 which need a recent apt version currently only in unstable. So if you
4487 need a working <tt>apt-file</tt>, this is not for you.</p>
4488
4489 <p>Another advantage from this change is that your machine will start
4490 using Tor regularly and at fairly random intervals (every time you
4491 update the package lists or upgrade or install a new package), thus
4492 masking other Tor traffic done from the same machine. Using Tor will
4493 become normal for the machine in question.</p>
4494
4495 <p>On <a href="https://wiki.debian.org/FreedomBox">Freedombox</a>, APT
4496 is set up by default to use <tt>apt-transport-tor</tt> when Tor is
4497 enabled. It would be great if it was the default on any Debian
4498 system.</p>
4499
4500 </div>
4501 <div class="tags">
4502
4503
4504 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
4505
4506
4507 </div>
4508 </div>
4509 <div class="padding"></div>
4510
4511 <div class="entry">
4512 <div class="title">
4513 <a href="http://people.skolelinux.org/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>
4514 </div>
4515 <div class="date">
4516 23rd December 2015
4517 </div>
4518 <div class="body">
4519 <p>When I was a kid, we used to collect "car numbers", as we used to
4520 call the car license plate numbers in those days. I would write the
4521 numbers down in my little book and compare notes with the other kids
4522 to see how many region codes we had seen and if we had seen some
4523 exotic or special region codes and numbers. It was a fun game to pass
4524 time, as we kids have plenty of it.</p>
4525
4526 <p>A few days I came across
4527 <a href="https://github.com/openalpr/openalpr">the OpenALPR
4528 project</a>, a free software project to automatically discover and
4529 report license plates in images and video streams, and provide the
4530 "car numbers" in a machine readable format. I've been looking for
4531 such system for a while now, because I believe it is a bad idea that the
4532 <a href="https://en.wikipedia.org/wiki/Automatic_number_plate_recognition">automatic
4533 number plate recognition</a> tool only is available in the hands of
4534 the powerful, and want it to be available also for the powerless to
4535 even the score when it comes to surveillance and sousveillance. I
4536 discovered the developer
4537 <a href="https://bugs.debian.org/747509">wanted to get the tool into
4538 Debian</a>, and as I too wanted it to be in Debian, I volunteered to
4539 help him get it into shape to get the package uploaded into the Debian
4540 archive.</p>
4541
4542 <p>Today we finally managed to get the package into shape and uploaded
4543 it into Debian, where it currently
4544 <a href="https://ftp-master.debian.org//new/openalpr_2.2.1-1.html">waits
4545 in the NEW queue</a> for review by the Debian ftpmasters.</p>
4546
4547 <p>I guess you are wondering why on earth such tool would be useful
4548 for the common folks, ie those not running a large government
4549 surveillance system? Well, I plan to put it in a computer on my bike
4550 and in my car, tracking the cars nearby and allowing me to be notified
4551 when number plates on my watch list are discovered. Another use case
4552 was suggested by a friend of mine, who wanted to set it up at his home
4553 to open the car port automatically when it discovered the plate on his
4554 car. When I mentioned it perhaps was a bit foolhardy to allow anyone
4555 capable of placing his license plate number of a piece of cardboard to
4556 open his car port, men replied that it was always unlocked anyway. I
4557 guess for such use case it make sense. I am sure there are other use
4558 cases too, for those with imagination and a vision.</p>
4559
4560 <p>If you want to build your own version of the Debian package, check
4561 out the upstream git source and symlink ./distros/debian to ./debian/
4562 before running "debuild" to build the source. Or wait a bit until the
4563 package show up in unstable.</p>
4564
4565 </div>
4566 <div class="tags">
4567
4568
4569 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>.
4570
4571
4572 </div>
4573 </div>
4574 <div class="padding"></div>
4575
4576 <div class="entry">
4577 <div class="title">
4578 <a href="http://people.skolelinux.org/pere/blog/Using_appstream_with_isenkram_to_install_hardware_related_packages_in_Debian.html">Using appstream with isenkram to install hardware related packages in Debian</a>
4579 </div>
4580 <div class="date">
4581 20th December 2015
4582 </div>
4583 <div class="body">
4584 <p>Around three years ago, I created
4585 <a href="http://packages.qa.debian.org/isenkram">the isenkram
4586 system</a> to get a more practical solution in Debian for handing
4587 hardware related packages. A GUI system in the isenkram package will
4588 present a pop-up dialog when some hardware dongle supported by
4589 relevant packages in Debian is inserted into the machine. The same
4590 lookup mechanism to detect packages is available as command line
4591 tools in the isenkram-cli package. In addition to mapping hardware,
4592 it will also map kernel firmware files to packages and make it easy to
4593 install needed firmware packages automatically. The key for this
4594 system to work is a good way to map hardware to packages, in other
4595 words, allow packages to announce what hardware they will work
4596 with.</p>
4597
4598 <p>I started by providing data files in the isenkram source, and
4599 adding code to download the latest version of these data files at run
4600 time, to ensure every user had the most up to date mapping available.
4601 I also added support for storing the mapping in the Packages file in
4602 the apt repositories, but did not push this approach because while I
4603 was trying to figure out how to best store hardware/package mappings,
4604 <a href="http://www.freedesktop.org/software/appstream/docs/">the
4605 appstream system</a> was announced. I got in touch and suggested to
4606 add the hardware mapping into that data set to be able to use
4607 appstream as a data source, and this was accepted at least for the
4608 Debian version of appstream.</p>
4609
4610 <p>A few days ago using appstream in Debian for this became possible,
4611 and today I uploaded a new version 0.20 of isenkram adding support for
4612 appstream as a data source for mapping hardware to packages. The only
4613 package so far using appstream to announce its hardware support is my
4614 pymissile package. I got help from Matthias Klumpp with figuring out
4615 how do add the required
4616 <a href="https://appstream.debian.org/html/sid/main/metainfo/pymissile.html">metadata
4617 in pymissile</a>. I added a file debian/pymissile.metainfo.xml with
4618 this content:</p>
4619
4620 <blockquote><pre>
4621 &lt;?xml version="1.0" encoding="UTF-8"?&gt;
4622 &lt;component&gt;
4623 &lt;id&gt;pymissile&lt;/id&gt;
4624 &lt;metadata_license&gt;MIT&lt;/metadata_license&gt;
4625 &lt;name&gt;pymissile&lt;/name&gt;
4626 &lt;summary&gt;Control original Striker USB Missile Launcher&lt;/summary&gt;
4627 &lt;description&gt;
4628 &lt;p&gt;
4629 Pymissile provides a curses interface to control an original
4630 Marks and Spencer / Striker USB Missile Launcher, as well as a
4631 motion control script to allow a webcamera to control the
4632 launcher.
4633 &lt;/p&gt;
4634 &lt;/description&gt;
4635 &lt;provides&gt;
4636 &lt;modalias&gt;usb:v1130p0202d*&lt;/modalias&gt;
4637 &lt;/provides&gt;
4638 &lt;/component&gt;
4639 </pre></blockquote>
4640
4641 <p>The key for isenkram is the component/provides/modalias value,
4642 which is a glob style match rule for hardware specific strings
4643 (modalias strings) provided by the Linux kernel. In this case, it
4644 will map to all USB devices with vendor code 1130 and product code
4645 0202.</p>
4646
4647 <p>Note, it is important that the license of all the metadata files
4648 are compatible to have permissions to aggregate them into archive wide
4649 appstream files. Matthias suggested to use MIT or BSD licenses for
4650 these files. A challenge is figuring out a good id for the data, as
4651 it is supposed to be globally unique and shared across distributions
4652 (in other words, best to coordinate with upstream what to use). But
4653 it can be changed later or, so we went with the package name as
4654 upstream for this project is dormant.</p>
4655
4656 <p>To get the metadata file installed in the correct location for the
4657 mirror update scripts to pick it up and include its content the
4658 appstream data source, the file must be installed in the binary
4659 package under /usr/share/appdata/. I did this by adding the following
4660 line to debian/pymissile.install:</p>
4661
4662 <blockquote><pre>
4663 debian/pymissile.metainfo.xml usr/share/appdata
4664 </pre></blockquote>
4665
4666 <p>With that in place, the command line tool isenkram-lookup will list
4667 all packages useful on the current computer automatically, and the GUI
4668 pop-up handler will propose to install the package not already
4669 installed if a hardware dongle is inserted into the machine in
4670 question.</p>
4671
4672 <p>Details of the modalias field in appstream is available from the
4673 <a href="https://wiki.debian.org/DEP-11">DEP-11</a> proposal.</p>
4674
4675 <p>To locate the modalias values of all hardware present in a machine,
4676 try running this command on the command line:</p>
4677
4678 <blockquote><pre>
4679 cat $(find /sys/devices/|grep modalias)
4680 </pre></blockquote>
4681
4682 <p>To learn more about the isenkram system, please check out
4683 <a href="http://people.skolelinux.org/pere/blog/tags/isenkram/">my
4684 blog posts tagged isenkram</a>.</p>
4685
4686 </div>
4687 <div class="tags">
4688
4689
4690 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
4691
4692
4693 </div>
4694 </div>
4695 <div class="padding"></div>
4696
4697 <div class="entry">
4698 <div class="title">
4699 <a href="http://people.skolelinux.org/pere/blog/The_GNU_General_Public_License_is_not_magic_pixie_dust.html">The GNU General Public License is not magic pixie dust</a>
4700 </div>
4701 <div class="date">
4702 30th November 2015
4703 </div>
4704 <div class="body">
4705 <p>A blog post from my fellow Debian developer Paul Wise titled
4706 "<a href="http://bonedaddy.net/pabs3/log/2015/11/27/sfc-supporter/">The
4707 GPL is not magic pixie dust</a>" explain the importance of making sure
4708 the <a href="http://www.gnu.org/copyleft/gpl.html">GPL</a> is enforced.
4709 I quote the blog post from Paul in full here with his permission:<p>
4710
4711 <blockquote>
4712
4713 <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>
4714
4715 <blockquote>
4716 The GPL is not magic pixie dust. It does not work by itself.<br/>
4717
4718 The first step is to choose a
4719 <a href="https://copyleft.org/">copyleft</a> license for your
4720 code.<br/>
4721
4722 The next step is, when someone fails to follow that copyleft license,
4723 <b>it must be enforced</b><br/>
4724
4725 and its a simple fact of our modern society that such type of
4726 work<br/>
4727
4728 is incredibly expensive to do and incredibly difficult to do.
4729 </blockquote>
4730
4731 <p><small>-- <a href="http://ebb.org/bkuhn/">Bradley Kuhn</a>, in
4732 <a href="http://faif.us/" title="Free as in Freedom">FaiF</a>
4733 <a href="http://faif.us/cast/2015/nov/24/0x57/">episode
4734 0x57</a></small></p>
4735
4736 <p>As the Debian Website
4737 <a href="https://bugs.debian.org/794116">used</a>
4738 <a href="https://anonscm.debian.org/viewvc/webwml/webwml/english/intro/free.wml?r1=1.24&amp;r2=1.25">to</a>
4739 imply, public domain and permissively licensed software can lead to
4740 the production of more proprietary software as people discover useful
4741 software, extend it and or incorporate it into their hardware or
4742 software products. Copyleft licenses such as the GNU GPL were created
4743 to close off this avenue to the production of proprietary software but
4744 such licenses are not enough. With the ongoing adoption of Free
4745 Software by individuals and groups, inevitably the community's
4746 expectations of license compliance are violated, usually out of
4747 ignorance of the way Free Software works, but not always. As Karen
4748 and Bradley explained in <a href="http://faif.us/" title="Free as in
4749 Freedom">FaiF</a>
4750 <a href="http://faif.us/cast/2015/nov/24/0x57/">episode 0x57</a>,
4751 copyleft is nothing if no-one is willing and able to stand up in court
4752 to protect it. The reality of today's world is that legal
4753 representation is expensive, difficult and time consuming. With
4754 <a href="http://gpl-violations.org/">gpl-violations.org</a> in hiatus
4755 <a href="http://gpl-violations.org/news/20151027-homepage-recovers/">until</a>
4756 some time in 2016, the <a href="https://sfconservancy.org/">Software
4757 Freedom Conservancy</a> (a tax-exempt charity) is the major defender
4758 of the Linux project, Debian and other groups against GPL violations.
4759 In March the SFC supported a
4760 <a href="https://sfconservancy.org/news/2015/mar/05/vmware-lawsuit/">lawsuit
4761 by Christoph Hellwig</a> against VMware for refusing to
4762 <a href="https://sfconservancy.org/linux-compliance/vmware-lawsuit-faq.html">comply
4763 with the GPL</a> in relation to their use of parts of the Linux
4764 kernel. Since then two of their sponsors pulled corporate funding and
4765 conferences
4766 <a href="https://sfconservancy.org/blog/2015/nov/24/faif-carols-fundraiser/">blocked
4767 or cancelled their talks</a>. As a result they have decided to rely
4768 less on corporate funding and more on the broad community of
4769 individuals who support Free Software and copyleft. So the SFC has
4770 <a href="https://sfconservancy.org/news/2015/nov/23/2015fundraiser/">launched</a>
4771 a <a href="https://sfconservancy.org/supporter/">campaign</a> to create
4772 a community of folks who stand up for copyleft and the GPL by
4773 supporting their work on promoting and supporting copyleft and Free
4774 Software.</p>
4775
4776 <p>If you support Free Software,
4777 <a href="https://sfconservancy.org/blog/2015/nov/26/like-what-I-do/">like</a>
4778 what the SFC do, agree with their
4779 <a href="https://sfconservancy.org/linux-compliance/principles.html">compliance
4780 principles</a>, are happy about their
4781 <a href="https://sfconservancy.org/supporter/">successes</a> in 2015,
4782 work on a project that is an SFC
4783 <a href="https://sfconservancy.org/members/current/">member</a> and or
4784 just want to stand up for copyleft, please join
4785 <a href="https://identi.ca/cwebber/image/JQGPA4qbTyyp3-MY8QpvuA">Christopher
4786 Allan Webber</a>,
4787 <a href="https://sfconservancy.org/blog/2015/nov/24/faif-carols-fundraiser/">Carol
4788 Smith</a>,
4789 <a href="http://www.jonobacon.org/2015/11/25/supporting-software-freedom-conservancy/">Jono
4790 Bacon</a>, myself and
4791 <a href="https://sfconservancy.org/sponsors/#supporters">others</a> in
4792 becoming a
4793 <a href="https://sfconservancy.org/supporter/">supporter</a>. For the
4794 next week your donation will be
4795 <a href="https://sfconservancy.org/news/2015/nov/27/black-friday/">matched</a>
4796 by an anonymous donor. Please also consider asking your employer to
4797 match your donation or become a sponsor of SFC. Don't forget to
4798 spread the word about your support for SFC via email, your blog and or
4799 social media accounts.</p>
4800
4801 </blockquote>
4802
4803 <p>I agree with Paul on this topic and just signed up as a Supporter
4804 of Software Freedom Conservancy myself. Perhaps you should be a
4805 supporter too?</p>
4806
4807 </div>
4808 <div class="tags">
4809
4810
4811 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett</a>.
4812
4813
4814 </div>
4815 </div>
4816 <div class="padding"></div>
4817
4818 <div class="entry">
4819 <div class="title">
4820 <a href="http://people.skolelinux.org/pere/blog/PGP_key_transition_statement_for_key_EE4E02F9.html">PGP key transition statement for key EE4E02F9</a>
4821 </div>
4822 <div class="date">
4823 17th November 2015
4824 </div>
4825 <div class="body">
4826 <p>I've needed a new OpenPGP key for a while, but have not had time to
4827 set it up properly. I wanted to generate it offline and have it
4828 available on <a href="http://shop.kernelconcepts.de/#openpgp">a OpenPGP
4829 smart card</a> for daily use, and learning how to do it and finding
4830 time to sit down with an offline machine almost took forever. But
4831 finally I've been able to complete the process, and have now moved
4832 from my old GPG key to a new GPG key. See
4833 <a href="http://people.skolelinux.org/pere/blog/images/2015-11-17-new-gpg-key-transition.txt">the
4834 full transition statement, signed with both my old and new key</a> for
4835 the details. This is my new key:</p>
4836
4837 <pre>
4838 pub 3936R/<a href="http://pgp.cs.uu.nl/stats/111D6B29EE4E02F9.html">111D6B29EE4E02F9</a> 2015-11-03 [expires: 2019-11-14]
4839 Key fingerprint = 3AC7 B2E3 ACA5 DF87 78F1 D827 111D 6B29 EE4E 02F9
4840 uid Petter Reinholdtsen &lt;pere@hungry.com&gt;
4841 uid Petter Reinholdtsen &lt;pere@debian.org&gt;
4842 sub 4096R/87BAFB0E 2015-11-03 [expires: 2019-11-02]
4843 sub 4096R/F91E6DE9 2015-11-03 [expires: 2019-11-02]
4844 sub 4096R/A0439BAB 2015-11-03 [expires: 2019-11-02]
4845 </pre>
4846
4847 <p>The key can be downloaded from the OpenPGP key servers, signed by
4848 my old key.</p>
4849
4850 <p>If you signed my old key
4851 (<a href="http://pgp.cs.uu.nl/stats/DB4CCC4B2A30D729.html">DB4CCC4B2A30D729</a>),
4852 I'd very much appreciate a signature on my new key, details and
4853 instructions in the transition statement. I m happy to reciprocate if
4854 you have a similarly signed transition statement to present.</p>
4855
4856 </div>
4857 <div class="tags">
4858
4859
4860 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
4861
4862
4863 </div>
4864 </div>
4865 <div class="padding"></div>
4866
4867 <div class="entry">
4868 <div class="title">
4869 <a href="http://people.skolelinux.org/pere/blog/The_life_and_death_of_a_laptop_battery.html">The life and death of a laptop battery</a>
4870 </div>
4871 <div class="date">
4872 24th September 2015
4873 </div>
4874 <div class="body">
4875 <p>When I get a new laptop, the battery life time at the start is OK.
4876 But this do not last. The last few laptops gave me a feeling that
4877 within a year, the life time is just a fraction of what it used to be,
4878 and it slowly become painful to use the laptop without power connected
4879 all the time. Because of this, when I got a new Thinkpad X230 laptop
4880 about two years ago, I decided to monitor its battery state to have
4881 more hard facts when the battery started to fail.</p>
4882
4883 <img src="http://people.skolelinux.org/pere/blog/images/2015-09-24-laptop-battery-graph.png"/>
4884
4885 <p>First I tried to find a sensible Debian package to record the
4886 battery status, assuming that this must be a problem already handled
4887 by someone else. I found
4888 <a href="https://tracker.debian.org/pkg/battery-stats">battery-stats</a>,
4889 which collects statistics from the battery, but it was completely
4890 broken. I sent a few suggestions to the maintainer, but decided to
4891 write my own collector as a shell script while I waited for feedback
4892 from him. Via
4893 <a href="http://www.ifweassume.com/2013/08/the-de-evolution-of-my-laptop-battery.html">a
4894 blog post about the battery development on a MacBook Air</a> I also
4895 discovered
4896 <a href="https://github.com/jradavenport/batlog.git">batlog</a>, not
4897 available in Debian.</p>
4898
4899 <p>I started my collector 2013-07-15, and it has been collecting
4900 battery stats ever since. Now my
4901 /var/log/hjemmenett-battery-status.log file contain around 115,000
4902 measurements, from the time the battery was working great until now,
4903 when it is unable to charge above 7% of original capacity. My
4904 collector shell script is quite simple and look like this:</p>
4905
4906 <pre>
4907 #!/bin/sh
4908 # Inspired by
4909 # http://www.ifweassume.com/2013/08/the-de-evolution-of-my-laptop-battery.html
4910 # See also
4911 # http://blog.sleeplessbeastie.eu/2013/01/02/debian-how-to-monitor-battery-capacity/
4912 logfile=/var/log/hjemmenett-battery-status.log
4913
4914 files="manufacturer model_name technology serial_number \
4915 energy_full energy_full_design energy_now cycle_count status"
4916
4917 if [ ! -e "$logfile" ] ; then
4918 (
4919 printf "timestamp,"
4920 for f in $files; do
4921 printf "%s," $f
4922 done
4923 echo
4924 ) > "$logfile"
4925 fi
4926
4927 log_battery() {
4928 # Print complete message in one echo call, to avoid race condition
4929 # when several log processes run in parallel.
4930 msg=$(printf "%s," $(date +%s); \
4931 for f in $files; do \
4932 printf "%s," $(cat $f); \
4933 done)
4934 echo "$msg"
4935 }
4936
4937 cd /sys/class/power_supply
4938
4939 for bat in BAT*; do
4940 (cd $bat && log_battery >> "$logfile")
4941 done
4942 </pre>
4943
4944 <p>The script is called when the power management system detect a
4945 change in the power status (power plug in or out), and when going into
4946 and out of hibernation and suspend. In addition, it collect a value
4947 every 10 minutes. This make it possible for me know when the battery
4948 is discharging, charging and how the maximum charge change over time.
4949 The code for the Debian package
4950 <a href="https://github.com/petterreinholdtsen/battery-status">is now
4951 available on github</a>.</p>
4952
4953 <p>The collected log file look like this:</p>
4954
4955 <pre>
4956 timestamp,manufacturer,model_name,technology,serial_number,energy_full,energy_full_design,energy_now,cycle_count,status,
4957 1376591133,LGC,45N1025,Li-ion,974,62800000,62160000,39050000,0,Discharging,
4958 [...]
4959 1443090528,LGC,45N1025,Li-ion,974,4900000,62160000,4900000,0,Full,
4960 1443090601,LGC,45N1025,Li-ion,974,4900000,62160000,4900000,0,Full,
4961 </pre>
4962
4963 <p>I wrote a small script to create a graph of the charge development
4964 over time. This graph depicted above show the slow death of my laptop
4965 battery.</p>
4966
4967 <p>But why is this happening? Why are my laptop batteries always
4968 dying in a year or two, while the batteries of space probes and
4969 satellites keep working year after year. If we are to believe
4970 <a href="http://batteryuniversity.com/learn/article/how_to_prolong_lithium_based_batteries">Battery
4971 University</a>, the cause is me charging the battery whenever I have a
4972 chance, and the fix is to not charge the Lithium-ion batteries to 100%
4973 all the time, but to stay below 90% of full charge most of the time.
4974 I've been told that the Tesla electric cars
4975 <a href="http://my.teslamotors.com/de_CH/forum/forums/battery-charge-limit">limit
4976 the charge of their batteries to 80%</a>, with the option to charge to
4977 100% when preparing for a longer trip (not that I would want a car
4978 like Tesla where rights to privacy is abandoned, but that is another
4979 story), which I guess is the option we should have for laptops on
4980 Linux too.</p>
4981
4982 <p>Is there a good and generic way with Linux to tell the battery to
4983 stop charging at 80%, unless requested to charge to 100% once in
4984 preparation for a longer trip? I found
4985 <a href="http://askubuntu.com/questions/34452/how-can-i-limit-battery-charging-to-80-capacity">one
4986 recipe on askubuntu for Ubuntu to limit charging on Thinkpad to
4987 80%</a>, but could not get it to work (kernel module refused to
4988 load).</p>
4989
4990 <p>I wonder why the battery capacity was reported to be more than 100%
4991 at the start. I also wonder why the "full capacity" increases some
4992 times, and if it is possible to repeat the process to get the battery
4993 back to design capacity. And I wonder if the discharge and charge
4994 speed change over time, or if this stay the same. I did not yet try
4995 to write a tool to calculate the derivative values of the battery
4996 level, but suspect some interesting insights might be learned from
4997 those.</p>
4998
4999 <p>Update 2015-09-24: I got a tip to install the packages
5000 acpi-call-dkms and tlp (unfortunately missing in Debian stable)
5001 packages instead of the tp-smapi-dkms package I had tried to use
5002 initially, and use 'tlp setcharge 40 80' to change when charging start
5003 and stop. I've done so now, but expect my existing battery is toast
5004 and need to be replaced. The proposal is unfortunately Thinkpad
5005 specific.</p>
5006
5007 </div>
5008 <div class="tags">
5009
5010
5011 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
5012
5013
5014 </div>
5015 </div>
5016 <div class="padding"></div>
5017
5018 <div class="entry">
5019 <div class="title">
5020 <a href="http://people.skolelinux.org/pere/blog/New_laptop___some_more_clues_and_ideas_based_on_feedback.html">New laptop - some more clues and ideas based on feedback</a>
5021 </div>
5022 <div class="date">
5023 5th July 2015
5024 </div>
5025 <div class="body">
5026 <p>Several people contacted me after my previous blog post about my
5027 need for a new laptop, and provided very useful feedback. I wish to
5028 thank every one of these. Several pointed me to the possibility of
5029 fixing my X230, and I am already in the process of getting Lenovo to
5030 do so thanks to the on site, next day support contract covering the
5031 machine. But the battery is almost useless (I expect to replace it
5032 with a non-official battery) and I do not expect the machine to live
5033 for many more years, so it is time to plan its replacement. If I did
5034 not have a support contract, it was suggested to find replacement parts
5035 using <a href="http://www.francecrans.com/">FrancEcrans</a>, but it
5036 might present a language barrier as I do not understand French.</p>
5037
5038 <p>One tip I got was to use the
5039 <a href="https://skinflint.co.uk/?cat=nb">Skinflint</a> web service to
5040 compare laptop models. It seem to have more models available than
5041 prisjakt.no. Another tip I got from someone I know have similar
5042 keyboard preferences was that the HP EliteBook 840 keyboard is not
5043 very good, and this matches my experience with earlier EliteBook
5044 keyboards I tested. Because of this, I will not consider it any further.
5045
5046 <p>When I wrote my blog post, I was not aware of Thinkpad X250, the
5047 newest Thinkpad X model. The keyboard reintroduces mouse buttons
5048 (which is missing from the X240), and is working fairly well with
5049 Debian Sid/Unstable according to
5050 <a href="http://www.corsac.net/X250/">Corsac.net</a>. The reports I
5051 got on the keyboard quality are not consistent. Some say the keyboard
5052 is good, others say it is ok, while others say it is not very good.
5053 Those with experience from X41 and and X60 agree that the X250
5054 keyboard is not as good as those trusty old laptops, and suggest I
5055 keep and fix my X230 instead of upgrading, or get a used X230 to
5056 replace it. I'm also told that the X250 lack leds for caps lock, disk
5057 activity and battery status, which is very convenient on my X230. I'm
5058 also told that the CPU fan is running very often, making it a bit
5059 noisy. In any case, the X250 do not work out of the box with Debian
5060 Stable/Jessie, one of my requirements.</p>
5061
5062 <p>I have also gotten a few vendor proposals, one was
5063 <a href="http://pro-star.com">Pro-Star</a>, another was
5064 <a href="http://shop.gluglug.org.uk/product/libreboot-x200/">Libreboot</a>.
5065 The latter look very attractive to me.</p>
5066
5067 <p>Again, thank you all for the very useful feedback. It help a lot
5068 as I keep looking for a replacement.</p>
5069
5070 <p>Update 2015-07-06: I was recommended to check out the
5071 <a href="">lapstore.de</a> web shop for used laptops. They got several
5072 different
5073 <a href="http://www.lapstore.de/f.php/shop/lapstore/f/411/lang/x/kw/Lenovo_ThinkPad_X_Serie/">old
5074 thinkpad X models</a>, and provide one year warranty.</p>
5075
5076 </div>
5077 <div class="tags">
5078
5079
5080 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
5081
5082
5083 </div>
5084 </div>
5085 <div class="padding"></div>
5086
5087 <div class="entry">
5088 <div class="title">
5089 <a href="http://people.skolelinux.org/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>
5090 </div>
5091 <div class="date">
5092 3rd July 2015
5093 </div>
5094 <div class="body">
5095 <p>My primary work horse laptop is failing, and will need a
5096 replacement soon. The left 5 cm of the screen on my Thinkpad X230
5097 started flickering yesterday, and I suspect the cause is a broken
5098 cable, as changing the angle of the screen some times get rid of the
5099 flickering.</p>
5100
5101 <p>My requirements have not really changed since I bought it, and is
5102 still as
5103 <a href="http://people.skolelinux.org/pere/blog/Thank_you_Thinkpad_X41__for_your_long_and_trustworthy_service.html">I
5104 described them in 2013</a>. The last time I bought a laptop, I had
5105 good help from
5106 <a href="http://www.prisjakt.no/category.php?k=353">prisjakt.no</a>
5107 where I could select at least a few of the requirements (mouse pin,
5108 wifi, weight) and go through the rest manually. Three button mouse
5109 and a good keyboard is not available as an option, and all the three
5110 laptop models proposed today (Thinkpad X240, HP EliteBook 820 G1 and
5111 G2) lack three mouse buttons). It is also unclear to me how good the
5112 keyboard on the HP EliteBooks are. I hope Lenovo have not messed up
5113 the keyboard, even if the quality and robustness in the X series have
5114 deteriorated since X41.</p>
5115
5116 <p>I wonder how I can find a sensible laptop when none of the options
5117 seem sensible to me? Are there better services around to search the
5118 set of available laptops for features? Please send me an email if you
5119 have suggestions.</p>
5120
5121 <p>Update 2015-07-23: I got a suggestion to check out the FSF
5122 <a href="http://www.fsf.org/resources/hw/endorsement/respects-your-freedom">list
5123 of endorsed hardware</a>, which is useful background information.</p>
5124
5125 </div>
5126 <div class="tags">
5127
5128
5129 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
5130
5131
5132 </div>
5133 </div>
5134 <div class="padding"></div>
5135
5136 <div class="entry">
5137 <div class="title">
5138 <a href="http://people.skolelinux.org/pere/blog/How_to_stay_with_sysvinit_in_Debian_Jessie.html">How to stay with sysvinit in Debian Jessie</a>
5139 </div>
5140 <div class="date">
5141 22nd November 2014
5142 </div>
5143 <div class="body">
5144 <p>By now, it is well known that Debian Jessie will not be using
5145 sysvinit as its boot system by default. But how can one keep using
5146 sysvinit in Jessie? It is fairly easy, and here are a few recipes,
5147 courtesy of
5148 <a href="http://www.vitavonni.de/blog/201410/2014102101-avoiding-systemd.html">Erich
5149 Schubert</a> and
5150 <a href="http://smcv.pseudorandom.co.uk/2014/still_universal/">Simon
5151 McVittie</a>.
5152
5153 <p>If you already are using Wheezy and want to upgrade to Jessie and
5154 keep sysvinit as your boot system, create a file
5155 <tt>/etc/apt/preferences.d/use-sysvinit</tt> with this content before
5156 you upgrade:</p>
5157
5158 <p><blockquote><pre>
5159 Package: systemd-sysv
5160 Pin: release o=Debian
5161 Pin-Priority: -1
5162 </pre></blockquote><p>
5163
5164 <p>This file content will tell apt and aptitude to not consider
5165 installing systemd-sysv as part of any installation and upgrade
5166 solution when resolving dependencies, and thus tell it to avoid
5167 systemd as a default boot system. The end result should be that the
5168 upgraded system keep using sysvinit.</p>
5169
5170 <p>If you are installing Jessie for the first time, there is no way to
5171 get sysvinit installed by default (debootstrap used by
5172 debian-installer have no option for this), but one can tell the
5173 installer to switch to sysvinit before the first boot. Either by
5174 using a kernel argument to the installer, or by adding a line to the
5175 preseed file used. First, the kernel command line argument:
5176
5177 <p><blockquote><pre>
5178 preseed/late_command="in-target apt-get install --purge -y sysvinit-core"
5179 </pre></blockquote><p>
5180
5181 <p>Next, the line to use in a preseed file:</p>
5182
5183 <p><blockquote><pre>
5184 d-i preseed/late_command string in-target apt-get install -y sysvinit-core
5185 </pre></blockquote><p>
5186
5187 <p>One can of course also do this after the first boot by installing
5188 the sysvinit-core package.</p>
5189
5190 <p>I recommend only using sysvinit if you really need it, as the
5191 sysvinit boot sequence in Debian have several hardware specific bugs
5192 on Linux caused by the fact that it is unpredictable when hardware
5193 devices show up during boot. But on the other hand, the new default
5194 boot system still have a few rough edges I hope will be fixed before
5195 Jessie is released.</p>
5196
5197 <p>Update 2014-11-26: Inspired by
5198 <ahref="https://www.mirbsd.org/permalinks/wlog-10-tg_e20141125-tg.htm#e20141125-tg_wlog-10-tg">a
5199 blog post by Torsten Glaser</a>, added --purge to the preseed
5200 line.</p>
5201
5202 </div>
5203 <div class="tags">
5204
5205
5206 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
5207
5208
5209 </div>
5210 </div>
5211 <div class="padding"></div>
5212
5213 <div class="entry">
5214 <div class="title">
5215 <a href="http://people.skolelinux.org/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>
5216 </div>
5217 <div class="date">
5218 10th November 2014
5219 </div>
5220 <div class="body">
5221 <p>The right to communicate with your friends and family in private,
5222 without anyone snooping, is a right every citicen have in a liberal
5223 democracy. But this right is under serious attack these days.</p>
5224
5225 <p>A while back it occurred to me that one way to make the dragnet
5226 surveillance conducted by NSA, GCHQ, FRA and others (and confirmed by
5227 the whisleblower Snowden) more expensive for Internet email,
5228 is to deliver all email using SMTP via Tor. Such SMTP option would be
5229 a nice addition to the FreedomBox project if we could send email
5230 between FreedomBox machines without leaking metadata about the emails
5231 to the people peeking on the wire. I
5232 <a href="http://lists.alioth.debian.org/pipermail/freedombox-discuss/2014-October/006493.html">proposed
5233 this on the FreedomBox project mailing list in October</a> and got a
5234 lot of useful feedback and suggestions. It also became obvious to me
5235 that this was not a novel idea, as the same idea was tested and
5236 documented by Johannes Berg as early as 2006, and both
5237 <a href="https://github.com/pagekite/Mailpile/wiki/SMTorP">the
5238 Mailpile</a> and <a href="http://dee.su/cables">the Cables</a> systems
5239 propose a similar method / protocol to pass emails between users.</p>
5240
5241 <p>To implement such system one need to set up a Tor hidden service
5242 providing the SMTP protocol on port 25, and use email addresses
5243 looking like username@hidden-service-name.onion. With such addresses
5244 the connections to port 25 on hidden-service-name.onion using Tor will
5245 go to the correct SMTP server. To do this, one need to configure the
5246 Tor daemon to provide the hidden service and the mail server to accept
5247 emails for this .onion domain. To learn more about Exim configuration
5248 in Debian and test the design provided by Johannes Berg in his FAQ, I
5249 set out yesterday to create a Debian package for making it trivial to
5250 set up such SMTP over Tor service based on Debian. Getting it to work
5251 were fairly easy, and
5252 <a href="https://github.com/petterreinholdtsen/exim4-smtorp">the
5253 source code for the Debian package</a> is available from github. I
5254 plan to move it into Debian if further testing prove this to be a
5255 useful approach.</p>
5256
5257 <p>If you want to test this, set up a blank Debian machine without any
5258 mail system installed (or run <tt>apt-get purge exim4-config</tt> to
5259 get rid of exim4). Install tor, clone the git repository mentioned
5260 above, build the deb and install it on the machine. Next, run
5261 <tt>/usr/lib/exim4-smtorp/setup-exim-hidden-service</tt> and follow
5262 the instructions to get the service up and running. Restart tor and
5263 exim when it is done, and test mail delivery using swaks like
5264 this:</p>
5265
5266 <p><blockquote><pre>
5267 torsocks swaks --server dutlqrrmjhtfa3vp.onion \
5268 --to fbx@dutlqrrmjhtfa3vp.onion
5269 </pre></blockquote></p>
5270
5271 <p>This will test the SMTP delivery using tor. Replace the email
5272 address with your own address to test your server. :)</p>
5273
5274 <p>The setup procedure is still to complex, and I hope it can be made
5275 easier and more automatic. Especially the tor setup need more work.
5276 Also, the package include a tor-smtp tool written in C, but its task
5277 should probably be rewritten in some script language to make the deb
5278 architecture independent. It would probably also make the code easier
5279 to review. The tor-smtp tool currently need to listen on a socket for
5280 exim to talk to it and is started using xinetd. It would be better if
5281 no daemon and no socket is needed. I suspect it is possible to get
5282 exim to run a command line tool for delivery instead of talking to a
5283 socket, and hope to figure out how in a future version of this
5284 system.</p>
5285
5286 <p>Until I wipe my test machine, I can be reached using the
5287 <tt>fbx@dutlqrrmjhtfa3vp.onion</tt> mail address, deliverable over
5288 SMTorP. :)</p>
5289
5290 </div>
5291 <div class="tags">
5292
5293
5294 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox</a>, <a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>.
5295
5296
5297 </div>
5298 </div>
5299 <div class="padding"></div>
5300
5301 <div class="entry">
5302 <div class="title">
5303 <a href="http://people.skolelinux.org/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>
5304 </div>
5305 <div class="date">
5306 22nd October 2014
5307 </div>
5308 <div class="body">
5309 <p>If you ever had to moderate a mailman list, like the ones on
5310 alioth.debian.org, you know the web interface is fairly slow to
5311 operate. First you visit one web page, enter the moderation password
5312 and get a new page shown with a list of all the messages to moderate
5313 and various options for each email address. This take a while for
5314 every list you moderate, and you need to do it regularly to do a good
5315 job as a list moderator. But there is a quick alternative,
5316 <a href="http://heim.ifi.uio.no/kjetilho/hacks/#listadmin">the
5317 listadmin program</a>. It allow you to check lists for new messages
5318 to moderate in a fraction of a second. Here is a test run on two
5319 lists I recently took over:</p>
5320
5321 <p><blockquote><pre>
5322 % time listadmin xiph
5323 fetching data for pkg-xiph-commits@lists.alioth.debian.org ... nothing in queue
5324 fetching data for pkg-xiph-maint@lists.alioth.debian.org ... nothing in queue
5325
5326 real 0m1.709s
5327 user 0m0.232s
5328 sys 0m0.012s
5329 %
5330 </pre></blockquote></p>
5331
5332 <p>In 1.7 seconds I had checked two mailing lists and confirmed that
5333 there are no message in the moderation queue. Every morning I
5334 currently moderate 68 mailman lists, and it normally take around two
5335 minutes. When I took over the two pkg-xiph lists above a few days
5336 ago, there were 400 emails waiting in the moderator queue. It took me
5337 less than 15 minutes to process them all using the listadmin
5338 program.</p>
5339
5340 <p>If you install
5341 <a href="https://tracker.debian.org/pkg/listadmin">the listadmin
5342 package</a> from Debian and create a file <tt>~/.listadmin.ini</tt>
5343 with content like this, the moderation task is a breeze:</p>
5344
5345 <p><blockquote><pre>
5346 username username@example.org
5347 spamlevel 23
5348 default discard
5349 discard_if_reason "Posting restricted to members only. Remove us from your mail list."
5350
5351 password secret
5352 adminurl https://{domain}/mailman/admindb/{list}
5353 mailman-list@lists.example.com
5354
5355 password hidden
5356 other-list@otherserver.example.org
5357 </pre></blockquote></p>
5358
5359 <p>There are other options to set as well. Check the manual page to
5360 learn the details.</p>
5361
5362 <p>If you are forced to moderate lists on a mailman installation where
5363 the SSL certificate is self signed or not properly signed by a
5364 generally accepted signing authority, you can set a environment
5365 variable when calling listadmin to disable SSL verification:</p>
5366
5367 <p><blockquote><pre>
5368 PERL_LWP_SSL_VERIFY_HOSTNAME=0 listadmin
5369 </pre></blockquote></p>
5370
5371 <p>If you want to moderate a subset of the lists you take care of, you
5372 can provide an argument to the listadmin script like I do in the
5373 initial screen dump (the xiph argument). Using an argument, only
5374 lists matching the argument string will be processed. This make it
5375 quick to accept messages if you notice the moderation request in your
5376 email.</p>
5377
5378 <p>Without the listadmin program, I would never be the moderator of 68
5379 mailing lists, as I simply do not have time to spend on that if the
5380 process was any slower. The listadmin program have saved me hours of
5381 time I could spend elsewhere over the years. It truly is nice free
5382 software.</p>
5383
5384 <p>As usual, if you use Bitcoin and want to show your support of my
5385 activities, please send Bitcoin donations to my address
5386 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
5387
5388 <p>Update 2014-10-27: Added missing 'username' statement in
5389 configuration example. Also, I've been told that the
5390 PERL_LWP_SSL_VERIFY_HOSTNAME=0 setting do not work for everyone. Not
5391 sure why.</p>
5392
5393 </div>
5394 <div class="tags">
5395
5396
5397 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>.
5398
5399
5400 </div>
5401 </div>
5402 <div class="padding"></div>
5403
5404 <div class="entry">
5405 <div class="title">
5406 <a href="http://people.skolelinux.org/pere/blog/Debian_Jessie__PXE_and_automatic_firmware_installation.html">Debian Jessie, PXE and automatic firmware installation</a>
5407 </div>
5408 <div class="date">
5409 17th October 2014
5410 </div>
5411 <div class="body">
5412 <p>When PXE installing laptops with Debian, I often run into the
5413 problem that the WiFi card require some firmware to work properly.
5414 And it has been a pain to fix this using preseeding in Debian.
5415 Normally something more is needed. But thanks to
5416 <a href="https://packages.qa.debian.org/i/isenkram.html">my isenkram
5417 package</a> and its recent tasksel extension, it has now become easy
5418 to do this using simple preseeding.</p>
5419
5420 <p>The isenkram-cli package provide tasksel tasks which will install
5421 firmware for the hardware found in the machine (actually, requested by
5422 the kernel modules for the hardware). (It can also install user space
5423 programs supporting the hardware detected, but that is not the focus
5424 of this story.)</p>
5425
5426 <p>To get this working in the default installation, two preeseding
5427 values are needed. First, the isenkram-cli package must be installed
5428 into the target chroot (aka the hard drive) before tasksel is executed
5429 in the pkgsel step of the debian-installer system. This is done by
5430 preseeding the base-installer/includes debconf value to include the
5431 isenkram-cli package. The package name is next passed to debootstrap
5432 for installation. With the isenkram-cli package in place, tasksel
5433 will automatically use the isenkram tasks to detect hardware specific
5434 packages for the machine being installed and install them, because
5435 isenkram-cli contain tasksel tasks.</p>
5436
5437 <p>Second, one need to enable the non-free APT repository, because
5438 most firmware unfortunately is non-free. This is done by preseeding
5439 the apt-mirror-setup step. This is unfortunate, but for a lot of
5440 hardware it is the only option in Debian.</p>
5441
5442 <p>The end result is two lines needed in your preseeding file to get
5443 firmware installed automatically by the installer:</p>
5444
5445 <p><blockquote><pre>
5446 base-installer base-installer/includes string isenkram-cli
5447 apt-mirror-setup apt-setup/non-free boolean true
5448 </pre></blockquote></p>
5449
5450 <p>The current version of isenkram-cli in testing/jessie will install
5451 both firmware and user space packages when using this method. It also
5452 do not work well, so use version 0.15 or later. Installing both
5453 firmware and user space packages might give you a bit more than you
5454 want, so I decided to split the tasksel task in two, one for firmware
5455 and one for user space programs. The firmware task is enabled by
5456 default, while the one for user space programs is not. This split is
5457 implemented in the package currently in unstable.</p>
5458
5459 <p>If you decide to give this a go, please let me know (via email) how
5460 this recipe work for you. :)</p>
5461
5462 <p>So, I bet you are wondering, how can this work. First and
5463 foremost, it work because tasksel is modular, and driven by whatever
5464 files it find in /usr/lib/tasksel/ and /usr/share/tasksel/. So the
5465 isenkram-cli package place two files for tasksel to find. First there
5466 is the task description file (/usr/share/tasksel/descs/isenkram.desc):</p>
5467
5468 <p><blockquote><pre>
5469 Task: isenkram-packages
5470 Section: hardware
5471 Description: Hardware specific packages (autodetected by isenkram)
5472 Based on the detected hardware various hardware specific packages are
5473 proposed.
5474 Test-new-install: show show
5475 Relevance: 8
5476 Packages: for-current-hardware
5477
5478 Task: isenkram-firmware
5479 Section: hardware
5480 Description: Hardware specific firmware packages (autodetected by isenkram)
5481 Based on the detected hardware various hardware specific firmware
5482 packages are proposed.
5483 Test-new-install: mark show
5484 Relevance: 8
5485 Packages: for-current-hardware-firmware
5486 </pre></blockquote></p>
5487
5488 <p>The key parts are Test-new-install which indicate how the task
5489 should be handled and the Packages line referencing to a script in
5490 /usr/lib/tasksel/packages/. The scripts use other scripts to get a
5491 list of packages to install. The for-current-hardware-firmware script
5492 look like this to list relevant firmware for the machine:
5493
5494 <p><blockquote><pre>
5495 #!/bin/sh
5496 #
5497 PATH=/usr/sbin:$PATH
5498 export PATH
5499 isenkram-autoinstall-firmware -l
5500 </pre></blockquote></p>
5501
5502 <p>With those two pieces in place, the firmware is installed by
5503 tasksel during the normal d-i run. :)</p>
5504
5505 <p>If you want to test what tasksel will install when isenkram-cli is
5506 installed, run <tt>DEBIAN_PRIORITY=critical tasksel --test
5507 --new-install</tt> to get the list of packages that tasksel would
5508 install.</p>
5509
5510 <p><a href="https://wiki.debian.org/DebianEdu/">Debian Edu</a> will be
5511 pilots in testing this feature, as isenkram is used there now to
5512 install firmware, replacing the earlier scripts.</p>
5513
5514 </div>
5515 <div class="tags">
5516
5517
5518 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin</a>.
5519
5520
5521 </div>
5522 </div>
5523 <div class="padding"></div>
5524
5525 <div class="entry">
5526 <div class="title">
5527 <a href="http://people.skolelinux.org/pere/blog/Ubuntu_used_to_show_the_bread_prizes_at_ICA_Storo.html">Ubuntu used to show the bread prizes at ICA Storo</a>
5528 </div>
5529 <div class="date">
5530 4th October 2014
5531 </div>
5532 <div class="body">
5533 <p>Today I came across an unexpected Ubuntu boot screen. Above the
5534 bread shelf on the ICA shop at Storo in Oslo, the grub menu of Ubuntu
5535 with Linux kernel 3.2.0-23 (ie probably version 12.04 LTS) was stuck
5536 on a screen normally showing the bread types and prizes:</p>
5537
5538 <p align="center"><img width="70%" src="http://people.skolelinux.org/pere/blog/images/2014-10-04-ubuntu-ica-storo-crop.jpeg"></p>
5539
5540 <p>If it had booted as it was supposed to, I would never had known
5541 about this hidden Linux installation. It is interesting what
5542 <a href="http://revealingerrors.com/">errors can reveal</a>.</p>
5543
5544 </div>
5545 <div class="tags">
5546
5547
5548 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
5549
5550
5551 </div>
5552 </div>
5553 <div class="padding"></div>
5554
5555 <div class="entry">
5556 <div class="title">
5557 <a href="http://people.skolelinux.org/pere/blog/New_lsdvd_release_version_0_17_is_ready.html">New lsdvd release version 0.17 is ready</a>
5558 </div>
5559 <div class="date">
5560 4th October 2014
5561 </div>
5562 <div class="body">
5563 <p>The <a href="https://sourceforge.net/p/lsdvd/">lsdvd project</a>
5564 got a new set of developers a few weeks ago, after the original
5565 developer decided to step down and pass the project to fresh blood.
5566 This project is now maintained by Petter Reinholdtsen and Steve
5567 Dibb.</p>
5568
5569 <p>I just wrapped up
5570 <a href="https://sourceforge.net/p/lsdvd/mailman/message/32896061/">a
5571 new lsdvd release</a>, available in git or from
5572 <a href="https://sourceforge.net/projects/lsdvd/files/lsdvd/">the
5573 download page</a>. This is the changelog dated 2014-10-03 for version
5574 0.17.</p>
5575
5576 <ul>
5577
5578 <li>Ignore 'phantom' audio, subtitle tracks</li>
5579 <li>Check for garbage in the program chains, which indicate that a track is
5580 non-existant, to work around additional copy protection</li>
5581 <li>Fix displaying content type for audio tracks, subtitles</li>
5582 <li>Fix pallete display of first entry</li>
5583 <li>Fix include orders</li>
5584 <li>Ignore read errors in titles that would not be displayed anyway</li>
5585 <li>Fix the chapter count</li>
5586 <li>Make sure the array size and the array limit used when initialising
5587 the palette size is the same.</li>
5588 <li>Fix array printing.</li>
5589 <li>Correct subsecond calculations.</li>
5590 <li>Add sector information to the output format.</li>
5591 <li>Clean up code to be closer to ANSI C and compile without warnings
5592 with more GCC compiler warnings.</li>
5593
5594 </ul>
5595
5596 <p>This change bring together patches for lsdvd in use in various
5597 Linux and Unix distributions, as well as patches submitted to the
5598 project the last nine years. Please check it out. :)</p>
5599
5600 </div>
5601 <div class="tags">
5602
5603
5604 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>.
5605
5606
5607 </div>
5608 </div>
5609 <div class="padding"></div>
5610
5611 <div class="entry">
5612 <div class="title">
5613 <a href="http://people.skolelinux.org/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>
5614 </div>
5615 <div class="date">
5616 26th September 2014
5617 </div>
5618 <div class="body">
5619 <p>The <a href="http://www.skolelinux.org/">Debian Edu / Skolelinux
5620 project</a> provide a Linux solution for schools, including a
5621 powerful desktop with education software, a central server providing
5622 web pages, user database, user home directories, central login and PXE
5623 boot of both clients without disk and the installation to install Debian
5624 Edu on machines with disk (and a few other services perhaps to small
5625 to mention here). We in the Debian Edu team are currently working on
5626 the Jessie based version, trying to get everything in shape before the
5627 freeze, to avoid having to maintain our own package repository in the
5628 future. The
5629 <a href="https://wiki.debian.org/DebianEdu/Status/Jessie">current
5630 status</a> can be seen on the Debian wiki, and there is still heaps of
5631 work left. Some fatal problems block testing, breaking the installer,
5632 but it is possible to work around these to get anyway. Here is a
5633 recipe on how to get the installation limping along.</p>
5634
5635 <p>First, download the test ISO via
5636 <a href="ftp://ftp.skolelinux.no/cd-edu-testing-nolocal-netinst/debian-edu-amd64-i386-NETINST-1.iso">ftp</a>,
5637 <a href="http://ftp.skolelinux.no/cd-edu-testing-nolocal-netinst/debian-edu-amd64-i386-NETINST-1.iso">http</a>
5638 or rsync (use
5639 ftp.skolelinux.org::cd-edu-testing-nolocal-netinst/debian-edu-amd64-i386-NETINST-1.iso).
5640 The ISO build was broken on Tuesday, so we do not get a new ISO every
5641 12 hours or so, but thankfully the ISO we already got we are able to
5642 install with some tweaking.</p>
5643
5644 <p>When you get to the Debian Edu profile question, go to tty2
5645 (use Alt-Ctrl-F2), run</p>
5646
5647 <p><blockquote><pre>
5648 nano /usr/bin/edu-eatmydata-install
5649 </pre></blockquote></p>
5650
5651 <p>and add 'exit 0' as the second line, disabling the eatmydata
5652 optimization. Return to the installation, select the profile you want
5653 and continue. Without this change, exim4-config will fail to install
5654 due to a known bug in eatmydata.</p>
5655
5656 <p>When you get the grub question at the end, answer /dev/sda (or if
5657 this do not work, figure out what your correct value would be. All my
5658 test machines need /dev/sda, so I have no advice if it do not fit
5659 your need.</p>
5660
5661 <p>If you installed a profile including a graphical desktop, log in as
5662 root after the initial boot from hard drive, and install the
5663 education-desktop-XXX metapackage. XXX can be kde, gnome, lxde, xfce
5664 or mate. If you want several desktop options, install more than one
5665 metapackage. Once this is done, reboot and you should have a working
5666 graphical login screen. This workaround should no longer be needed
5667 once the education-tasks package version 1.801 enter testing in two
5668 days.</p>
5669
5670 <p>I believe the ISO build will start working on two days when the new
5671 tasksel package enter testing and Steve McIntyre get a chance to
5672 update the debian-cd git repository. The eatmydata, grub and desktop
5673 issues are already fixed in unstable and testing, and should show up
5674 on the ISO as soon as the ISO build start working again. Well the
5675 eatmydata optimization is really just disabled. The proper fix
5676 require an upload by the eatmydata maintainer applying the patch
5677 provided in bug <a href="https://bugs.debian.org/702711">#702711</a>.
5678 The rest have proper fixes in unstable.</p>
5679
5680 <p>I hope this get you going with the installation testing, as we are
5681 quickly running out of time trying to get our Jessie based
5682 installation ready before the distribution freeze in a month.</p>
5683
5684 </div>
5685 <div class="tags">
5686
5687
5688 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
5689
5690
5691 </div>
5692 </div>
5693 <div class="padding"></div>
5694
5695 <div class="entry">
5696 <div class="title">
5697 <a href="http://people.skolelinux.org/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>
5698 </div>
5699 <div class="date">
5700 25th September 2014
5701 </div>
5702 <div class="body">
5703 <p>I use the <a href="https://sourceforge.net/p/lsdvd/">lsdvd tool</a>
5704 to handle my fairly large DVD collection. It is a nice command line
5705 tool to get details about a DVD, like title, tracks, track length,
5706 etc, in XML, Perl or human readable format. But lsdvd have not seen
5707 any new development since 2006 and had a few irritating bugs affecting
5708 its use with some DVDs. Upstream seemed to be dead, and in January I
5709 sent a small probe asking for a version control repository for the
5710 project, without any reply. But I use it regularly and would like to
5711 get <a href="https://packages.qa.debian.org/lsdvd">an updated version
5712 into Debian</a>. So two weeks ago I tried harder to get in touch with
5713 the project admin, and after getting a reply from him explaining that
5714 he was no longer interested in the project, I asked if I could take
5715 over. And yesterday, I became project admin.</p>
5716
5717 <p>I've been in touch with a Gentoo developer and the Debian
5718 maintainer interested in joining forces to maintain the upstream
5719 project, and I hope we can get a new release out fairly quickly,
5720 collecting the patches spread around on the internet into on place.
5721 I've added the relevant Debian patches to the freshly created git
5722 repository, and expect the Gentoo patches to make it too. If you got
5723 a DVD collection and care about command line tools, check out
5724 <a href="https://sourceforge.net/p/lsdvd/git/ci/master/tree/">the git source</a> and join
5725 <a href="https://sourceforge.net/p/lsdvd/mailman/">the project mailing
5726 list</a>. :)</p>
5727
5728 </div>
5729 <div class="tags">
5730
5731
5732 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>.
5733
5734
5735 </div>
5736 </div>
5737 <div class="padding"></div>
5738
5739 <div class="entry">
5740 <div class="title">
5741 <a href="http://people.skolelinux.org/pere/blog/Speeding_up_the_Debian_installer_using_eatmydata_and_dpkg_divert.html">Speeding up the Debian installer using eatmydata and dpkg-divert</a>
5742 </div>
5743 <div class="date">
5744 16th September 2014
5745 </div>
5746 <div class="body">
5747 <p>The <a href="https://www.debian.org/">Debian</a> installer could be
5748 a lot quicker. When we install more than 2000 packages in
5749 <a href="http://www.skolelinux.org/">Skolelinux / Debian Edu</a> using
5750 tasksel in the installer, unpacking the binary packages take forever.
5751 A part of the slow I/O issue was discussed in
5752 <a href="https://bugs.debian.org/613428">bug #613428</a> about too
5753 much file system sync-ing done by dpkg, which is the package
5754 responsible for unpacking the binary packages. Other parts (like code
5755 executed by postinst scripts) might also sync to disk during
5756 installation. All this sync-ing to disk do not really make sense to
5757 me. If the machine crash half-way through, I start over, I do not try
5758 to salvage the half installed system. So the failure sync-ing is
5759 supposed to protect against, hardware or system crash, is not really
5760 relevant while the installer is running.</p>
5761
5762 <p>A few days ago, I thought of a way to get rid of all the file
5763 system sync()-ing in a fairly non-intrusive way, without the need to
5764 change the code in several packages. The idea is not new, but I have
5765 not heard anyone propose the approach using dpkg-divert before. It
5766 depend on the small and clever package
5767 <a href="https://packages.qa.debian.org/eatmydata">eatmydata</a>, which
5768 uses LD_PRELOAD to replace the system functions for syncing data to
5769 disk with functions doing nothing, thus allowing programs to live
5770 dangerous while speeding up disk I/O significantly. Instead of
5771 modifying the implementation of dpkg, apt and tasksel (which are the
5772 packages responsible for selecting, fetching and installing packages),
5773 it occurred to me that we could just divert the programs away, replace
5774 them with a simple shell wrapper calling
5775 "eatmydata&nbsp;$program&nbsp;$@", to get the same effect.
5776 Two days ago I decided to test the idea, and wrapped up a simple
5777 implementation for the Debian Edu udeb.</p>
5778
5779 <p>The effect was stunning. In my first test it reduced the running
5780 time of the pkgsel step (installing tasks) from 64 to less than 44
5781 minutes (20 minutes shaved off the installation) on an old Dell
5782 Latitude D505 machine. I am not quite sure what the optimised time
5783 would have been, as I messed up the testing a bit, causing the debconf
5784 priority to get low enough for two questions to pop up during
5785 installation. As soon as I saw the questions I moved the installation
5786 along, but do not know how long the question were holding up the
5787 installation. I did some more measurements using Debian Edu Jessie,
5788 and got these results. The time measured is the time stamp in
5789 /var/log/syslog between the "pkgsel: starting tasksel" and the
5790 "pkgsel: finishing up" lines, if you want to do the same measurement
5791 yourself. In Debian Edu, the tasksel dialog do not show up, and the
5792 timing thus do not depend on how quickly the user handle the tasksel
5793 dialog.</p>
5794
5795 <p><table>
5796
5797 <tr>
5798 <th>Machine/setup</th>
5799 <th>Original tasksel</th>
5800 <th>Optimised tasksel</th>
5801 <th>Reduction</th>
5802 </tr>
5803
5804 <tr>
5805 <td>Latitude D505 Main+LTSP LXDE</td>
5806 <td>64 min (07:46-08:50)</td>
5807 <td><44 min (11:27-12:11)</td>
5808 <td>>20 min 18%</td>
5809 </tr>
5810
5811 <tr>
5812 <td>Latitude D505 Roaming LXDE</td>
5813 <td>57 min (08:48-09:45)</td>
5814 <td>34 min (07:43-08:17)</td>
5815 <td>23 min 40%</td>
5816 </tr>
5817
5818 <tr>
5819 <td>Latitude D505 Minimal</td>
5820 <td>22 min (10:37-10:59)</td>
5821 <td>11 min (11:16-11:27)</td>
5822 <td>11 min 50%</td>
5823 </tr>
5824
5825 <tr>
5826 <td>Thinkpad X200 Minimal</td>
5827 <td>6 min (08:19-08:25)</td>
5828 <td>4 min (08:04-08:08)</td>
5829 <td>2 min 33%</td>
5830 </tr>
5831
5832 <tr>
5833 <td>Thinkpad X200 Roaming KDE</td>
5834 <td>19 min (09:21-09:40)</td>
5835 <td>15 min (10:25-10:40)</td>
5836 <td>4 min 21%</td>
5837 </tr>
5838
5839 </table></p>
5840
5841 <p>The test is done using a netinst ISO on a USB stick, so some of the
5842 time is spent downloading packages. The connection to the Internet
5843 was 100Mbit/s during testing, so downloading should not be a
5844 significant factor in the measurement. Download typically took a few
5845 seconds to a few minutes, depending on the amount of packages being
5846 installed.</p>
5847
5848 <p>The speedup is implemented by using two hooks in
5849 <a href="https://www.debian.org/devel/debian-installer/">Debian
5850 Installer</a>, the pre-pkgsel.d hook to set up the diverts, and the
5851 finish-install.d hook to remove the divert at the end of the
5852 installation. I picked the pre-pkgsel.d hook instead of the
5853 post-base-installer.d hook because I test using an ISO without the
5854 eatmydata package included, and the post-base-installer.d hook in
5855 Debian Edu can only operate on packages included in the ISO. The
5856 negative effect of this is that I am unable to activate this
5857 optimization for the kernel installation step in d-i. If the code is
5858 moved to the post-base-installer.d hook, the speedup would be larger
5859 for the entire installation.</p>
5860
5861 <p>I've implemented this in the
5862 <a href="https://packages.qa.debian.org/debian-edu-install">debian-edu-install</a>
5863 git repository, and plan to provide the optimization as part of the
5864 Debian Edu installation. If you want to test this yourself, you can
5865 create two files in the installer (or in an udeb). One shell script
5866 need do go into /usr/lib/pre-pkgsel.d/, with content like this:</p>
5867
5868 <p><blockquote><pre>
5869 #!/bin/sh
5870 set -e
5871 . /usr/share/debconf/confmodule
5872 info() {
5873 logger -t my-pkgsel "info: $*"
5874 }
5875 error() {
5876 logger -t my-pkgsel "error: $*"
5877 }
5878 override_install() {
5879 apt-install eatmydata || true
5880 if [ -x /target/usr/bin/eatmydata ] ; then
5881 for bin in dpkg apt-get aptitude tasksel ; do
5882 file=/usr/bin/$bin
5883 # Test that the file exist and have not been diverted already.
5884 if [ -f /target$file ] ; then
5885 info "diverting $file using eatmydata"
5886 printf "#!/bin/sh\neatmydata $bin.distrib \"\$@\"\n" \
5887 > /target$file.edu
5888 chmod 755 /target$file.edu
5889 in-target dpkg-divert --package debian-edu-config \
5890 --rename --quiet --add $file
5891 ln -sf ./$bin.edu /target$file
5892 else
5893 error "unable to divert $file, as it is missing."
5894 fi
5895 done
5896 else
5897 error "unable to find /usr/bin/eatmydata after installing the eatmydata pacage"
5898 fi
5899 }
5900
5901 override_install
5902 </pre></blockquote></p>
5903
5904 <p>To clean up, another shell script should go into
5905 /usr/lib/finish-install.d/ with code like this:
5906
5907 <p><blockquote><pre>
5908 #! /bin/sh -e
5909 . /usr/share/debconf/confmodule
5910 error() {
5911 logger -t my-finish-install "error: $@"
5912 }
5913 remove_install_override() {
5914 for bin in dpkg apt-get aptitude tasksel ; do
5915 file=/usr/bin/$bin
5916 if [ -x /target$file.edu ] ; then
5917 rm /target$file
5918 in-target dpkg-divert --package debian-edu-config \
5919 --rename --quiet --remove $file
5920 rm /target$file.edu
5921 else
5922 error "Missing divert for $file."
5923 fi
5924 done
5925 sync # Flush file buffers before continuing
5926 }
5927
5928 remove_install_override
5929 </pre></blockquote></p>
5930
5931 <p>In Debian Edu, I placed both code fragments in a separate script
5932 edu-eatmydata-install and call it from the pre-pkgsel.d and
5933 finish-install.d scripts.</p>
5934
5935 <p>By now you might ask if this change should get into the normal
5936 Debian installer too? I suspect it should, but am not sure the
5937 current debian-installer coordinators find it useful enough. It also
5938 depend on the side effects of the change. I'm not aware of any, but I
5939 guess we will see if the change is safe after some more testing.
5940 Perhaps there is some package in Debian depending on sync() and
5941 fsync() having effect? Perhaps it should go into its own udeb, to
5942 allow those of us wanting to enable it to do so without affecting
5943 everyone.</p>
5944
5945 <p>Update 2014-09-24: Since a few days ago, enabling this optimization
5946 will break installation of all programs using gnutls because of
5947 <a href="https://bugs.debian.org/702711">bug #702711</a>. An updated
5948 eatmydata package in Debian will solve it.</p>
5949
5950 <p>Update 2014-10-17: The bug mentioned above is fixed in testing and
5951 the optimization work again. And I have discovered that the
5952 dpkg-divert trick is not really needed and implemented a slightly
5953 simpler approach as part of the debian-edu-install package. See
5954 tools/edu-eatmydata-install in the source package.</p>
5955
5956 <p>Update 2014-11-11: Unfortunately, a new
5957 <a href="http://bugs.debian.org/765738">bug #765738</a> in eatmydata only
5958 triggering on i386 made it into testing, and broke this installation
5959 optimization again. If <a href="http://bugs.debian.org/768893">unblock
5960 request 768893</a> is accepted, it should be working again.</p>
5961
5962 </div>
5963 <div class="tags">
5964
5965
5966 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
5967
5968
5969 </div>
5970 </div>
5971 <div class="padding"></div>
5972
5973 <div class="entry">
5974 <div class="title">
5975 <a href="http://people.skolelinux.org/pere/blog/Good_bye_subkeys_pgp_net__welcome_pool_sks_keyservers_net.html">Good bye subkeys.pgp.net, welcome pool.sks-keyservers.net</a>
5976 </div>
5977 <div class="date">
5978 10th September 2014
5979 </div>
5980 <div class="body">
5981 <p>Yesterday, I had the pleasure of attending a talk with the
5982 <a href="http://www.nuug.no/">Norwegian Unix User Group</a> about
5983 <a href="http://www.nuug.no/aktiviteter/20140909-sks-keyservers/">the
5984 OpenPGP keyserver pool sks-keyservers.net</a>, and was very happy to
5985 learn that there is a large set of publicly available key servers to
5986 use when looking for peoples public key. So far I have used
5987 subkeys.pgp.net, and some times wwwkeys.nl.pgp.net when the former
5988 were misbehaving, but those days are ended. The servers I have used
5989 up until yesterday have been slow and some times unavailable. I hope
5990 those problems are gone now.</p>
5991
5992 <p>Behind the round robin DNS entry of the
5993 <a href="https://sks-keyservers.net/">sks-keyservers.net</a> service
5994 there is a pool of more than 100 keyservers which are checked every
5995 day to ensure they are well connected and up to date. It must be
5996 better than what I have used so far. :)</p>
5997
5998 <p>Yesterdays speaker told me that the service is the default
5999 keyserver provided by the default configuration in GnuPG, but this do
6000 not seem to be used in Debian. Perhaps it should?</p>
6001
6002 <p>Anyway, I've updated my ~/.gnupg/options file to now include this
6003 line:</p>
6004
6005 <p><blockquote><pre>
6006 keyserver pool.sks-keyservers.net
6007 </pre></blockquote></p>
6008
6009 <p>With GnuPG version 2 one can also locate the keyserver using SRV
6010 entries in DNS. Just for fun, I did just that at work, so now every
6011 user of GnuPG at the University of Oslo should find a OpenGPG
6012 keyserver automatically should their need it:</p>
6013
6014 <p><blockquote><pre>
6015 % host -t srv _pgpkey-http._tcp.uio.no
6016 _pgpkey-http._tcp.uio.no has SRV record 0 100 11371 pool.sks-keyservers.net.
6017 %
6018 </pre></blockquote></p>
6019
6020 <p>Now if only
6021 <a href="http://ietfreport.isoc.org/idref/draft-shaw-openpgp-hkp/">the
6022 HKP lookup protocol</a> supported finding signature paths, I would be
6023 very happy. It can look up a given key or search for a user ID, but I
6024 normally do not want that, but to find a trust path from my key to
6025 another key. Given a user ID or key ID, I would like to find (and
6026 download) the keys representing a signature path from my key to the
6027 key in question, to be able to get a trust path between the two keys.
6028 This is as far as I can tell not possible today. Perhaps something
6029 for a future version of the protocol?</p>
6030
6031 </div>
6032 <div class="tags">
6033
6034
6035 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
6036
6037
6038 </div>
6039 </div>
6040 <div class="padding"></div>
6041
6042 <div class="entry">
6043 <div class="title">
6044 <a href="http://people.skolelinux.org/pere/blog/From_English_wiki_to_translated_PDF_and_epub_via_Docbook.html">From English wiki to translated PDF and epub via Docbook</a>
6045 </div>
6046 <div class="date">
6047 17th June 2014
6048 </div>
6049 <div class="body">
6050 <p>The <a href="http://www.skolelinux.org/">Debian Edu / Skolelinux
6051 project</a> provide an instruction manual for teachers, system
6052 administrators and other users that contain useful tips for setting up
6053 and maintaining a Debian Edu installation. This text is about how the
6054 text processing of this manual is handled in the project.</p>
6055
6056 <p>One goal of the project is to provide information in the native
6057 language of its users, and for this we need to handle translations.
6058 But we also want to make sure each language contain the same
6059 information, so for this we need a good way to keep the translations
6060 in sync. And we want it to be easy for our users to improve the
6061 documentation, avoiding the need to learn special formats or tools to
6062 contribute, and the obvious way to do this is to make it possible to
6063 edit the documentation using a web browser. We also want it to be
6064 easy for translators to keep the translation up to date, and give them
6065 help in figuring out what need to be translated. Here is the list of
6066 tools and the process we have found trying to reach all these
6067 goals.</p>
6068
6069 <p>We maintain the authoritative source of our manual in the
6070 <a href="https://wiki.debian.org/DebianEdu/Documentation/Wheezy/">Debian
6071 wiki</a>, as several wiki pages written in English. It consist of one
6072 front page with references to the different chapters, several pages
6073 for each chapter, and finally one "collection page" gluing all the
6074 chapters together into one large web page (aka
6075 <a href="https://wiki.debian.org/DebianEdu/Documentation/Wheezy/AllInOne">the
6076 AllInOne page</a>). The AllInOne page is the one used for further
6077 processing and translations. Thanks to the fact that the
6078 <a href="http://moinmo.in/">MoinMoin</a> installation on
6079 wiki.debian.org support exporting pages in
6080 <a href="http://www.docbook.org/">the Docbook format</a>, we can fetch
6081 the list of pages to export using the raw version of the AllInOne
6082 page, loop over each of them to generate a Docbook XML version of the
6083 manual. This process also download images and transform image
6084 references to use the locally downloaded images. The generated
6085 Docbook XML files are slightly broken, so some post-processing is done
6086 using the <tt>documentation/scripts/get_manual</tt> program, and the
6087 result is a nice Docbook XML file (debian-edu-wheezy-manual.xml) and
6088 a handfull of images. The XML file can now be used to generate PDF, HTML
6089 and epub versions of the English manual. This is the basic step of
6090 our process, making PDF (using dblatex), HTML (using xsltproc) and
6091 epub (using dbtoepub) version from Docbook XML, and the resulting files
6092 are placed in the debian-edu-doc-en binary package.</p>
6093
6094 <p>But English documentation is not enough for us. We want translated
6095 documentation too, and we want to make it easy for translators to
6096 track the English original. For this we use the
6097 <a href="http://packages.qa.debian.org/p/poxml.html">poxml</a> package,
6098 which allow us to transform the English Docbook XML file into a
6099 translation file (a .pot file), usable with the normal gettext based
6100 translation tools used by those translating free software. The pot
6101 file is used to create and maintain translation files (several .po
6102 files), which the translations update with the native language
6103 translations of all titles, paragraphs and blocks of text in the
6104 original. The next step is combining the original English Docbook XML
6105 and the translation file (say debian-edu-wheezy-manual.nb.po), to
6106 create a translated Docbook XML file (in this case
6107 debian-edu-wheezy-manual.nb.xml). This translated (or partly
6108 translated, if the translation is not complete) Docbook XML file can
6109 then be used like the original to create a PDF, HTML and epub version
6110 of the documentation.</p>
6111
6112 <p>The translators use different tools to edit the .po files. We
6113 recommend using
6114 <a href="http://www.kde.org/applications/development/lokalize/">lokalize</a>,
6115 while some use emacs and vi, others can use web based editors like
6116 <a href="http://pootle.translatehouse.org/">Poodle</a> or
6117 <a href="https://www.transifex.com/">Transifex</a>. All we care about
6118 is where the .po file end up, in our git repository. Updated
6119 translations can either be committed directly to git, or submitted as
6120 <a href="https://bugs.debian.org/src:debian-edu-doc">bug reports
6121 against the debian-edu-doc package</a>.</p>
6122
6123 <p>One challenge is images, which both might need to be translated (if
6124 they show translated user applications), and are needed in different
6125 formats when creating PDF and HTML versions (epub is a HTML version in
6126 this regard). For this we transform the original PNG images to the
6127 needed density and format during build, and have a way to provide
6128 translated images by storing translated versions in
6129 images/$LANGUAGECODE/. I am a bit unsure about the details here. The
6130 package maintainers know more.</p>
6131
6132 <p>If you wonder what the result look like, we provide
6133 <a href="http://maintainer.skolelinux.org/debian-edu-doc/">the content
6134 of the documentation packages on the web</a>. See for example the
6135 <a href="http://maintainer.skolelinux.org/debian-edu-doc/it/debian-edu-wheezy-manual.pdf">Italian
6136 PDF version</a> or the
6137 <a href="http://maintainer.skolelinux.org/debian-edu-doc/de/debian-edu-wheezy-manual.html">German
6138 HTML version</a>. We do not yet build the epub version by default,
6139 but perhaps it will be done in the future.</p>
6140
6141 <p>To learn more, check out
6142 <a href="http://packages.qa.debian.org/d/debian-edu-doc.html">the
6143 debian-edu-doc package</a>,
6144 <a href="https://wiki.debian.org/DebianEdu/Documentation/Wheezy/">the
6145 manual on the wiki</a> and
6146 <a href="https://wiki.debian.org/DebianEdu/Documentation/Wheezy/Translations">the
6147 translation instructions</a> in the manual.</p>
6148
6149 </div>
6150 <div class="tags">
6151
6152
6153 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/docbook">docbook</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
6154
6155
6156 </div>
6157 </div>
6158 <div class="padding"></div>
6159
6160 <div class="entry">
6161 <div class="title">
6162 <a href="http://people.skolelinux.org/pere/blog/Install_hardware_dependent_packages_using_tasksel__Isenkram_0_7_.html">Install hardware dependent packages using tasksel (Isenkram 0.7)</a>
6163 </div>
6164 <div class="date">
6165 23rd April 2014
6166 </div>
6167 <div class="body">
6168 <p>It would be nice if it was easier in Debian to get all the hardware
6169 related packages relevant for the computer installed automatically.
6170 So I implemented one, using
6171 <a href="http://packages.qa.debian.org/isenkram">my Isenkram
6172 package</a>. To use it, install the tasksel and isenkram packages and
6173 run tasksel as user root. You should be presented with a new option,
6174 "Hardware specific packages (autodetected by isenkram)". When you
6175 select it, tasksel will install the packages isenkram claim is fit for
6176 the current hardware, hot pluggable or not.<p>
6177
6178 <p>The implementation is in two files, one is the tasksel menu entry
6179 description, and the other is the script used to extract the list of
6180 packages to install. The first part is in
6181 <tt>/usr/share/tasksel/descs/isenkram.desc</tt> and look like
6182 this:</p>
6183
6184 <p><blockquote><pre>
6185 Task: isenkram
6186 Section: hardware
6187 Description: Hardware specific packages (autodetected by isenkram)
6188 Based on the detected hardware various hardware specific packages are
6189 proposed.
6190 Test-new-install: mark show
6191 Relevance: 8
6192 Packages: for-current-hardware
6193 </pre></blockquote></p>
6194
6195 <p>The second part is in
6196 <tt>/usr/lib/tasksel/packages/for-current-hardware</tt> and look like
6197 this:</p>
6198
6199 <p><blockquote><pre>
6200 #!/bin/sh
6201 #
6202 (
6203 isenkram-lookup
6204 isenkram-autoinstall-firmware -l
6205 ) | sort -u
6206 </pre></blockquote></p>
6207
6208 <p>All in all, a very short and simple implementation making it
6209 trivial to install the hardware dependent package we all may want to
6210 have installed on our machines. I've not been able to find a way to
6211 get tasksel to tell you exactly which packages it plan to install
6212 before doing the installation. So if you are curious or careful,
6213 check the output from the isenkram-* command line tools first.</p>
6214
6215 <p>The information about which packages are handling which hardware is
6216 fetched either from the isenkram package itself in
6217 /usr/share/isenkram/, from git.debian.org or from the APT package
6218 database (using the Modaliases header). The APT package database
6219 parsing have caused a nasty resource leak in the isenkram daemon (bugs
6220 <a href="http://bugs.debian.org/719837">#719837</a> and
6221 <a href="http://bugs.debian.org/730704">#730704</a>). The cause is in
6222 the python-apt code (bug
6223 <a href="http://bugs.debian.org/745487">#745487</a>), but using a
6224 workaround I was able to get rid of the file descriptor leak and
6225 reduce the memory leak from ~30 MiB per hardware detection down to
6226 around 2 MiB per hardware detection. It should make the desktop
6227 daemon a lot more useful. The fix is in version 0.7 uploaded to
6228 unstable today.</p>
6229
6230 <p>I believe the current way of mapping hardware to packages in
6231 Isenkram is is a good draft, but in the future I expect isenkram to
6232 use the AppStream data source for this. A proposal for getting proper
6233 AppStream support into Debian is floating around as
6234 <a href="https://wiki.debian.org/DEP-11">DEP-11</a>, and
6235 <a href="https://wiki.debian.org/SummerOfCode2014/Projects#SummerOfCode2014.2FProjects.2FAppStreamDEP11Implementation.AppStream.2FDEP-11_for_the_Debian_Archive">GSoC
6236 project</a> will take place this summer to improve the situation. I
6237 look forward to seeing the result, and welcome patches for isenkram to
6238 start using the information when it is ready.</p>
6239
6240 <p>If you want your package to map to some specific hardware, either
6241 add a "Xb-Modaliases" header to your control file like I did in
6242 <a href="http://packages.qa.debian.org/pymissile">the pymissile
6243 package</a> or submit a bug report with the details to the isenkram
6244 package. See also
6245 <a href="http://people.skolelinux.org/pere/blog/tags/isenkram/">all my
6246 blog posts tagged isenkram</a> for details on the notation. I expect
6247 the information will be migrated to AppStream eventually, but for the
6248 moment I got no better place to store it.</p>
6249
6250 </div>
6251 <div class="tags">
6252
6253
6254 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
6255
6256
6257 </div>
6258 </div>
6259 <div class="padding"></div>
6260
6261 <div class="entry">
6262 <div class="title">
6263 <a href="http://people.skolelinux.org/pere/blog/FreedomBox_milestone___all_packages_now_in_Debian_Sid.html">FreedomBox milestone - all packages now in Debian Sid</a>
6264 </div>
6265 <div class="date">
6266 15th April 2014
6267 </div>
6268 <div class="body">
6269 <p>The <a href="https://wiki.debian.org/FreedomBox">Freedombox
6270 project</a> is working on providing the software and hardware to make
6271 it easy for non-technical people to host their data and communication
6272 at home, and being able to communicate with their friends and family
6273 encrypted and away from prying eyes. It is still going strong, and
6274 today a major mile stone was reached.</p>
6275
6276 <p>Today, the last of the packages currently used by the project to
6277 created the system images were accepted into Debian Unstable. It was
6278 the freedombox-setup package, which is used to configure the images
6279 during build and on the first boot. Now all one need to get going is
6280 the build code from the freedom-maker git repository and packages from
6281 Debian. And once the freedombox-setup package enter testing, we can
6282 build everything directly from Debian. :)</p>
6283
6284 <p>Some key packages used by Freedombox are
6285 <a href="http://packages.qa.debian.org/freedombox-setup">freedombox-setup</a>,
6286 <a href="http://packages.qa.debian.org/plinth">plinth</a>,
6287 <a href="http://packages.qa.debian.org/pagekite">pagekite</a>,
6288 <a href="http://packages.qa.debian.org/tor">tor</a>,
6289 <a href="http://packages.qa.debian.org/privoxy">privoxy</a>,
6290 <a href="http://packages.qa.debian.org/owncloud">owncloud</a> and
6291 <a href="http://packages.qa.debian.org/dnsmasq">dnsmasq</a>. There
6292 are plans to integrate more packages into the setup. User
6293 documentation is maintained on the Debian wiki. Please
6294 <a href="https://wiki.debian.org/FreedomBox/Manual/Jessie">check out
6295 the manual</a> and help us improve it.</p>
6296
6297 <p>To test for yourself and create boot images with the FreedomBox
6298 setup, run this on a Debian machine using a user with sudo rights to
6299 become root:</p>
6300
6301 <p><pre>
6302 sudo apt-get install git vmdebootstrap mercurial python-docutils \
6303 mktorrent extlinux virtualbox qemu-user-static binfmt-support \
6304 u-boot-tools
6305 git clone http://anonscm.debian.org/git/freedombox/freedom-maker.git \
6306 freedom-maker
6307 make -C freedom-maker dreamplug-image raspberry-image virtualbox-image
6308 </pre></p>
6309
6310 <p>Root access is needed to run debootstrap and mount loopback
6311 devices. See the README in the freedom-maker git repo for more
6312 details on the build. If you do not want all three images, trim the
6313 make line. Note that the virtualbox-image target is not really
6314 virtualbox specific. It create a x86 image usable in kvm, qemu,
6315 vmware and any other x86 virtual machine environment. You might need
6316 the version of vmdebootstrap in Jessie to get the build working, as it
6317 include fixes for a race condition with kpartx.</p>
6318
6319 <p>If you instead want to install using a Debian CD and the preseed
6320 method, boot a Debian Wheezy ISO and use this boot argument to load
6321 the preseed values:</p>
6322
6323 <p><pre>
6324 url=<a href="http://www.reinholdtsen.name/freedombox/preseed-jessie.dat">http://www.reinholdtsen.name/freedombox/preseed-jessie.dat</a>
6325 </pre></p>
6326
6327 <p>I have not tested it myself the last few weeks, so I do not know if
6328 it still work.</p>
6329
6330 <p>If you wonder how to help, one task you could look at is using
6331 systemd as the boot system. It will become the default for Linux in
6332 Jessie, so we need to make sure it is usable on the Freedombox. I did
6333 a simple test a few weeks ago, and noticed dnsmasq failed to start
6334 during boot when using systemd. I suspect there are other problems
6335 too. :) To detect problems, there is a test suite included, which can
6336 be run from the plinth web interface.</p>
6337
6338 <p>Give it a go and let us know how it goes on the mailing list, and help
6339 us get the new release published. :) Please join us on
6340 <a href="irc://irc.debian.org:6667/%23freedombox">IRC (#freedombox on
6341 irc.debian.org)</a> and
6342 <a href="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">the
6343 mailing list</a> if you want to help make this vision come true.</p>
6344
6345 </div>
6346 <div class="tags">
6347
6348
6349 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>.
6350
6351
6352 </div>
6353 </div>
6354 <div class="padding"></div>
6355
6356 <div class="entry">
6357 <div class="title">
6358 <a href="http://people.skolelinux.org/pere/blog/S3QL__a_locally_mounted_cloud_file_system___nice_free_software.html">S3QL, a locally mounted cloud file system - nice free software</a>
6359 </div>
6360 <div class="date">
6361 9th April 2014
6362 </div>
6363 <div class="body">
6364 <p>For a while now, I have been looking for a sensible offsite backup
6365 solution for use at home. My requirements are simple, it must be
6366 cheap and locally encrypted (in other words, I keep the encryption
6367 keys, the storage provider do not have access to my private files).
6368 One idea me and my friends had many years ago, before the cloud
6369 storage providers showed up, was to use Google mail as storage,
6370 writing a Linux block device storing blocks as emails in the mail
6371 service provided by Google, and thus get heaps of free space. On top
6372 of this one can add encryption, RAID and volume management to have
6373 lots of (fairly slow, I admit that) cheap and encrypted storage. But
6374 I never found time to implement such system. But the last few weeks I
6375 have looked at a system called
6376 <a href="https://bitbucket.org/nikratio/s3ql/">S3QL</a>, a locally
6377 mounted network backed file system with the features I need.</p>
6378
6379 <p>S3QL is a fuse file system with a local cache and cloud storage,
6380 handling several different storage providers, any with Amazon S3,
6381 Google Drive or OpenStack API. There are heaps of such storage
6382 providers. S3QL can also use a local directory as storage, which
6383 combined with sshfs allow for file storage on any ssh server. S3QL
6384 include support for encryption, compression, de-duplication, snapshots
6385 and immutable file systems, allowing me to mount the remote storage as
6386 a local mount point, look at and use the files as if they were local,
6387 while the content is stored in the cloud as well. This allow me to
6388 have a backup that should survive fire. The file system can not be
6389 shared between several machines at the same time, as only one can
6390 mount it at the time, but any machine with the encryption key and
6391 access to the storage service can mount it if it is unmounted.</p>
6392
6393 <p>It is simple to use. I'm using it on Debian Wheezy, where the
6394 package is included already. So to get started, run <tt>apt-get
6395 install s3ql</tt>. Next, pick a storage provider. I ended up picking
6396 Greenqloud, after reading their nice recipe on
6397 <a href="https://greenqloud.zendesk.com/entries/44611757-How-To-Use-S3QL-to-mount-a-StorageQloud-bucket-on-Debian-Wheezy">how
6398 to use S3QL with their Amazon S3 service</a>, because I trust the laws
6399 in Iceland more than those in USA when it come to keeping my personal
6400 data safe and private, and thus would rather spend money on a company
6401 in Iceland. Another nice recipe is available from the article
6402 <a href="http://www.admin-magazine.com/HPC/Articles/HPC-Cloud-Storage">S3QL
6403 Filesystem for HPC Storage</a> by Jeff Layton in the HPC section of
6404 Admin magazine. When the provider is picked, figure out how to get
6405 the API key needed to connect to the storage API. With Greencloud,
6406 the key did not show up until I had added payment details to my
6407 account.</p>
6408
6409 <p>Armed with the API access details, it is time to create the file
6410 system. First, create a new bucket in the cloud. This bucket is the
6411 file system storage area. I picked a bucket name reflecting the
6412 machine that was going to store data there, but any name will do.
6413 I'll refer to it as <tt>bucket-name</tt> below. In addition, one need
6414 the API login and password, and a locally created password. Store it
6415 all in ~root/.s3ql/authinfo2 like this:
6416
6417 <p><blockquote><pre>
6418 [s3c]
6419 storage-url: s3c://s.greenqloud.com:443/bucket-name
6420 backend-login: API-login
6421 backend-password: API-password
6422 fs-passphrase: local-password
6423 </pre></blockquote></p>
6424
6425 <p>I create my local passphrase using <tt>pwget 50</tt> or similar,
6426 but any sensible way to create a fairly random password should do it.
6427 Armed with these details, it is now time to run mkfs, entering the API
6428 details and password to create it:</p>
6429
6430 <p><blockquote><pre>
6431 # mkdir -m 700 /var/lib/s3ql-cache
6432 # mkfs.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
6433 --ssl s3c://s.greenqloud.com:443/bucket-name
6434 Enter backend login:
6435 Enter backend password:
6436 Before using S3QL, make sure to read the user's guide, especially
6437 the 'Important Rules to Avoid Loosing Data' section.
6438 Enter encryption password:
6439 Confirm encryption password:
6440 Generating random encryption key...
6441 Creating metadata tables...
6442 Dumping metadata...
6443 ..objects..
6444 ..blocks..
6445 ..inodes..
6446 ..inode_blocks..
6447 ..symlink_targets..
6448 ..names..
6449 ..contents..
6450 ..ext_attributes..
6451 Compressing and uploading metadata...
6452 Wrote 0.00 MB of compressed metadata.
6453 # </pre></blockquote></p>
6454
6455 <p>The next step is mounting the file system to make the storage available.
6456
6457 <p><blockquote><pre>
6458 # mount.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
6459 --ssl --allow-root s3c://s.greenqloud.com:443/bucket-name /s3ql
6460 Using 4 upload threads.
6461 Downloading and decompressing metadata...
6462 Reading metadata...
6463 ..objects..
6464 ..blocks..
6465 ..inodes..
6466 ..inode_blocks..
6467 ..symlink_targets..
6468 ..names..
6469 ..contents..
6470 ..ext_attributes..
6471 Mounting filesystem...
6472 # df -h /s3ql
6473 Filesystem Size Used Avail Use% Mounted on
6474 s3c://s.greenqloud.com:443/bucket-name 1.0T 0 1.0T 0% /s3ql
6475 #
6476 </pre></blockquote></p>
6477
6478 <p>The file system is now ready for use. I use rsync to store my
6479 backups in it, and as the metadata used by rsync is downloaded at
6480 mount time, no network traffic (and storage cost) is triggered by
6481 running rsync. To unmount, one should not use the normal umount
6482 command, as this will not flush the cache to the cloud storage, but
6483 instead running the umount.s3ql command like this:
6484
6485 <p><blockquote><pre>
6486 # umount.s3ql /s3ql
6487 #
6488 </pre></blockquote></p>
6489
6490 <p>There is a fsck command available to check the file system and
6491 correct any problems detected. This can be used if the local server
6492 crashes while the file system is mounted, to reset the "already
6493 mounted" flag. This is what it look like when processing a working
6494 file system:</p>
6495
6496 <p><blockquote><pre>
6497 # fsck.s3ql --force --ssl s3c://s.greenqloud.com:443/bucket-name
6498 Using cached metadata.
6499 File system seems clean, checking anyway.
6500 Checking DB integrity...
6501 Creating temporary extra indices...
6502 Checking lost+found...
6503 Checking cached objects...
6504 Checking names (refcounts)...
6505 Checking contents (names)...
6506 Checking contents (inodes)...
6507 Checking contents (parent inodes)...
6508 Checking objects (reference counts)...
6509 Checking objects (backend)...
6510 ..processed 5000 objects so far..
6511 ..processed 10000 objects so far..
6512 ..processed 15000 objects so far..
6513 Checking objects (sizes)...
6514 Checking blocks (referenced objects)...
6515 Checking blocks (refcounts)...
6516 Checking inode-block mapping (blocks)...
6517 Checking inode-block mapping (inodes)...
6518 Checking inodes (refcounts)...
6519 Checking inodes (sizes)...
6520 Checking extended attributes (names)...
6521 Checking extended attributes (inodes)...
6522 Checking symlinks (inodes)...
6523 Checking directory reachability...
6524 Checking unix conventions...
6525 Checking referential integrity...
6526 Dropping temporary indices...
6527 Backing up old metadata...
6528 Dumping metadata...
6529 ..objects..
6530 ..blocks..
6531 ..inodes..
6532 ..inode_blocks..
6533 ..symlink_targets..
6534 ..names..
6535 ..contents..
6536 ..ext_attributes..
6537 Compressing and uploading metadata...
6538 Wrote 0.89 MB of compressed metadata.
6539 #
6540 </pre></blockquote></p>
6541
6542 <p>Thanks to the cache, working on files that fit in the cache is very
6543 quick, about the same speed as local file access. Uploading large
6544 amount of data is to me limited by the bandwidth out of and into my
6545 house. Uploading 685 MiB with a 100 MiB cache gave me 305 kiB/s,
6546 which is very close to my upload speed, and downloading the same
6547 Debian installation ISO gave me 610 kiB/s, close to my download speed.
6548 Both were measured using <tt>dd</tt>. So for me, the bottleneck is my
6549 network, not the file system code. I do not know what a good cache
6550 size would be, but suspect that the cache should e larger than your
6551 working set.</p>
6552
6553 <p>I mentioned that only one machine can mount the file system at the
6554 time. If another machine try, it is told that the file system is
6555 busy:</p>
6556
6557 <p><blockquote><pre>
6558 # mount.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
6559 --ssl --allow-root s3c://s.greenqloud.com:443/bucket-name /s3ql
6560 Using 8 upload threads.
6561 Backend reports that fs is still mounted elsewhere, aborting.
6562 #
6563 </pre></blockquote></p>
6564
6565 <p>The file content is uploaded when the cache is full, while the
6566 metadata is uploaded once every 24 hour by default. To ensure the
6567 file system content is flushed to the cloud, one can either umount the
6568 file system, or ask S3QL to flush the cache and metadata using
6569 s3qlctrl:
6570
6571 <p><blockquote><pre>
6572 # s3qlctrl upload-meta /s3ql
6573 # s3qlctrl flushcache /s3ql
6574 #
6575 </pre></blockquote></p>
6576
6577 <p>If you are curious about how much space your data uses in the
6578 cloud, and how much compression and deduplication cut down on the
6579 storage usage, you can use s3qlstat on the mounted file system to get
6580 a report:</p>
6581
6582 <p><blockquote><pre>
6583 # s3qlstat /s3ql
6584 Directory entries: 9141
6585 Inodes: 9143
6586 Data blocks: 8851
6587 Total data size: 22049.38 MB
6588 After de-duplication: 21955.46 MB (99.57% of total)
6589 After compression: 21877.28 MB (99.22% of total, 99.64% of de-duplicated)
6590 Database size: 2.39 MB (uncompressed)
6591 (some values do not take into account not-yet-uploaded dirty blocks in cache)
6592 #
6593 </pre></blockquote></p>
6594
6595 <p>I mentioned earlier that there are several possible suppliers of
6596 storage. I did not try to locate them all, but am aware of at least
6597 <a href="https://www.greenqloud.com/">Greenqloud</a>,
6598 <a href="http://drive.google.com/">Google Drive</a>,
6599 <a href="http://aws.amazon.com/s3/">Amazon S3 web serivces</a>,
6600 <a href="http://www.rackspace.com/">Rackspace</a> and
6601 <a href="http://crowncloud.net/">Crowncloud</A>. The latter even
6602 accept payment in Bitcoin. Pick one that suit your need. Some of
6603 them provide several GiB of free storage, but the prize models are
6604 quite different and you will have to figure out what suits you
6605 best.</p>
6606
6607 <p>While researching this blog post, I had a look at research papers
6608 and posters discussing the S3QL file system. There are several, which
6609 told me that the file system is getting a critical check by the
6610 science community and increased my confidence in using it. One nice
6611 poster is titled
6612 "<a href="http://www.lanl.gov/orgs/adtsc/publications/science_highlights_2013/docs/pg68_69.pdf">An
6613 Innovative Parallel Cloud Storage System using OpenStack’s SwiftObject
6614 Store and Transformative Parallel I/O Approach</a>" by Hsing-Bung
6615 Chen, Benjamin McClelland, David Sherrill, Alfred Torrez, Parks Fields
6616 and Pamela Smith. Please have a look.</p>
6617
6618 <p>Given my problems with different file systems earlier, I decided to
6619 check out the mounted S3QL file system to see if it would be usable as
6620 a home directory (in other word, that it provided POSIX semantics when
6621 it come to locking and umask handling etc). Running
6622 <a href="http://people.skolelinux.org/pere/blog/Testing_if_a_file_system_can_be_used_for_home_directories___.html">my
6623 test code to check file system semantics</a>, I was happy to discover that
6624 no error was found. So the file system can be used for home
6625 directories, if one chooses to do so.</p>
6626
6627 <p>If you do not want a locally file system, and want something that
6628 work without the Linux fuse file system, I would like to mention the
6629 <a href="http://www.tarsnap.com/">Tarsnap service</a>, which also
6630 provide locally encrypted backup using a command line client. It have
6631 a nicer access control system, where one can split out read and write
6632 access, allowing some systems to write to the backup and others to
6633 only read from it.</p>
6634
6635 <p>As usual, if you use Bitcoin and want to show your support of my
6636 activities, please send Bitcoin donations to my address
6637 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
6638
6639 </div>
6640 <div class="tags">
6641
6642
6643 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>, <a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
6644
6645
6646 </div>
6647 </div>
6648 <div class="padding"></div>
6649
6650 <div class="entry">
6651 <div class="title">
6652 <a href="http://people.skolelinux.org/pere/blog/Freedombox_on_Dreamplug__Raspberry_Pi_and_virtual_x86_machine.html">Freedombox on Dreamplug, Raspberry Pi and virtual x86 machine</a>
6653 </div>
6654 <div class="date">
6655 14th March 2014
6656 </div>
6657 <div class="body">
6658 <p>The <a href="https://wiki.debian.org/FreedomBox">Freedombox
6659 project</a> is working on providing the software and hardware for
6660 making it easy for non-technical people to host their data and
6661 communication at home, and being able to communicate with their
6662 friends and family encrypted and away from prying eyes. It has been
6663 going on for a while, and is slowly progressing towards a new test
6664 release (0.2).</p>
6665
6666 <p>And what day could be better than the Pi day to announce that the
6667 new version will provide "hard drive" / SD card / USB stick images for
6668 Dreamplug, Raspberry Pi and VirtualBox (or any other virtualization
6669 system), and can also be installed using a Debian installer preseed
6670 file. The Debian based Freedombox is now based on Debian Jessie,
6671 where most of the needed packages used are already present. Only one,
6672 the freedombox-setup package, is missing. To try to build your own
6673 boot image to test the current status, fetch the freedom-maker scripts
6674 and build using
6675 <a href="http://packages.qa.debian.org/vmdebootstrap">vmdebootstrap</a>
6676 with a user with sudo access to become root:
6677
6678 <pre>
6679 git clone http://anonscm.debian.org/git/freedombox/freedom-maker.git \
6680 freedom-maker
6681 sudo apt-get install git vmdebootstrap mercurial python-docutils \
6682 mktorrent extlinux virtualbox qemu-user-static binfmt-support \
6683 u-boot-tools
6684 make -C freedom-maker dreamplug-image raspberry-image virtualbox-image
6685 </pre>
6686
6687 <p>Root access is needed to run debootstrap and mount loopback
6688 devices. See the README for more details on the build. If you do not
6689 want all three images, trim the make line. But note that thanks to <a
6690 href="https://bugs.debian.org/741407">a race condition in
6691 vmdebootstrap</a>, the build might fail without the patch to the
6692 kpartx call.</p>
6693
6694 <p>If you instead want to install using a Debian CD and the preseed
6695 method, boot a Debian Wheezy ISO and use this boot argument to load
6696 the preseed values:</p>
6697
6698 <pre>
6699 url=<a href="http://www.reinholdtsen.name/freedombox/preseed-jessie.dat">http://www.reinholdtsen.name/freedombox/preseed-jessie.dat</a>
6700 </pre>
6701
6702 <p>But note that due to <a href="https://bugs.debian.org/740673">a
6703 recently introduced bug in apt in Jessie</a>, the installer will
6704 currently hang while setting up APT sources. Killing the
6705 '<tt>apt-cdrom ident</tt>' process when it hang a few times during the
6706 installation will get the installation going. This affect all
6707 installations in Jessie, and I expect it will be fixed soon.</p>
6708
6709 <p>Give it a go and let us know how it goes on the mailing list, and help
6710 us get the new release published. :) Please join us on
6711 <a href="irc://irc.debian.org:6667/%23freedombox">IRC (#freedombox on
6712 irc.debian.org)</a> and
6713 <a href="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">the
6714 mailing list</a> if you want to help make this vision come true.</p>
6715
6716 </div>
6717 <div class="tags">
6718
6719
6720 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>.
6721
6722
6723 </div>
6724 </div>
6725 <div class="padding"></div>
6726
6727 <div class="entry">
6728 <div class="title">
6729 <a href="http://people.skolelinux.org/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>
6730 </div>
6731 <div class="date">
6732 22nd February 2014
6733 </div>
6734 <div class="body">
6735 <p>Many years ago, I wrote a GPL licensed version of the netgroup and
6736 innetgr tools, because I needed them in
6737 <a href="http://www.skolelinux.org/">Skolelinux</a>. I called the project
6738 ng-utils, and it has served me well. I placed the project under the
6739 <a href="http://www.hungry.com/">Hungry Programmer</a> umbrella, and it was maintained in our CVS
6740 repository. But many years ago, the CVS repository was dropped (lost,
6741 not migrated to new hardware, not sure), and the project have lacked a
6742 proper home since then.</p>
6743
6744 <p>Last summer, I had a look at the package and made a new release
6745 fixing a irritating crash bug, but was unable to store the changes in
6746 a proper source control system. I applied for a project on
6747 <a href="https://alioth.debian.org/">Alioth</a>, but did not have time
6748 to follow up on it. Until today. :)</p>
6749
6750 <p>After many hours of cleaning and migration, the ng-utils project
6751 now have a new home, and a git repository with the highlight of the
6752 history of the project. I published all release tarballs and imported
6753 them into the git repository. As the project is really stable and not
6754 expected to gain new features any time soon, I decided to make a new
6755 release and call it 1.0. Visit the new project home on
6756 <a href="https://alioth.debian.org/projects/ng-utils/">https://alioth.debian.org/projects/ng-utils/</a>
6757 if you want to check it out. The new version is also uploaded into
6758 <a href="http://packages.qa.debian.org/n/ng-utils.html">Debian Unstable</a>.</p>
6759
6760 </div>
6761 <div class="tags">
6762
6763
6764 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
6765
6766
6767 </div>
6768 </div>
6769 <div class="padding"></div>
6770
6771 <div class="entry">
6772 <div class="title">
6773 <a href="http://people.skolelinux.org/pere/blog/Testing_sysvinit_from_experimental_in_Debian_Hurd.html">Testing sysvinit from experimental in Debian Hurd</a>
6774 </div>
6775 <div class="date">
6776 3rd February 2014
6777 </div>
6778 <div class="body">
6779 <p>A few days ago I decided to try to help the Hurd people to get
6780 their changes into sysvinit, to allow them to use the normal sysvinit
6781 boot system instead of their old one. This follow up on the
6782 <a href="https://teythoon.cryptobitch.de//categories/gsoc.html">great
6783 Google Summer of Code work</a> done last summer by Justus Winter to
6784 get Debian on Hurd working more like Debian on Linux. To get started,
6785 I downloaded a prebuilt hard disk image from
6786 <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>,
6787 and started it using virt-manager.</p>
6788
6789 <p>The first think I had to do after logging in (root without any
6790 password) was to get the network operational. I followed
6791 <a href="https://www.debian.org/ports/hurd/hurd-install">the
6792 instructions on the Debian GNU/Hurd ports page</a> and ran these
6793 commands as root to get the machine to accept a IP address from the
6794 kvm internal DHCP server:</p>
6795
6796 <p><blockquote><pre>
6797 settrans -fgap /dev/netdde /hurd/netdde
6798 kill $(ps -ef|awk '/[p]finet/ { print $2}')
6799 kill $(ps -ef|awk '/[d]evnode/ { print $2}')
6800 dhclient /dev/eth0
6801 </pre></blockquote></p>
6802
6803 <p>After this, the machine had internet connectivity, and I could
6804 upgrade it and install the sysvinit packages from experimental and
6805 enable it as the default boot system in Hurd.</p>
6806
6807 <p>But before I did that, I set a password on the root user, as ssh is
6808 running on the machine it for ssh login to work a password need to be
6809 set. Also, note that a bug somewhere in openssh on Hurd block
6810 compression from working. Remember to turn that off on the client
6811 side.</p>
6812
6813 <p>Run these commands as root to upgrade and test the new sysvinit
6814 stuff:</p>
6815
6816 <p><blockquote><pre>
6817 cat > /etc/apt/sources.list.d/experimental.list &lt;&lt;EOF
6818 deb http://http.debian.net/debian/ experimental main
6819 EOF
6820 apt-get update
6821 apt-get dist-upgrade
6822 apt-get install -t experimental initscripts sysv-rc sysvinit \
6823 sysvinit-core sysvinit-utils
6824 update-alternatives --config runsystem
6825 </pre></blockquote></p>
6826
6827 <p>To reboot after switching boot system, you have to use
6828 <tt>reboot-hurd</tt> instead of just <tt>reboot</tt>, as there is not
6829 yet a sysvinit process able to receive the signals from the normal
6830 'reboot' command. After switching to sysvinit as the boot system,
6831 upgrading every package and rebooting, the network come up with DHCP
6832 after boot as it should, and the settrans/pkill hack mentioned at the
6833 start is no longer needed. But for some strange reason, there are no
6834 longer any login prompt in the virtual console, so I logged in using
6835 ssh instead.
6836
6837 <p>Note that there are some race conditions in Hurd making the boot
6838 fail some times. No idea what the cause is, but hope the Hurd porters
6839 figure it out. At least Justus said on IRC (#debian-hurd on
6840 irc.debian.org) that they are aware of the problem. A way to reduce
6841 the impact is to upgrade to the Hurd packages built by Justus by
6842 adding this repository to the machine:</p>
6843
6844 <p><blockquote><pre>
6845 cat > /etc/apt/sources.list.d/hurd-ci.list &lt;&lt;EOF
6846 deb http://darnassus.sceen.net/~teythoon/hurd-ci/ sid main
6847 EOF
6848 </pre></blockquote></p>
6849
6850 <p>At the moment the prebuilt virtual machine get some packages from
6851 http://ftp.debian-ports.org/debian, because some of the packages in
6852 unstable do not yet include the required patches that are lingering in
6853 BTS. This is the completely list of "unofficial" packages installed:</p>
6854
6855 <p><blockquote><pre>
6856 # aptitude search '?narrow(?version(CURRENT),?origin(Debian Ports))'
6857 i emacs - GNU Emacs editor (metapackage)
6858 i gdb - GNU Debugger
6859 i hurd-recommended - Miscellaneous translators
6860 i isc-dhcp-client - ISC DHCP client
6861 i isc-dhcp-common - common files used by all the isc-dhcp* packages
6862 i libc-bin - Embedded GNU C Library: Binaries
6863 i libc-dev-bin - Embedded GNU C Library: Development binaries
6864 i libc0.3 - Embedded GNU C Library: Shared libraries
6865 i A libc0.3-dbg - Embedded GNU C Library: detached debugging symbols
6866 i libc0.3-dev - Embedded GNU C Library: Development Libraries and Hea
6867 i multiarch-support - Transitional package to ensure multiarch compatibilit
6868 i A x11-common - X Window System (X.Org) infrastructure
6869 i xorg - X.Org X Window System
6870 i A xserver-xorg - X.Org X server
6871 i A xserver-xorg-input-all - X.Org X server -- input driver metapackage
6872 #
6873 </pre></blockquote></p>
6874
6875 <p>All in all, testing hurd has been an interesting experience. :)
6876 X.org did not work out of the box and I never took the time to follow
6877 the porters instructions to fix it. This time I was interested in the
6878 command line stuff.<p>
6879
6880 </div>
6881 <div class="tags">
6882
6883
6884 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
6885
6886
6887 </div>
6888 </div>
6889 <div class="padding"></div>
6890
6891 <div class="entry">
6892 <div class="title">
6893 <a href="http://people.skolelinux.org/pere/blog/New_chrpath_release_0_16.html">New chrpath release 0.16</a>
6894 </div>
6895 <div class="date">
6896 14th January 2014
6897 </div>
6898 <div class="body">
6899 <p><a href="http://www.coverity.com/">Coverity</a> is a nice tool to
6900 find problems in C, C++ and Java code using static source code
6901 analysis. It can detect a lot of different problems, and is very
6902 useful to find memory and locking bugs in the error handling part of
6903 the source. The company behind it provide
6904 <a href="https://scan.coverity.com/">check of free software projects as
6905 a community service</a>, and many hundred free software projects are
6906 already checked. A few days ago I decided to have a closer look at
6907 the Coverity system, and discovered that the
6908 <a href="http://www.gnu.org/software/gnash/">gnash</a> and
6909 <a href="http://sourceforge.net/projects/ipmitool/">ipmitool</a>
6910 projects I am involved with was already registered. But these are
6911 fairly big, and I would also like to have a small and easy project to
6912 check, and decided to <a href="http://scan.coverity.com/projects/1179">request
6913 checking of the chrpath project</a>. It was
6914 added to the checker and discovered seven potential defects. Six of
6915 these were real, mostly resource "leak" when the program detected an
6916 error. Nothing serious, as the resources would be released a fraction
6917 of a second later when the program exited because of the error, but it
6918 is nice to do it right in case the source of the program some time in
6919 the future end up in a library. Having fixed all defects and added
6920 <a href="https://lists.alioth.debian.org/mailman/listinfo/chrpath-devel">a
6921 mailing list for the chrpath developers</a>, I decided it was time to
6922 publish a new release. These are the release notes:</p>
6923
6924 <p>New in 0.16 released 2014-01-14:</p>
6925
6926 <ul>
6927
6928 <li>Fixed all minor bugs discovered by Coverity.</li>
6929 <li>Updated config.sub and config.guess from the GNU project.</li>
6930 <li>Mention new project mailing list in the documentation.</li>
6931
6932 </ul>
6933
6934 <p>You can
6935 <a href="https://alioth.debian.org/frs/?group_id=31052">download the
6936 new version 0.16 from alioth</a>. Please let us know via the Alioth
6937 project if something is wrong with the new release. The test suite
6938 did not discover any old errors, so if you find a new one, please also
6939 include a test suite check.</p>
6940
6941 </div>
6942 <div class="tags">
6943
6944
6945 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/chrpath">chrpath</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
6946
6947
6948 </div>
6949 </div>
6950 <div class="padding"></div>
6951
6952 <div class="entry">
6953 <div class="title">
6954 <a href="http://people.skolelinux.org/pere/blog/New_chrpath_release_0_15.html">New chrpath release 0.15</a>
6955 </div>
6956 <div class="date">
6957 24th November 2013
6958 </div>
6959 <div class="body">
6960 <p>After many years break from the package and a vain hope that
6961 development would be continued by someone else, I finally pulled my
6962 acts together this morning and wrapped up a new release of chrpath,
6963 the command line tool to modify the rpath and runpath of already
6964 compiled ELF programs. The update was triggered by the persistence of
6965 Isha Vishnoi at IBM, which needed a new config.guess file to get
6966 support for the ppc64le architecture (powerpc 64-bit Little Endian) he
6967 is working on. I checked the
6968 <a href="http://packages.qa.debian.org/chrpath">Debian</a>,
6969 <a href="https://launchpad.net/ubuntu/+source/chrpath">Ubuntu</a> and
6970 <a href="https://admin.fedoraproject.org/pkgdb/acls/name/chrpath">Fedora</a>
6971 packages for interesting patches (failed to find the source from
6972 OpenSUSE and Mandriva packages), and found quite a few nice fixes.
6973 These are the release notes:</p>
6974
6975 <p>New in 0.15 released 2013-11-24:</p>
6976
6977 <ul>
6978
6979 <li>Updated config.sub and config.guess from the GNU project to work
6980 with newer architectures. Thanks to isha vishnoi for the heads
6981 up.</li>
6982
6983 <li>Updated README with current URLs.</li>
6984
6985 <li>Added byteswap fix found in Ubuntu, credited Jeremy Kerr and
6986 Matthias Klose.</li>
6987
6988 <li>Added missing help for -k|--keepgoing option, using patch by
6989 Petr Machata found in Fedora.</li>
6990
6991 <li>Rewrite removal of RPATH/RUNPATH to make sure the entry in
6992 .dynamic is a NULL terminated string. Based on patch found in
6993 Fedora credited Axel Thimm and Christian Krause.</li>
6994
6995 </ul>
6996
6997 <p>You can
6998 <a href="https://alioth.debian.org/frs/?group_id=31052">download the
6999 new version 0.15 from alioth</a>. Please let us know via the Alioth
7000 project if something is wrong with the new release. The test suite
7001 did not discover any old errors, so if you find a new one, please also
7002 include a testsuite check.</p>
7003
7004 </div>
7005 <div class="tags">
7006
7007
7008 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/chrpath">chrpath</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
7009
7010
7011 </div>
7012 </div>
7013 <div class="padding"></div>
7014
7015 <div class="entry">
7016 <div class="title">
7017 <a href="http://people.skolelinux.org/pere/blog/Debian_init_d_boot_script_example_for_rsyslog.html">Debian init.d boot script example for rsyslog</a>
7018 </div>
7019 <div class="date">
7020 2nd November 2013
7021 </div>
7022 <div class="body">
7023 <p>If one of the points of switching to a new init system in Debian is
7024 <a href="http://thomas.goirand.fr/blog/?p=147">to get rid of huge
7025 init.d scripts</a>, I doubt we need to switch away from sysvinit and
7026 init.d scripts at all. Here is an example init.d script, ie a rewrite
7027 of /etc/init.d/rsyslog:</p>
7028
7029 <p><pre>
7030 #!/lib/init/init-d-script
7031 ### BEGIN INIT INFO
7032 # Provides: rsyslog
7033 # Required-Start: $remote_fs $time
7034 # Required-Stop: umountnfs $time
7035 # X-Stop-After: sendsigs
7036 # Default-Start: 2 3 4 5
7037 # Default-Stop: 0 1 6
7038 # Short-Description: enhanced syslogd
7039 # Description: Rsyslog is an enhanced multi-threaded syslogd.
7040 # It is quite compatible to stock sysklogd and can be
7041 # used as a drop-in replacement.
7042 ### END INIT INFO
7043 DESC="enhanced syslogd"
7044 DAEMON=/usr/sbin/rsyslogd
7045 </pre></p>
7046
7047 <p>Pretty minimalistic to me... For the record, the original sysv-rc
7048 script was 137 lines, and the above is just 15 lines, most of it meta
7049 info/comments.</p>
7050
7051 <p>How to do this, you ask? Well, one create a new script
7052 /lib/init/init-d-script looking something like this:
7053
7054 <p><pre>
7055 #!/bin/sh
7056
7057 # Define LSB log_* functions.
7058 # Depend on lsb-base (>= 3.2-14) to ensure that this file is present
7059 # and status_of_proc is working.
7060 . /lib/lsb/init-functions
7061
7062 #
7063 # Function that starts the daemon/service
7064
7065 #
7066 do_start()
7067 {
7068 # Return
7069 # 0 if daemon has been started
7070 # 1 if daemon was already running
7071 # 2 if daemon could not be started
7072 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
7073 || return 1
7074 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
7075 $DAEMON_ARGS \
7076 || return 2
7077 # Add code here, if necessary, that waits for the process to be ready
7078 # to handle requests from services started subsequently which depend
7079 # on this one. As a last resort, sleep for some time.
7080 }
7081
7082 #
7083 # Function that stops the daemon/service
7084 #
7085 do_stop()
7086 {
7087 # Return
7088 # 0 if daemon has been stopped
7089 # 1 if daemon was already stopped
7090 # 2 if daemon could not be stopped
7091 # other if a failure occurred
7092 start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
7093 RETVAL="$?"
7094 [ "$RETVAL" = 2 ] && return 2
7095 # Wait for children to finish too if this is a daemon that forks
7096 # and if the daemon is only ever run from this initscript.
7097 # If the above conditions are not satisfied then add some other code
7098 # that waits for the process to drop all resources that could be
7099 # needed by services started subsequently. A last resort is to
7100 # sleep for some time.
7101 start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
7102 [ "$?" = 2 ] && return 2
7103 # Many daemons don't delete their pidfiles when they exit.
7104 rm -f $PIDFILE
7105 return "$RETVAL"
7106 }
7107
7108 #
7109 # Function that sends a SIGHUP to the daemon/service
7110 #
7111 do_reload() {
7112 #
7113 # If the daemon can reload its configuration without
7114 # restarting (for example, when it is sent a SIGHUP),
7115 # then implement that here.
7116 #
7117 start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
7118 return 0
7119 }
7120
7121 SCRIPTNAME=$1
7122 scriptbasename="$(basename $1)"
7123 echo "SN: $scriptbasename"
7124 if [ "$scriptbasename" != "init-d-library" ] ; then
7125 script="$1"
7126 shift
7127 . $script
7128 else
7129 exit 0
7130 fi
7131
7132 NAME=$(basename $DAEMON)
7133 PIDFILE=/var/run/$NAME.pid
7134
7135 # Exit if the package is not installed
7136 #[ -x "$DAEMON" ] || exit 0
7137
7138 # Read configuration variable file if it is present
7139 [ -r /etc/default/$NAME ] && . /etc/default/$NAME
7140
7141 # Load the VERBOSE setting and other rcS variables
7142 . /lib/init/vars.sh
7143
7144 case "$1" in
7145 start)
7146 [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
7147 do_start
7148 case "$?" in
7149 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
7150 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
7151 esac
7152 ;;
7153 stop)
7154 [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
7155 do_stop
7156 case "$?" in
7157 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
7158 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
7159 esac
7160 ;;
7161 status)
7162 status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
7163 ;;
7164 #reload|force-reload)
7165 #
7166 # If do_reload() is not implemented then leave this commented out
7167 # and leave 'force-reload' as an alias for 'restart'.
7168 #
7169 #log_daemon_msg "Reloading $DESC" "$NAME"
7170 #do_reload
7171 #log_end_msg $?
7172 #;;
7173 restart|force-reload)
7174 #
7175 # If the "reload" option is implemented then remove the
7176 # 'force-reload' alias
7177 #
7178 log_daemon_msg "Restarting $DESC" "$NAME"
7179 do_stop
7180 case "$?" in
7181 0|1)
7182 do_start
7183 case "$?" in
7184 0) log_end_msg 0 ;;
7185 1) log_end_msg 1 ;; # Old process is still running
7186 *) log_end_msg 1 ;; # Failed to start
7187 esac
7188 ;;
7189 *)
7190 # Failed to stop
7191 log_end_msg 1
7192 ;;
7193 esac
7194 ;;
7195 *)
7196 echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
7197 exit 3
7198 ;;
7199 esac
7200
7201 :
7202 </pre></p>
7203
7204 <p>It is based on /etc/init.d/skeleton, and could be improved quite a
7205 lot. I did not really polish the approach, so it might not always
7206 work out of the box, but you get the idea. I did not try very hard to
7207 optimize it nor make it more robust either.</p>
7208
7209 <p>A better argument for switching init system in Debian than reducing
7210 the size of init scripts (which is a good thing to do anyway), is to
7211 get boot system that is able to handle the kernel events sensibly and
7212 robustly, and do not depend on the boot to run sequentially. The boot
7213 and the kernel have not behaved sequentially in years.</p>
7214
7215 </div>
7216 <div class="tags">
7217
7218
7219 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
7220
7221
7222 </div>
7223 </div>
7224 <div class="padding"></div>
7225
7226 <div class="entry">
7227 <div class="title">
7228 <a href="http://people.skolelinux.org/pere/blog/Browser_plugin_for_SPICE__spice_xpi__uploaded_to_Debian.html">Browser plugin for SPICE (spice-xpi) uploaded to Debian</a>
7229 </div>
7230 <div class="date">
7231 1st November 2013
7232 </div>
7233 <div class="body">
7234 <p><a href="http://www.spice-space.org/">The SPICE protocol</a> for
7235 remote display access is the preferred solution with oVirt and RedHat
7236 Enterprise Virtualization, and I was sad to discover the other day
7237 that the browser plugin needed to use these systems seamlessly was
7238 missing in Debian. The <a href="http://bugs.debian.org/668284">request
7239 for a package</a> was from 2012-04-10 with no progress since
7240 2013-04-01, so I decided to wrap up a package based on the great work
7241 from Cajus Pollmeier and put it in a collab-maint maintained git
7242 repository to get a package I could use. I would very much like
7243 others to help me maintain the package (or just take over, I do not
7244 mind), but as no-one had volunteered so far, I just uploaded it to
7245 NEW. I hope it will be available in Debian in a few days.</p>
7246
7247 <p>The source is now available from
7248 <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>
7249
7250 </div>
7251 <div class="tags">
7252
7253
7254 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
7255
7256
7257 </div>
7258 </div>
7259 <div class="padding"></div>
7260
7261 <div class="entry">
7262 <div class="title">
7263 <a href="http://people.skolelinux.org/pere/blog/Teaching_vmdebootstrap_to_create_Raspberry_Pi_SD_card_images.html">Teaching vmdebootstrap to create Raspberry Pi SD card images</a>
7264 </div>
7265 <div class="date">
7266 27th October 2013
7267 </div>
7268 <div class="body">
7269 <p>The
7270 <a href="http://packages.qa.debian.org/v/vmdebootstrap.html">vmdebootstrap</a>
7271 program is a a very nice system to create virtual machine images. It
7272 create a image file, add a partition table, mount it and run
7273 debootstrap in the mounted directory to create a Debian system on a
7274 stick. Yesterday, I decided to try to teach it how to make images for
7275 <a href="https://wiki.debian.org/RaspberryPi">Raspberry Pi</a>, as part
7276 of a plan to simplify the build system for
7277 <a href="https://wiki.debian.org/FreedomBox">the FreedomBox
7278 project</a>. The FreedomBox project already uses vmdebootstrap for
7279 the virtualbox images, but its current build system made multistrap
7280 based system for Dreamplug images, and it is lacking support for
7281 Raspberry Pi.</p>
7282
7283 <p>Armed with the knowledge on how to build "foreign" (aka non-native
7284 architecture) chroots for Raspberry Pi, I dived into the vmdebootstrap
7285 code and adjusted it to be able to build armel images on my amd64
7286 Debian laptop. I ended up giving vmdebootstrap five new options,
7287 allowing me to replicate the image creation process I use to make
7288 <a href="http://people.skolelinux.org/pere/blog/A_Raspberry_Pi_based_batman_adv_Mesh_network_node.html">Debian
7289 Jessie based mesh node images for the Raspberry Pi</a>. First, the
7290 <tt>--foreign /path/to/binfm_handler</tt> option tell vmdebootstrap to
7291 call debootstrap with --foreign and to copy the handler into the
7292 generated chroot before running the second stage. This allow
7293 vmdebootstrap to create armel images on an amd64 host. Next I added
7294 two new options <tt>--bootsize size</tt> and <tt>--boottype
7295 fstype</tt> to teach it to create a separate /boot/ partition with the
7296 given file system type, allowing me to create an image with a vfat
7297 partition for the /boot/ stuff. I also added a <tt>--variant
7298 variant</tt> option to allow me to create smaller images without the
7299 Debian base system packages installed. Finally, I added an option
7300 <tt>--no-extlinux</tt> to tell vmdebootstrap to not install extlinux
7301 as a boot loader. It is not needed on the Raspberry Pi and probably
7302 most other non-x86 architectures. The changes were accepted by the
7303 upstream author of vmdebootstrap yesterday and today, and is now
7304 available from
7305 <a href="http://git.liw.fi/cgi-bin/cgit/cgit.cgi/vmdebootstrap/">the
7306 upstream project page</a>.</p>
7307
7308 <p>To use it to build a Raspberry Pi image using Debian Jessie, first
7309 create a small script (the customize script) to add the non-free
7310 binary blob needed to boot the Raspberry Pi and the APT source
7311 list:</p>
7312
7313 <p><pre>
7314 #!/bin/sh
7315 set -e # Exit on first error
7316 rootdir="$1"
7317 cd "$rootdir"
7318 cat &lt;&lt;EOF > etc/apt/sources.list
7319 deb http://http.debian.net/debian/ jessie main contrib non-free
7320 EOF
7321 # Install non-free binary blob needed to boot Raspberry Pi. This
7322 # install a kernel somewhere too.
7323 wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update \
7324 -O $rootdir/usr/bin/rpi-update
7325 chmod a+x $rootdir/usr/bin/rpi-update
7326 mkdir -p $rootdir/lib/modules
7327 touch $rootdir/boot/start.elf
7328 chroot $rootdir rpi-update
7329 </pre></p>
7330
7331 <p>Next, fetch the latest vmdebootstrap script and call it like this
7332 to build the image:</p>
7333
7334 <pre>
7335 sudo ./vmdebootstrap \
7336 --variant minbase \
7337 --arch armel \
7338 --distribution jessie \
7339 --mirror http://http.debian.net/debian \
7340 --image test.img \
7341 --size 600M \
7342 --bootsize 64M \
7343 --boottype vfat \
7344 --log-level debug \
7345 --verbose \
7346 --no-kernel \
7347 --no-extlinux \
7348 --root-password raspberry \
7349 --hostname raspberrypi \
7350 --foreign /usr/bin/qemu-arm-static \
7351 --customize `pwd`/customize \
7352 --package netbase \
7353 --package git-core \
7354 --package binutils \
7355 --package ca-certificates \
7356 --package wget \
7357 --package kmod
7358 </pre></p>
7359
7360 <p>The list of packages being installed are the ones needed by
7361 rpi-update to make the image bootable on the Raspberry Pi, with the
7362 exception of netbase, which is needed by debootstrap to find
7363 /etc/hosts with the minbase variant. I really wish there was a way to
7364 set up an Raspberry Pi using only packages in the Debian archive, but
7365 that is not possible as far as I know, because it boots from the GPU
7366 using a non-free binary blob.</p>
7367
7368 <p>The build host need debootstrap, kpartx and qemu-user-static and
7369 probably a few others installed. I have not checked the complete
7370 build dependency list.</p>
7371
7372 <p>The resulting image will not use the hardware floating point unit
7373 on the Raspberry PI, because the armel architecture in Debian is not
7374 optimized for that use. So the images created will be a bit slower
7375 than <a href="http://www.raspbian.org/">Raspbian</a> based images.</p>
7376
7377 </div>
7378 <div class="tags">
7379
7380
7381 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox</a>, <a href="http://people.skolelinux.org/pere/blog/tags/mesh network">mesh network</a>.
7382
7383
7384 </div>
7385 </div>
7386 <div class="padding"></div>
7387
7388 <div class="entry">
7389 <div class="title">
7390 <a href="http://people.skolelinux.org/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>
7391 </div>
7392 <div class="date">
7393 15th October 2013
7394 </div>
7395 <div class="body">
7396 <p>The last few days I came across a few good causes that should get
7397 wider attention. I recommend signing and donating to each one of
7398 these. :)</p>
7399
7400 <p>Via <a href="http://www.debian.org/News/weekly/2013/18/">Debian
7401 Project News for 2013-10-14</a> I came across the Outreach Program for
7402 Women program which is a Google Summer of Code like initiative to get
7403 more women involved in free software. One debian sponsor has offered
7404 to match <a href="http://debian.ch/opw2013">any donation done to Debian
7405 earmarked</a> for this initiative. I donated a few minutes ago, and
7406 hope you will to. :)</p>
7407
7408 <p>And the Electronic Frontier Foundation just announced plans to
7409 create <a href="https://supporters.eff.org/donate/nsa-videos">video
7410 documentaries about the excessive spying</a> on every Internet user that
7411 take place these days, and their need to fund the work. I've already
7412 donated. Are you next?</p>
7413
7414 <p>For my Norwegian audience, the organisation Studentenes og
7415 Akademikernes Internasjonale Hjelpefond is collecting signatures for a
7416 statement under the heading
7417 <a href="http://saih.no/Bloggers_United/">Bloggers United for Open
7418 Access</a> for those of us asking for more focus on open access in the
7419 Norwegian government. So far 499 signatures. I hope you will sign it
7420 too.</p>
7421
7422 </div>
7423 <div class="tags">
7424
7425
7426 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>.
7427
7428
7429 </div>
7430 </div>
7431 <div class="padding"></div>
7432
7433 <div class="entry">
7434 <div class="title">
7435 <a href="http://people.skolelinux.org/pere/blog/Videos_about_the_Freedombox_project___for_inspiration_and_learning.html">Videos about the Freedombox project - for inspiration and learning</a>
7436 </div>
7437 <div class="date">
7438 27th September 2013
7439 </div>
7440 <div class="body">
7441 <p>The <a href="http://www.freedomboxfoundation.org/">Freedombox
7442 project</a> have been going on for a while, and have presented the
7443 vision, ideas and solution several places. Here is a little
7444 collection of videos of talks and presentation of the project.</p>
7445
7446 <ul>
7447
7448 <li><a href="http://www.youtube.com/watch?v=ukvUz5taxvA">FreedomBox -
7449 2,5 minute marketing film</a> (Youtube)</li>
7450
7451 <li><a href="http://www.youtube.com/watch?v=SzW25QTVWsE">Eben Moglen
7452 discusses the Freedombox on CBS news 2011</a> (Youtube)</li>
7453
7454 <li><a href="http://www.youtube.com/watch?v=Ae8SZbxfE0g">Eben Moglen -
7455 Freedom in the Cloud - Software Freedom, Privacy and and Security for
7456 Web 2.0 and Cloud computing at ISOC-NY Public Meeting 2010</a>
7457 (Youtube)</li>
7458
7459 <li><a href="http://www.youtube.com/watch?v=vNaIji_3xBE">Fosdem 2011
7460 Keynote by Eben Moglen presenting the Freedombox</a> (Youtube)</li>
7461
7462 <li><a href="http://www.youtube.com/watch?v=9bDDUyJSQ9s">Presentation of
7463 the Freedombox by James Vasile at Elevate in Gratz 2011</a> (Youtube)</li>
7464
7465 <li><a href="http://www.youtube.com/watch?v=zQTmnk27g9s"> Freedombox -
7466 Discovery, Identity, and Trust by Nick Daly at Freedombox Hackfest New
7467 York City in 2012</a> (Youtube)</li>
7468
7469 <li><a href="http://www.youtube.com/watch?v=tkbSB4Ba7Ck">Introduction
7470 to the Freedombox at Freedombox Hackfest New York City in 2012</a>
7471 (Youtube)</li>
7472
7473 <li><a href="http://www.youtube.com/watch?v=z-P2Jaeg0aQ">Freedom, Out
7474 of the Box! by Bdale Garbee at linux.conf.au Ballarat, 2012</a> (Youtube) </li>
7475
7476 <li><a href="https://archive.fosdem.org/2013/schedule/event/freedombox/">Freedombox
7477 1.0 by Eben Moglen and Bdale Garbee at Fosdem 2013</a> (FOSDEM) </li>
7478
7479 <li><a href="http://www.youtube.com/watch?v=e1LpYX2zVYg">What is the
7480 FreedomBox today by Bdale Garbee at Debconf13 in Vaumarcus
7481 2013</a> (Youtube)</li>
7482
7483 </ul>
7484
7485 <p>A larger list is available from
7486 <a href="https://wiki.debian.org/FreedomBox/TalksAndPresentations">the
7487 Freedombox Wiki</a>.</p>
7488
7489 <p>On other news, I am happy to report that Freedombox based on Debian
7490 Jessie is coming along quite well, and soon both Owncloud and using
7491 Tor should be available for testers of the Freedombox solution. :) In
7492 a few weeks I hope everything needed to test it is included in Debian.
7493 The withsqlite package is already in Debian, and the plinth package is
7494 pending in NEW. The third and vital part of that puzzle is the
7495 metapackage/setup framework, which is still pending an upload. Join
7496 us on <a href="irc://irc.debian.org:6667/%23freedombox">IRC
7497 (#freedombox on irc.debian.org)</a> and
7498 <a href="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">the
7499 mailing list</a> if you want to help make this vision come true.</p>
7500
7501 </div>
7502 <div class="tags">
7503
7504
7505 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>.
7506
7507
7508 </div>
7509 </div>
7510 <div class="padding"></div>
7511
7512 <div class="entry">
7513 <div class="title">
7514 <a href="http://people.skolelinux.org/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>
7515 </div>
7516 <div class="date">
7517 10th September 2013
7518 </div>
7519 <div class="body">
7520 <p>I was introduced to the
7521 <a href="http://www.freedomboxfoundation.org/">Freedombox project</a>
7522 in 2010, when Eben Moglen presented his vision about serving the need
7523 of non-technical people to keep their personal information private and
7524 within the legal protection of their own homes. The idea is to give
7525 people back the power over their network and machines, and return
7526 Internet back to its intended peer-to-peer architecture. Instead of
7527 depending on a central service, the Freedombox will give everyone
7528 control over their own basic infrastructure.</p>
7529
7530 <p>I've intended to join the effort since then, but other tasks have
7531 taken priority. But this summers nasty news about the misuse of trust
7532 and privilege exercised by the "western" intelligence gathering
7533 communities increased my eagerness to contribute to a point where I
7534 actually started working on the project a while back.</p>
7535
7536 <p>The <a href="https://alioth.debian.org/projects/freedombox/">initial
7537 Debian initiative</a> based on the vision from Eben Moglen, is to
7538 create a simple and cheap Debian based appliance that anyone can hook
7539 up in their home and get access to secure and private services and
7540 communication. The initial deployment platform have been the
7541 <a href="http://www.globalscaletechnologies.com/t-dreamplugdetails.aspx">Dreamplug</a>,
7542 which is a piece of hardware I do not own. So to be able to test what
7543 the current Freedombox setup look like, I had to come up with a way to install
7544 it on some hardware I do have access to. I have rewritten the
7545 <a href="https://github.com/NickDaly/freedom-maker">freedom-maker</a>
7546 image build framework to use .deb packages instead of only copying
7547 setup into the boot images, and thanks to this rewrite I am able to
7548 set up any machine supported by Debian Wheezy as a Freedombox, using
7549 the previously mentioned deb (and a few support debs for packages
7550 missing in Debian).</p>
7551
7552 <p>The current Freedombox setup consist of a set of bootstrapping
7553 scripts
7554 (<a href="https://github.com/petterreinholdtsen/freedombox-setup">freedombox-setup</a>),
7555 and a administrative web interface
7556 (<a href="https://github.com/NickDaly/Plinth">plinth</a> + exmachina +
7557 withsqlite), as well as a privacy enhancing proxy based on
7558 <a href="http://packages.qa.debian.org/privoxy">privoxy</a>
7559 (freedombox-privoxy). There is also a web/javascript based XMPP
7560 client (<a href="http://packages.qa.debian.org/jwchat">jwchat</a>)
7561 trying (unsuccessfully so far) to talk to the XMPP server
7562 (<a href="http://packages.qa.debian.org/ejabberd">ejabberd</a>). The
7563 web interface is pluggable, and the goal is to use it to enable OpenID
7564 services, mesh network connectivity, use of TOR, etc, etc. Not much of
7565 this is really working yet, see
7566 <a href="https://github.com/NickDaly/freedombox-todos/blob/master/TODO">the
7567 project TODO</a> for links to GIT repositories. Most of the code is
7568 on github at the moment. The HTTP proxy is operational out of the
7569 box, and the admin web interface can be used to add/remove plinth
7570 users. I've not been able to do anything else with it so far, but
7571 know there are several branches spread around github and other places
7572 with lots of half baked features.</p>
7573
7574 <p>Anyway, if you want to have a look at the current state, the
7575 following recipes should work to give you a test machine to poke
7576 at.</p>
7577
7578 <p><strong>Debian Wheezy amd64</strong></p>
7579
7580 <ol>
7581
7582 <li>Fetch normal Debian Wheezy installation ISO.</li>
7583 <li>Boot from it, either as CD or USB stick.</li>
7584 <li><p>Press [tab] on the boot prompt and add this as a boot argument
7585 to the Debian installer:<p>
7586 <pre>url=<a href="http://www.reinholdtsen.name/freedombox/preseed-wheezy.dat">http://www.reinholdtsen.name/freedombox/preseed-wheezy.dat</a></pre></li>
7587
7588 <li>Answer the few language/region/password questions and pick disk to
7589 install on.</li>
7590
7591 <li>When the installation is finished and the machine have rebooted a
7592 few times, your Freedombox is ready for testing.</li>
7593
7594 </ol>
7595
7596 <p><strong>Raspberry Pi Raspbian</strong></p>
7597
7598 <ol>
7599
7600 <li>Fetch a Raspbian SD card image, create SD card.</li>
7601 <li>Boot from SD card, extend file system to fill the card completely.</li>
7602 <li><p>Log in and add this to /etc/sources.list:</p>
7603 <pre>
7604 deb <a href="http://www.reinholdtsen.name/freedombox/">http://www.reinholdtsen.name/freedombox</a> wheezy main
7605 </pre></li>
7606 <li><p>Run this as root:</p>
7607 <pre>
7608 wget -O - http://www.reinholdtsen.name/freedombox/BE1A583D.asc | \
7609 apt-key add -
7610 apt-get update
7611 apt-get install freedombox-setup
7612 /usr/lib/freedombox/setup
7613 </pre></li>
7614 <li>Reboot into your freshly created Freedombox.</li>
7615
7616 </ol>
7617
7618 <p>You can test it on other architectures too, but because the
7619 freedombox-privoxy package is binary, it will only work as intended on
7620 the architectures where I have had time to build the binary and put it
7621 in my APT repository. But do not let this stop you. It is only a
7622 short "<tt>apt-get source -b freedombox-privoxy</tt>" away. :)</p>
7623
7624 <p>Note that by default Freedombox is a DHCP server on the
7625 192.168.1.0/24 subnet, so if this is your subnet be careful and turn
7626 off the DHCP server by running "<tt>update-rc.d isc-dhcp-server
7627 disable</tt>" as root.</p>
7628
7629 <p>Please let me know if this works for you, or if you have any
7630 problems. We gather on the IRC channel
7631 <a href="irc://irc.debian.org:6667/%23freedombox">#freedombox</a> on
7632 irc.debian.org and the
7633 <a href="http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/freedombox-discuss">project
7634 mailing list</a>.</p>
7635
7636 <p>Once you get your freedombox operational, you can visit
7637 <tt>http://your-host-name:8001/</tt> to see the state of the plint
7638 welcome screen (dead end - do not be surprised if you are unable to
7639 get past it), and next visit <tt>http://your-host-name:8001/help/</tt>
7640 to look at the rest of plinth. The default user is 'admin' and the
7641 default password is 'secret'.</p>
7642
7643 </div>
7644 <div class="tags">
7645
7646
7647 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>.
7648
7649
7650 </div>
7651 </div>
7652 <div class="padding"></div>
7653
7654 <div class="entry">
7655 <div class="title">
7656 <a href="http://people.skolelinux.org/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>
7657 </div>
7658 <div class="date">
7659 18th August 2013
7660 </div>
7661 <div class="body">
7662 <p>Earlier, I reported about
7663 <a href="http://people.skolelinux.org/pere/blog/How_to_fix_a_Thinkpad_X230_with_a_broken_180_GB_SSD_disk.html">my
7664 problems using an Intel SSD 520 Series 180 GB disk</a>. Friday I was
7665 told by IBM that the original disk should be thrown away. And as
7666 there no longer was a problem if I bricked the firmware, I decided
7667 today to try to install Intel firmware to replace the Lenovo firmware
7668 currently on the disk.</p>
7669
7670 <p>I searched the Intel site for firmware, and found
7671 <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>
7672 (aka Intel SATA Solid-State Drive Firmware Update Tool) which
7673 according to the site should contain the latest firmware for SSD
7674 disks. I inserted the broken disk in one of my spare laptops and
7675 booted the ISO from a USB stick. The disk was recognized, but the
7676 program claimed the newest firmware already were installed and refused
7677 to insert any Intel firmware. So no change, and the disk is still
7678 unable to handle write load. :( I guess the only way to get them
7679 working would be if Lenovo releases new firmware. No idea how likely
7680 that is. Anyway, just blogging about this test for completeness. I
7681 got a working Samsung disk, and see no point in spending more time on
7682 the broken disks.</p>
7683
7684 </div>
7685 <div class="tags">
7686
7687
7688 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
7689
7690
7691 </div>
7692 </div>
7693 <div class="padding"></div>
7694
7695 <div class="entry">
7696 <div class="title">
7697 <a href="http://people.skolelinux.org/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>
7698 </div>
7699 <div class="date">
7700 17th July 2013
7701 </div>
7702 <div class="body">
7703 <p>Today I switched to
7704 <a href="http://people.skolelinux.org/pere/blog/The_Thinkpad_is_dead__long_live_the_Thinkpad_X230_.html">my
7705 new laptop</a>. I've previously written about the problems I had with
7706 my new Thinkpad X230, which was delivered with an
7707 <a href="http://people.skolelinux.org/pere/blog/Intel_SSD_520_Series_180_GB_with_Lenovo_firmware_still_lock_up_from_sustained_writes.html">180
7708 GB Intel SSD disk with Lenovo firmware</a> that did not handle
7709 sustained writes. My hardware supplier have been very forthcoming in
7710 trying to find a solution, and after first trying with another
7711 identical 180 GB disks they decided to send me a 256 GB Samsung SSD
7712 disk instead to fix it once and for all. The Samsung disk survived
7713 the installation of Debian with encrypted disks (filling the disk with
7714 random data during installation killed the first two), and I thus
7715 decided to trust it with my data. I have installed it as a Debian Edu
7716 Wheezy roaming workstation hooked up with my Debian Edu Squeeze main
7717 server at home using Kerberos and LDAP, and will use it as my work
7718 station from now on.</p>
7719
7720 <p>As this is a solid state disk with no moving parts, I believe the
7721 Debian Wheezy default installation need to be tuned a bit to increase
7722 performance and increase life time of the disk. The Linux kernel and
7723 user space applications do not yet adjust automatically to such
7724 environment. To make it easier for my self, I created a draft Debian
7725 package <tt>ssd-setup</tt> to handle this tuning. The
7726 <a href="http://anonscm.debian.org/gitweb/?p=collab-maint/ssd-setup.git">source
7727 for the ssd-setup package</a> is available from collab-maint, and it
7728 is set up to adjust the setup of the machine by just installing the
7729 package. If there is any non-SSD disk in the machine, the package
7730 will refuse to install, as I did not try to write any logic to sort
7731 file systems in SSD and non-SSD file systems.</p>
7732
7733 <p>I consider the package a draft, as I am a bit unsure how to best
7734 set up Debian Wheezy with an SSD. It is adjusted to my use case,
7735 where I set up the machine with one large encrypted partition (in
7736 addition to /boot), put LVM on top of this and set up partitions on
7737 top of this again. See the README file in the package source for the
7738 references I used to pick the settings. At the moment these
7739 parameters are tuned:</p>
7740
7741 <ul>
7742
7743 <li>Set up cryptsetup to pass TRIM commands to the physical disk
7744 (adding discard to /etc/crypttab)</li>
7745
7746 <li>Set up LVM to pass on TRIM commands to the underlying device (in
7747 this case a cryptsetup partition) by changing issue_discards from
7748 0 to 1 in /etc/lvm/lvm.conf.</li>
7749
7750 <li>Set relatime as a file system option for ext3 and ext4 file
7751 systems.</li>
7752
7753 <li>Tell swap to use TRIM commands by adding 'discard' to
7754 /etc/fstab.</li>
7755
7756 <li>Change I/O scheduler from cfq to deadline using a udev rule.</li>
7757
7758 <li>Run fstrim on every ext3 and ext4 file system every night (from
7759 cron.daily).</li>
7760
7761 <li>Adjust sysctl values vm.swappiness to 1 and vm.vfs_cache_pressure
7762 to 50 to reduce the kernel eagerness to swap out processes.</li>
7763
7764 </ul>
7765
7766 <p>During installation, I cancelled the part where the installer fill
7767 the disk with random data, as this would kill the SSD performance for
7768 little gain. My goal with the encrypted file system is to ensure
7769 those stealing my laptop end up with a brick and not a working
7770 computer. I have no hope in keeping the really resourceful people
7771 from getting the data on the disk (see
7772 <a href="http://xkcd.com/538/">XKCD #538</a> for an explanation why).
7773 Thus I concluded that adding the discard option to crypttab is the
7774 right thing to do.</p>
7775
7776 <p>I considered using the noop I/O scheduler, as several recommended
7777 it for SSD, but others recommended deadline and a benchmark I found
7778 indicated that deadline might be better for interactive use.</p>
7779
7780 <p>I also considered using the 'discard' file system option for ext3
7781 and ext4, but read that it would give a performance hit ever time a
7782 file is removed, and thought it best to that that slowdown once a day
7783 instead of during my work.</p>
7784
7785 <p>My package do not set up tmpfs on /var/run, /var/lock and /tmp, as
7786 this is already done by Debian Edu.</p>
7787
7788 <p>I have not yet started on the user space tuning. I expect
7789 iceweasel need some tuning, and perhaps other applications too, but
7790 have not yet had time to investigate those parts.</p>
7791
7792 <p>The package should work on Ubuntu too, but I have not yet tested it
7793 there.</p>
7794
7795 <p>As for the answer to the question in the title of this blog post,
7796 as far as I know, the only solution I know about is to replace the
7797 disk. It might be possible to flash it with Intel firmware instead of
7798 the Lenovo firmware. But I have not tried and did not want to do so
7799 without approval from Lenovo as I wanted to keep the warranty on the
7800 disk until a solution was found and they wanted the broken disks
7801 back.</p>
7802
7803 </div>
7804 <div class="tags">
7805
7806
7807 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
7808
7809
7810 </div>
7811 </div>
7812 <div class="padding"></div>
7813
7814 <div class="entry">
7815 <div class="title">
7816 <a href="http://people.skolelinux.org/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>
7817 </div>
7818 <div class="date">
7819 10th July 2013
7820 </div>
7821 <div class="body">
7822 <p>A few days ago, I wrote about
7823 <a href="http://people.skolelinux.org/pere/blog/The_Thinkpad_is_dead__long_live_the_Thinkpad_X230_.html">the
7824 problems I experienced with my new X230 and its SSD disk</a>, which
7825 was dying during installation because it is unable to cope with
7826 sustained write. My supplier is in contact with
7827 <a href="http://www.lenovo.com/">Lenovo</a>, and they wanted to send a
7828 replacement disk to try to fix the problem. They decided to send an
7829 identical model, so my hopes for a permanent fix was slim.</p>
7830
7831 <p>Anyway, today I got the replacement disk and tried to install
7832 Debian Edu Wheezy with encrypted disk on it. The new disk have the
7833 same firmware version as the original. This time my hope raised
7834 slightly as the installation progressed, as the original disk used to
7835 die after 4-7% of the disk was written to, while this time it kept
7836 going past 10%, 20%, 40% and even past 50%. But around 60%, the disk
7837 died again and I was back on square one. I still do not have a new
7838 laptop with a disk I can trust. I can not live with a disk that might
7839 lock up when I download a new
7840 <a href="http://www.skolelinux.org/">Debian Edu / Skolelinux</a> ISO or
7841 other large files. I look forward to hearing from my supplier with
7842 the next proposal from Lenovo.</p>
7843
7844 <p>The original disk is marked Intel SSD 520 Series 180 GB,
7845 11S0C38722Z1ZNME35X1TR, ISN: CVCV321407HB180EGN, SA: G57560302, FW:
7846 LF1i, 29MAY2013, PBA: G39779-300, LBA 351,651,888, LI P/N: 0C38722,
7847 Pb-free 2LI, LC P/N: 16-200366, WWN: 55CD2E40002756C4, Model:
7848 SSDSC2BW180A3L 2.5" 6Gb/s SATA SSD 180G 5V 1A, ASM P/N 0C38732, FRU
7849 P/N 45N8295, P0C38732.</p>
7850
7851 <p>The replacement disk is marked Intel SSD 520 Series 180 GB,
7852 11S0C38722Z1ZNDE34N0L0, ISN: CVCV315306RK180EGN, SA: G57560-302, FW:
7853 LF1i, 22APR2013, PBA: G39779-300, LBA 351,651,888, LI P/N: 0C38722,
7854 Pb-free 2LI, LC P/N: 16-200366, WWN: 55CD2E40000AB69E, Model:
7855 SSDSC2BW180A3L 2.5" 6Gb/s SATA SSD 180G 5V 1A, ASM P/N 0C38732, FRU
7856 P/N 45N8295, P0C38732.</p>
7857
7858 <p>The only difference is in the first number (serial number?), ISN,
7859 SA, date and WNPP values. Mentioning all the details here in case
7860 someone is able to use the information to find a way to identify the
7861 failing disk among working ones (if any such working disk actually
7862 exist).</p>
7863
7864 </div>
7865 <div class="tags">
7866
7867
7868 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
7869
7870
7871 </div>
7872 </div>
7873 <div class="padding"></div>
7874
7875 <div class="entry">
7876 <div class="title">
7877 <a href="http://people.skolelinux.org/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>
7878 </div>
7879 <div class="date">
7880 9th July 2013
7881 </div>
7882 <div class="body">
7883 <p>The upcoming Saturday, 2013-07-13, we are organising a combined
7884 Debian Edu developer gathering and Debian and Ubuntu bug squashing
7885 party in Oslo. It is organised by <a href="http://www.nuug.no/">the
7886 member assosiation NUUG</a> and
7887 <a href="http://www.skolelinux.org/">the Debian Edu / Skolelinux
7888 project</a> together with <a href="http://bitraf.no/">the hack space
7889 Bitraf</a>.</p>
7890
7891 <p>It starts 10:00 and continue until late evening. Everyone is
7892 welcome, and there is no fee to participate. There is on the other
7893 hand limited space, and only room for 30 people. Please put your name
7894 on <a href="http://wiki.debian.org/BSP/2013/07/13/no/Oslo">the event
7895 wiki page</a> if you plan to join us.</p>
7896
7897 </div>
7898 <div class="tags">
7899
7900
7901 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
7902
7903
7904 </div>
7905 </div>
7906 <div class="padding"></div>
7907
7908 <div class="entry">
7909 <div class="title">
7910 <a href="http://people.skolelinux.org/pere/blog/The_Thinkpad_is_dead__long_live_the_Thinkpad_X230_.html">The Thinkpad is dead, long live the Thinkpad X230?</a>
7911 </div>
7912 <div class="date">
7913 5th July 2013
7914 </div>
7915 <div class="body">
7916 <p>Half a year ago, I reported that I had to find a
7917 <a href="http://people.skolelinux.org/pere/blog/Thank_you_Thinkpad_X41__for_your_long_and_trustworthy_service.html">replacement
7918 for my trusty old Thinkpad X41</a>. Unfortunately I did not have much
7919 time to spend on it, and it took a while to find a model I believe
7920 will do the job, but two days ago the replacement finally arrived. I
7921 ended up picking a
7922 <a href="http://www.linlap.com/lenovo_thinkpad_x230">Thinkpad X230</a>
7923 with SSD disk (NZDAJMN). I first test installed Debian Edu Wheezy as
7924 a roaming workstation, and it seemed to work flawlessly. But my
7925 second installation with encrypted disk was not as successful. More
7926 on that below.</p>
7927
7928 <p>I had a hard time trying to track down a good laptop, as my most
7929 important requirements (robust and with a good keyboard) are never
7930 listed in the feature list. But I did get good help from the search
7931 feature at <a href="http://www.prisjakt.no/">Prisjakt</a>, which
7932 allowed me to limit the list of interesting laptops based on my other
7933 requirements. A bit surprising that SSD disk are not disks according
7934 to that search interface, so I had to drop specifying the number of
7935 disks from my search parameters. I also asked around among friends to
7936 get their impression on keyboards and robustness.</p>
7937
7938 <p>So the new laptop arrived, and it is quite a lot wider than the
7939 X41. I am not quite convinced about the keyboard, as it is
7940 significantly wider than my old keyboard, and I have to stretch my
7941 hand a lot more to reach the edges. But the key response is fairly
7942 good and the individual key shape is fairly easy to handle, so I hope
7943 I will get used to it. My old X40 was starting to fail, and I really
7944 needed a new laptop now. :)</p>
7945
7946 <p>Turning off the touch pad was simple. All it took was a quick
7947 visit to the BIOS during boot it disable it.</p>
7948
7949 <p>But there is a fatal problem with the laptop. The 180 GB SSD disk
7950 lock up during load. And this happen when installing Debian Wheezy
7951 with encrypted disk, while the disk is being filled with random data.
7952 I also tested to install Ubuntu Raring, and it happen there too if I
7953 reenable the code to fill the disk with random data (it is disabled by
7954 default in Ubuntu). And the bug with is already known. It was
7955 reported to Debian as <a href="http://bugs.debian.org/691427">BTS
7956 report #691427 2012-10-25</a> (journal commit I/O error on brand-new
7957 Thinkpad T430s ext4 on lvm on SSD). It is also reported to the Linux
7958 kernel developers as
7959 <a href="https://bugzilla.kernel.org/show_bug.cgi?id=51861">Kernel bugzilla
7960 report #51861 2012-12-20</a> (Intel SSD 520 stops working under load
7961 (SSDSC2BW180A3L in Lenovo ThinkPad T430s)). It is also reported on the
7962 Lenovo forums, both for
7963 <a href="http://forums.lenovo.com/t5/T400-T500-and-newer-T-series/T430s-Intel-SSD-520-180GB-issue/m-p/1070549">T430
7964 2012-11-10</a> and for
7965 <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
7966 03-20-2013</a>. The problem do not only affect installation. The
7967 reports state that the disk lock up during use if many writes are done
7968 on the disk, so it is much no use to work around the installation
7969 problem and end up with a computer that can lock up at any moment.
7970 There is even a
7971 <a href="https://git.efficios.com/?p=test-ssd.git">small C program
7972 available</a> that will lock up the hard drive after running a few
7973 minutes by writing to a file.</p>
7974
7975 <p>I've contacted my supplier and asked how to handle this, and after
7976 contacting PCHELP Norway (request 01D1FDP) which handle support
7977 requests for Lenovo, his first suggestion was to upgrade the disk
7978 firmware. Unfortunately there is no newer firmware available from
7979 Lenovo, as my disk already have the most recent one (version LF1i). I
7980 hope to hear more from him today and hope the problem can be
7981 fixed. :)</p>
7982
7983 </div>
7984 <div class="tags">
7985
7986
7987 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
7988
7989
7990 </div>
7991 </div>
7992 <div class="padding"></div>
7993
7994 <div class="entry">
7995 <div class="title">
7996 <a href="http://people.skolelinux.org/pere/blog/The_Thinkpad_is_dead__long_live_the_Thinkpad_X230.html">The Thinkpad is dead, long live the Thinkpad X230</a>
7997 </div>
7998 <div class="date">
7999 4th July 2013
8000 </div>
8001 <div class="body">
8002 <p>Half a year ago, I reported that I had to find a replacement for my
8003 trusty old Thinkpad X41. Unfortunately I did not have much time to
8004 spend on it, but today the replacement finally arrived. I ended up
8005 picking a <a href="http://www.linlap.com/lenovo_thinkpad_x230">Thinkpad
8006 X230</a> with SSD disk (NZDAJMN). I first test installed Debian Edu
8007 Wheezy as a roaming workstation, and it worked flawlessly. As I write
8008 this, it is installing what I hope will be a more final installation,
8009 with a encrypted hard drive to ensure any dope head stealing it end up
8010 with an expencive door stop.</p>
8011
8012 <p>I had a hard time trying to track down a good laptop, as my most
8013 important requirements (robust and with a good keyboard) are never
8014 listed in the feature list. But I did get good help from the search
8015 feature at <ahref="http://www.prisjakt.no/">Prisjakt</a>, which
8016 allowed me to limit the list of interesting laptops based on my other
8017 requirements. A bit surprising that SSD disk are not disks, so I had
8018 to drop number of disks from my search parameters.</p>
8019
8020 <p>I am not quite convinced about the keyboard, as it is significantly
8021 wider than my old keyboard, and I have to stretch my hand a lot more
8022 to reach the edges. But the key response is fairly good and the
8023 individual key shape is fairly easy to handle, so I hope I will get
8024 used to it. My old X40 was starting to fail, and I really needed a
8025 new laptop now. :)</p>
8026
8027 <p>I look forward to figuring out how to turn off the touch pad.</p>
8028
8029 </div>
8030 <div class="tags">
8031
8032
8033 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
8034
8035
8036 </div>
8037 </div>
8038 <div class="padding"></div>
8039
8040 <div class="entry">
8041 <div class="title">
8042 <a href="http://people.skolelinux.org/pere/blog/Automatically_locate_and_install_required_firmware_packages_on_Debian__Isenkram_0_4_.html">Automatically locate and install required firmware packages on Debian (Isenkram 0.4)</a>
8043 </div>
8044 <div class="date">
8045 25th June 2013
8046 </div>
8047 <div class="body">
8048 <p>It annoys me when the computer fail to do automatically what it is
8049 perfectly capable of, and I have to do it manually to get things
8050 working. One such task is to find out what firmware packages are
8051 needed to get the hardware on my computer working. Most often this
8052 affect the wifi card, but some times it even affect the RAID
8053 controller or the ethernet card. Today I pushed version 0.4 of the
8054 <a href="http://packages.qa.debian.org/isenkram">Isenkram package</a>
8055 including a new script isenkram-autoinstall-firmware handling the
8056 process of asking all the loaded kernel modules what firmware files
8057 they want, find debian packages providing these files and install the
8058 debian packages. Here is a test run on my laptop:</p>
8059
8060 <p><pre>
8061 # isenkram-autoinstall-firmware
8062 info: kernel drivers requested extra firmware: ipw2200-bss.fw ipw2200-ibss.fw ipw2200-sniffer.fw
8063 info: fetching http://http.debian.net/debian/dists/squeeze/Contents-i386.gz
8064 info: locating packages with the requested firmware files
8065 info: Updating APT sources after adding non-free APT source
8066 info: trying to install firmware-ipw2x00
8067 firmware-ipw2x00
8068 firmware-ipw2x00
8069 Preconfiguring packages ...
8070 Selecting previously deselected package firmware-ipw2x00.
8071 (Reading database ... 259727 files and directories currently installed.)
8072 Unpacking firmware-ipw2x00 (from .../firmware-ipw2x00_0.28+squeeze1_all.deb) ...
8073 Setting up firmware-ipw2x00 (0.28+squeeze1) ...
8074 #
8075 </pre></p>
8076
8077 <p>When all the requested firmware is present, a simple message is
8078 printed instead:</p>
8079
8080 <p><pre>
8081 # isenkram-autoinstall-firmware
8082 info: did not find any firmware files requested by loaded kernel modules. exiting
8083 #
8084 </pre></p>
8085
8086 <p>It could use some polish, but it is already working well and saving
8087 me some time when setting up new machines. :)</p>
8088
8089 <p>So, how does it work? It look at the set of currently loaded
8090 kernel modules, and look up each one of them using modinfo, to find
8091 the firmware files listed in the module meta-information. Next, it
8092 download the Contents file from a nearby APT mirror, and search for
8093 the firmware files in this file to locate the package with the
8094 requested firmware file. If the package is in the non-free section, a
8095 non-free APT source is added and the package is installed using
8096 <tt>apt-get install</tt>. The end result is a slightly better working
8097 machine.</p>
8098
8099 <p>I hope someone find time to implement a more polished version of
8100 this script as part of the hw-detect debian-installer module, to
8101 finally fix <a href="http://bugs.debian.org/655507">BTS report
8102 #655507</a>. There really is no need to insert USB sticks with
8103 firmware during a PXE install when the packages already are available
8104 from the nearby Debian mirror.</p>
8105
8106 </div>
8107 <div class="tags">
8108
8109
8110 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
8111
8112
8113 </div>
8114 </div>
8115 <div class="padding"></div>
8116
8117 <div class="entry">
8118 <div class="title">
8119 <a href="http://people.skolelinux.org/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>
8120 </div>
8121 <div class="date">
8122 11th June 2013
8123 </div>
8124 <div class="body">
8125 <p>When installing RedHat, Fedora, Debian and Ubuntu on some machines,
8126 the screen just turn black when Linux boot, either during installation
8127 or on first boot from the hard disk. I've seen it once in a while the
8128 last few years, but only recently understood the cause. I've seen it
8129 on HP laptops, and on my latest acquaintance the Packard Bell laptop.
8130 The reason seem to be in the wiring of some laptops. The system to
8131 control the screen background light is inverted, so when Linux try to
8132 turn the brightness fully on, it end up turning it off instead. I do
8133 not know which Linux drivers are affected, but this post is about the
8134 i915 driver used by the
8135 <a href="http://www.linlap.com/packard_bell_easynote_lv">Packard Bell
8136 EasyNote LV</a>, Thinkpad X40 and many other laptops.</p>
8137
8138 <p>The problem can be worked around two ways. Either by adding
8139 i915.invert_brightness=1 as a kernel option, or by adding a file in
8140 /etc/modprobe.d/ to tell modprobe to add the invert_brightness=1
8141 option when it load the i915 kernel module. On Debian and Ubuntu, it
8142 can be done by running these commands as root:</p>
8143
8144 <pre>
8145 echo options i915 invert_brightness=1 | tee /etc/modprobe.d/i915.conf
8146 update-initramfs -u -k all
8147 </pre>
8148
8149 <p>Since March 2012 there is
8150 <a href="http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4dca20efb1a9c2efefc28ad2867e5d6c3f5e1955">a
8151 mechanism in the Linux kernel</a> to tell the i915 driver which
8152 hardware have this problem, and get the driver to invert the
8153 brightness setting automatically. To use it, one need to add a row in
8154 <a href="http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/i915/intel_display.c">the
8155 intel_quirks array</a> in the driver source
8156 <tt>drivers/gpu/drm/i915/intel_display.c</tt> (look for "<tt>static
8157 struct intel_quirk intel_quirks</tt>"), specifying the PCI device
8158 number (vendor number 8086 is assumed) and subdevice vendor and device
8159 number.</p>
8160
8161 <p>My Packard Bell EasyNote LV got this output from <tt>lspci
8162 -vvnn</tt> for the video card in question:</p>
8163
8164 <p><pre>
8165 00:02.0 VGA compatible controller [0300]: Intel Corporation \
8166 3rd Gen Core processor Graphics Controller [8086:0156] \
8167 (rev 09) (prog-if 00 [VGA controller])
8168 Subsystem: Acer Incorporated [ALI] Device [1025:0688]
8169 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- \
8170 ParErr- Stepping- SE RR- FastB2B- DisINTx+
8171 Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- \
8172 <TAbort- <MAbort->SERR- <PERR- INTx-
8173 Latency: 0
8174 Interrupt: pin A routed to IRQ 42
8175 Region 0: Memory at c2000000 (64-bit, non-prefetchable) [size=4M]
8176 Region 2: Memory at b0000000 (64-bit, prefetchable) [size=256M]
8177 Region 4: I/O ports at 4000 [size=64]
8178 Expansion ROM at <unassigned> [disabled]
8179 Capabilities: <access denied>
8180 Kernel driver in use: i915
8181 </pre></p>
8182
8183 <p>The resulting intel_quirks entry would then look like this:</p>
8184
8185 <p><pre>
8186 struct intel_quirk intel_quirks[] = {
8187 ...
8188 /* Packard Bell EasyNote LV11HC needs invert brightness quirk */
8189 { 0x0156, 0x1025, 0x0688, quirk_invert_brightness },
8190 ...
8191 }
8192 </pre></p>
8193
8194 <p>According to the kernel module instructions (as seen using
8195 <tt>modinfo i915</tt>), information about hardware needing the
8196 invert_brightness flag should be sent to the
8197 <a href="http://lists.freedesktop.org/mailman/listinfo/dri-devel">dri-devel
8198 (at) lists.freedesktop.org</a> mailing list to reach the kernel
8199 developers. But my email about the laptop sent 2013-06-03 have not
8200 yet shown up in
8201 <a href="http://lists.freedesktop.org/archives/dri-devel/2013-June/thread.html">the
8202 web archive for the mailing list</a>, so I suspect they do not accept
8203 emails from non-subscribers. Because of this, I sent my patch also to
8204 the Debian bug tracking system instead as
8205 <a href="http://bugs.debian.org/710938">BTS report #710938</a>, to make
8206 sure the patch is not lost.</p>
8207
8208 <p>Unfortunately, it is not enough to fix the kernel to get Laptops
8209 with this problem working properly with Linux. If you use Gnome, your
8210 worries should be over at this point. But if you use KDE, there is
8211 something in KDE ignoring the invert_brightness setting and turning on
8212 the screen during login. I've reported it to Debian as
8213 <a href="http://bugs.debian.org/711237">BTS report #711237</a>, and
8214 have no idea yet how to figure out exactly what subsystem is doing
8215 this. Perhaps you can help? Perhaps you know what the Gnome
8216 developers did to handle this, and this can give a clue to the KDE
8217 developers? Or you know where in KDE the screen brightness is changed
8218 during login? If so, please update the BTS report (or get in touch if
8219 you do not know how to update BTS).</p>
8220
8221 <p>Update 2013-07-19: The correct fix for this machine seem to be
8222 acpi_backlight=vendor, to disable ACPI backlight support completely,
8223 as the ACPI information on the machine is trash and it is better to
8224 leave it to the intel video driver to control the screen
8225 backlight.</p>
8226
8227 </div>
8228 <div class="tags">
8229
8230
8231 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
8232
8233
8234 </div>
8235 </div>
8236 <div class="padding"></div>
8237
8238 <div class="entry">
8239 <div class="title">
8240 <a href="http://people.skolelinux.org/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>
8241 </div>
8242 <div class="date">
8243 27th May 2013
8244 </div>
8245 <div class="body">
8246 <p>Two days ago, I asked
8247 <a href="http://people.skolelinux.org/pere/blog/How_can_I_install_Linux_on_a_Packard_Bell_Easynote_LV_preinstalled_with_Windows_8_.html">how
8248 I could install Linux on a Packard Bell EasyNote LV computer
8249 preinstalled with Windows 8</a>. I found a solution, but am horrified
8250 with the obstacles put in the way of Linux users on a laptop with UEFI
8251 and Windows 8.</p>
8252
8253 <p>I never found out if the cause of my problems were the use of UEFI
8254 secure booting or fast boot. I suspect fast boot was the problem,
8255 causing the firmware to boot directly from HD without considering any
8256 key presses and alternative devices, but do not know UEFI settings
8257 enough to tell.</p>
8258
8259 <p>There is no way to install Linux on the machine in question without
8260 opening the box and disconnecting the hard drive! This is as far as I
8261 can tell, the only way to get access to the firmware setup menu
8262 without accepting the Windows 8 license agreement. I am told (and
8263 found description on how to) that it is possible to configure the
8264 firmware setup once booted into Windows 8. But as I believe the terms
8265 of that agreement are completely unacceptable, accepting the license
8266 was never an alternative. I do not enter agreements I do not intend
8267 to follow.</p>
8268
8269 <p>I feared I had to return the laptops and ask for a refund, and
8270 waste many hours on this, but luckily there was a way to get it to
8271 work. But I would not recommend it to anyone planning to run Linux on
8272 it, and I have become sceptical to Windows 8 certified laptops. Is
8273 this the way Linux will be forced out of the market place, by making
8274 it close to impossible for "normal" users to install Linux without
8275 accepting the Microsoft Windows license terms? Or at least not
8276 without risking to loose the warranty?</p>
8277
8278 <p>I've updated the
8279 <a href="http://www.linlap.com/packard_bell_easynote_lv">Linux Laptop
8280 wiki page for Packard Bell EasyNote LV</a>, to ensure the next person
8281 do not have to struggle as much as I did to get Linux into the
8282 machine.</p>
8283
8284 <p>Thanks to Bob Rosbag, Florian Weimer, Philipp Kern, Ben Hutching,
8285 Michael Tokarev and others for feedback and ideas.</p>
8286
8287 </div>
8288 <div class="tags">
8289
8290
8291 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
8292
8293
8294 </div>
8295 </div>
8296 <div class="padding"></div>
8297
8298 <div class="entry">
8299 <div class="title">
8300 <a href="http://people.skolelinux.org/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>
8301 </div>
8302 <div class="date">
8303 25th May 2013
8304 </div>
8305 <div class="body">
8306 <p>I've run into quite a problem the last few days. I bought three
8307 new laptops for my parents and a few others. I bought Packard Bell
8308 Easynote LV to run Kubuntu on and use as their home computer. But I
8309 am completely unable to figure out how to install Linux on it. The
8310 computer is preinstalled with Windows 8, and I suspect it uses UEFI
8311 instead of a BIOS to boot.</p>
8312
8313 <p>The problem is that I am unable to get it to PXE boot, and unable
8314 to get it to boot the Linux installer from my USB stick. I have yet
8315 to try the DVD install, and still hope it will work. when I turn on
8316 the computer, there is no information on what buttons to press to get
8317 the normal boot menu. I expect to get some boot menu to select PXE or
8318 USB stick booting. When booting, it first ask for the language to
8319 use, then for some regional settings, and finally if I will accept the
8320 Windows 8 terms of use. As these terms are completely unacceptable to
8321 me, I have no other choice but to turn off the computer and try again
8322 to get it to boot the Linux installer.</p>
8323
8324 <p>I have gathered my findings so far on a Linlap page about the
8325 <a href="http://www.linlap.com/packard_bell_easynote_lv">Packard Bell
8326 EasyNote LV</a> model. If you have any idea how to get Linux
8327 installed on this machine, please get in touch or update that wiki
8328 page. If I can't find a way to install Linux, I will have to return
8329 the laptop to the seller and find another machine for my parents.</p>
8330
8331 <p>I wonder, is this the way Linux will be forced out of the market
8332 using UEFI and "secure boot" by making it impossible to install Linux
8333 on new Laptops?</p>
8334
8335 </div>
8336 <div class="tags">
8337
8338
8339 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
8340
8341
8342 </div>
8343 </div>
8344 <div class="padding"></div>
8345
8346 <div class="entry">
8347 <div class="title">
8348 <a href="http://people.skolelinux.org/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>
8349 </div>
8350 <div class="date">
8351 17th May 2013
8352 </div>
8353 <div class="body">
8354 <p><a href="http://www.skolelinux.org/">Debian Edu / Skolelinux</a> is
8355 an operating system based on Debian intended for use in schools. It
8356 contain a turn-key solution for the computer network provided to
8357 pupils in the primary schools. It provide both the central server,
8358 network boot servers and desktop environments with heaps of
8359 educational software. The project was founded almost 12 years ago,
8360 2001-07-02. If you want to support the project, which is in need for
8361 cash to fund developer gatherings and other project related activity,
8362 <a href="http://www.linuxiskolen.no/slxdebianlabs/donations.html">please
8363 donate some money</a>.
8364
8365 <p>A topic that come up again and again on the Debian Edu mailing
8366 lists and elsewhere, is the question on how to transform a Debian or
8367 Ubuntu installation into a Debian Edu installation. It isn't very
8368 hard, and last week I wrote a script to replicate the steps done by
8369 the Debian Edu installer.</p>
8370
8371 <p>The script,
8372 <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/>
8373 in the debian-edu-config package, will go through these six steps and
8374 transform an existing Debian Wheezy or Ubuntu (untested) installation
8375 into a Debian Edu Workstation:</p>
8376
8377 <ol>
8378
8379 <li>Add skolelinux related APT sources.</li>
8380 <li>Create /etc/debian-edu/config with the wanted configuration.</li>
8381 <li>Install debian-edu-install to load preseeding values and pull in
8382 our configuration.</li>
8383 <li>Preseed debconf database with profile setup in
8384 /etc/debian-edu/config, and run tasksel to install packages
8385 according to the profile specified in the config above,
8386 overriding some of the Debian automation machinery.</li>
8387 <li>Run debian-edu-cfengine-D installation to configure everything
8388 that could not be done using preseeding.</li>
8389 <li>Ask for a reboot to enable all the configuration changes.</li>
8390
8391 </ol>
8392
8393 <p>There are some steps in the Debian Edu installation that can not be
8394 replicated like this. Disk partitioning and LVM setup, for example.
8395 So this script just assume there is enough disk space to install all
8396 the needed packages.</p>
8397
8398 <p>The script was created to help a Debian Edu student working on
8399 setting up <a href="http://www.raspberrypi.org">Raspberry Pi</a> as a
8400 Debian Edu client, and using it he can take the existing
8401 <a href="http://www.raspbian.org/FrontPage‎">Raspbian</a> installation and
8402 transform it into a fully functioning Debian Edu Workstation (or
8403 Roaming Workstation, or whatever :).</p>
8404
8405 <p>The default setting in the script is to create a KDE Workstation.
8406 If a LXDE based Roaming workstation is wanted instead, modify the
8407 PROFILE and DESKTOP values at the top to look like this instead:</p>
8408
8409 <p><pre>
8410 PROFILE="Roaming-Workstation"
8411 DESKTOP="lxde"
8412 </pre></p>
8413
8414 <p>The script could even become useful to set up Debian Edu servers in
8415 the cloud, by starting with a virtual Debian installation at some
8416 virtual hosting service and setting up all the services on first
8417 boot.</p>
8418
8419 </div>
8420 <div class="tags">
8421
8422
8423 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
8424
8425
8426 </div>
8427 </div>
8428 <div class="padding"></div>
8429
8430 <div class="entry">
8431 <div class="title">
8432 <a href="http://people.skolelinux.org/pere/blog/Debian__the_Linux_distribution_of_choice_for_LEGO_designers_.html">Debian, the Linux distribution of choice for LEGO designers?</a>
8433 </div>
8434 <div class="date">
8435 11th May 2013
8436 </div>
8437 <div class="body">
8438 <P>In January,
8439 <a href="http://people.skolelinux.org/pere/blog/New_IRC_channel_for_LEGO_designers_using_Debian.html">I
8440 announced a</a> new <a href="irc://irc.debian.org/%23debian-lego">IRC
8441 channel #debian-lego</a>, for those of us in the Debian and Linux
8442 community interested in <a href="http://www.lego.com/">LEGO</a>, the
8443 marvellous construction system from Denmark. We also created
8444 <a href="http://wiki.debian.org/LegoDesigners">a wiki page</a> to have
8445 a place to take notes and write down our plans and hopes. And several
8446 people showed up to help. I was very happy to see the effect of my
8447 call. Since the small start, we have a debtags tag
8448 <a href="http://debtags.debian.net/search/bytag?wl=hardware::hobby:lego">hardware::hobby:lego</a>
8449 tag for LEGO related packages, and now count 10 packages related to
8450 LEGO and <a href="http://mindstorms.lego.com/">Mindstorms</a>:</p>
8451
8452 <p><table>
8453 <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>
8454 <tr><td><a href="http://packages.qa.debian.org/leocad">leocad</a></td><td>virtual brick CAD software</td></tr>
8455 <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>
8456 <tr><td><a href="http://packages.qa.debian.org/lnpd">lnpd</a></td><td>daemon for LNP communication with BrickOS</td></tr>
8457 <tr><td><a href="http://packages.qa.debian.org/nbc">nbc</a></td><td>compiler for LEGO Mindstorms NXT bricks</td></tr>
8458 <tr><td><a href="http://packages.qa.debian.org/nqc">nqc</a></td><td>Not Quite C compiler for LEGO Mindstorms RCX</td></tr>
8459 <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>
8460 <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>
8461 <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>
8462 <tr><td><a href="http://packages.qa.debian.org/t2n">t2n</a></td><td>simple command-line tool for Lego NXT</td></tr>
8463 </table></p>
8464
8465 <p>Some of these are available in Wheezy, and all but one are
8466 currently available in Jessie/testing. leocad is so far only
8467 available in experimental.</p>
8468
8469 <p>If you care about LEGO in Debian, please join us on IRC and help
8470 adding the rest of the great free software tools available on Linux
8471 for LEGO designers.</p>
8472
8473 </div>
8474 <div class="tags">
8475
8476
8477 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/lego">lego</a>, <a href="http://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
8478
8479
8480 </div>
8481 </div>
8482 <div class="padding"></div>
8483
8484 <div class="entry">
8485 <div class="title">
8486 <a href="http://people.skolelinux.org/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>
8487 </div>
8488 <div class="date">
8489 5th May 2013
8490 </div>
8491 <div class="body">
8492 <p>When I woke up this morning, I was very happy to see that the
8493 <a href="http://www.debian.org/News/2013/20130504">release announcement
8494 for Debian Wheezy</a> was waiting in my mail box. This is a great
8495 Debian release, and I expect to move my machines at home over to it fairly
8496 soon.</p>
8497
8498 <p>The new debian release contain heaps of new stuff, and one program
8499 in particular make me very happy to see included. The
8500 <a href="http://scratch.mit.edu/">Scratch</a> program, made famous by
8501 the <a href="http://www.code.org/">Teach kids code</a> movement, is
8502 included for the first time. Alongside similar programs like
8503 <a href="http://edu.kde.org/kturtle/">kturtle</a> and
8504 <a href="http://wiki.sugarlabs.org/go/Activities/Turtle_Art">turtleart</a>,
8505 it allow for visual programming where syntax errors can not happen,
8506 and a friendly programming environment for learning to control the
8507 computer. Scratch will also be included in the next release of Debian
8508 Edu.</a>
8509
8510 <p>And now that Wheezy is wrapped up, we can wrap up the next Debian
8511 Edu/Skolelinux release too. The
8512 <a href="http://lists.debian.org/debian-edu/2013/04/msg00132.html">first
8513 alpha release</a> went out last week, and the next should soon
8514 follow.<p>
8515
8516 </div>
8517 <div class="tags">
8518
8519
8520 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
8521
8522
8523 </div>
8524 </div>
8525 <div class="padding"></div>
8526
8527 <div class="entry">
8528 <div class="title">
8529 <a href="http://people.skolelinux.org/pere/blog/Isenkram_0_2_finally_in_the_Debian_archive.html">Isenkram 0.2 finally in the Debian archive</a>
8530 </div>
8531 <div class="date">
8532 3rd April 2013
8533 </div>
8534 <div class="body">
8535 <p>Today the <a href="http://packages.qa.debian.org/isenkram">Isenkram
8536 package</a> finally made it into the archive, after lingering in NEW
8537 for many months. I uploaded it to the Debian experimental suite
8538 2013-01-27, and today it was accepted into the archive.</p>
8539
8540 <p>Isenkram is a system for suggesting to users what packages to
8541 install to work with a pluggable hardware device. The suggestion pop
8542 up when the device is plugged in. For example if a Lego Mindstorm NXT
8543 is inserted, it will suggest to install the program needed to program
8544 the NXT controller. Give it a go, and report bugs and suggestions to
8545 BTS. :)</p>
8546
8547 </div>
8548 <div class="tags">
8549
8550
8551 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
8552
8553
8554 </div>
8555 </div>
8556 <div class="padding"></div>
8557
8558 <div class="entry">
8559 <div class="title">
8560 <a href="http://people.skolelinux.org/pere/blog/Bitcoin_GUI_now_available_from_Debian_unstable__and_Ubuntu_raring_.html">Bitcoin GUI now available from Debian/unstable (and Ubuntu/raring)</a>
8561 </div>
8562 <div class="date">
8563 2nd February 2013
8564 </div>
8565 <div class="body">
8566 <p>My
8567 <a href="http://people.skolelinux.org/pere/blog/How_to_backport_bitcoin_qt_version_0_7_2_2_to_Debian_Squeeze.html">last
8568 bitcoin related blog post</a> mentioned that the new
8569 <a href="http://packages.qa.debian.org/bitcoin">bitcoin package</a> for
8570 Debian was waiting in NEW. It was accepted by the Debian ftp-masters
8571 2013-01-19, and have been available in unstable since then. It was
8572 automatically copied to Ubuntu, and is available in their Raring
8573 version too.</p>
8574
8575 <p>But there is a strange problem with the build that block this new
8576 version from being available on the i386 and kfreebsd-i386
8577 architectures. For some strange reason, the autobuilders in Debian
8578 for these architectures fail to run the test suite on these
8579 architectures (<a href="http://bugs.debian.org/672524">BTS #672524</a>).
8580 We are so far unable to reproduce it when building it manually, and
8581 no-one have been able to propose a fix. If you got an idea what is
8582 failing, please let us know via the BTS.</p>
8583
8584 <p>One feature that is annoying me with of the bitcoin client, because
8585 I often run low on disk space, is the fact that the client will exit
8586 if it run short on space (<a href="http://bugs.debian.org/696715">BTS
8587 #696715</a>). So make sure you have enough disk space when you run
8588 it. :)</p>
8589
8590 <p>As usual, if you use bitcoin and want to show your support of my
8591 activities, please send Bitcoin donations to my address
8592 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
8593
8594 </div>
8595 <div class="tags">
8596
8597
8598 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
8599
8600
8601 </div>
8602 </div>
8603 <div class="padding"></div>
8604
8605 <div class="entry">
8606 <div class="title">
8607 <a href="http://people.skolelinux.org/pere/blog/Welcome_to_the_world__Isenkram_.html">Welcome to the world, Isenkram!</a>
8608 </div>
8609 <div class="date">
8610 22nd January 2013
8611 </div>
8612 <div class="body">
8613 <p>Yesterday, I
8614 <a href="http://people.skolelinux.org/pere/blog/First_prototype_ready_making_hardware_easier_to_use_in_Debian.html">asked
8615 for testers</a> for my prototype for making Debian better at handling
8616 pluggable hardware devices, which I
8617 <a href="http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">set
8618 out to create</a> earlier this month. Several valuable testers showed
8619 up, and caused me to really want to to open up the development to more
8620 people. But before I did this, I want to come up with a sensible name
8621 for this project. Today I finally decided on a new name, and I have
8622 renamed the project from hw-support-handler to this new name. In the
8623 process, I moved the source to git and made it available as a
8624 <a href="http://anonscm.debian.org/gitweb/?p=collab-maint/isenkram.git">collab-maint</a>
8625 repository in Debian. The new name? It is <strong>Isenkram</strong>.
8626 To fetch and build the latest version of the source, use</p>
8627
8628 <pre>
8629 git clone http://anonscm.debian.org/git/collab-maint/isenkram.git
8630 cd isenkram && git-buildpackage -us -uc
8631 </pre>
8632
8633 <p>I have not yet adjusted all files to use the new name yet. If you
8634 want to hack on the source or improve the package, please go ahead.
8635 But please talk to me first on IRC or via email before you do major
8636 changes, to make sure we do not step on each others toes. :)</p>
8637
8638 <p>If you wonder what 'isenkram' is, it is a Norwegian word for iron
8639 stuff, typically meaning tools, nails, screws, etc. Typical hardware
8640 stuff, in other words. I've been told it is the Norwegian variant of
8641 the German word eisenkram, for those that are familiar with that
8642 word.</p>
8643
8644 <p><strong>Update 2013-01-26</strong>: Added -us -us to build
8645 instructions, to avoid confusing people with an error from the signing
8646 process.</p>
8647
8648 <p><strong>Update 2013-01-27</strong>: Switch to HTTP URL for the git
8649 clone argument to avoid the need for authentication.</p>
8650
8651 </div>
8652 <div class="tags">
8653
8654
8655 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
8656
8657
8658 </div>
8659 </div>
8660 <div class="padding"></div>
8661
8662 <div class="entry">
8663 <div class="title">
8664 <a href="http://people.skolelinux.org/pere/blog/First_prototype_ready_making_hardware_easier_to_use_in_Debian.html">First prototype ready making hardware easier to use in Debian</a>
8665 </div>
8666 <div class="date">
8667 21st January 2013
8668 </div>
8669 <div class="body">
8670 <p>Early this month I set out to try to
8671 <a href="http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">improve
8672 the Debian support for pluggable hardware devices</a>. Now my
8673 prototype is working, and it is ready for a larger audience. To test
8674 it, fetch the
8675 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/">source
8676 from the Debian Edu subversion repository</a>, build and install the
8677 package. You might have to log out and in again activate the
8678 autostart script.</p>
8679
8680 <p>The design is simple:</p>
8681
8682 <ul>
8683
8684 <li>Add desktop entry in /usr/share/autostart/ causing a program
8685 hw-support-handlerd to start when the user log in.</li>
8686
8687 <li>This program listen for kernel events about new hardware (directly
8688 from the kernel like udev does), not using HAL dbus events as I
8689 initially did.</li>
8690
8691 <li>When new hardware is inserted, look up the hardware modalias in
8692 the APT database, a database
8693 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/modaliases?view=markup">available
8694 via HTTP</a> and a database available as part of the package.</li>
8695
8696 <li>If a package is mapped to the hardware in question, the package
8697 isn't installed yet and this is the first time the hardware was
8698 plugged in, show a desktop notification suggesting to install the
8699 package or packages.</li>
8700
8701 <li>If the user click on the 'install package now' button, ask
8702 aptdaemon via the PackageKit API to install the requrired package.</li>
8703
8704 <li>aptdaemon ask for root password or sudo password, and install the
8705 package while showing progress information in a window.</li>
8706
8707 </ul>
8708
8709 <p>I still need to come up with a better name for the system. Here
8710 are some screen shots showing the prototype in action. First the
8711 notification, then the password request, and finally the request to
8712 approve all the dependencies. Sorry for the Norwegian Bokmål GUI.</p>
8713
8714 <p><img src="http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-1-notification.png">
8715 <br><img src="http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-2-password.png">
8716 <br><img src="http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-3-dependencies.png">
8717 <br><img src="http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-4-installing.png">
8718 <br><img src="http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-5-installing-details.png" width="70%"></p>
8719
8720 <p>The prototype still need to be improved with longer timeouts, but
8721 is already useful. The database of hardware to package mappings also
8722 need more work. It is currently compatible with the Ubuntu way of
8723 storing such information in the package control file, but could be
8724 changed to use other formats instead or in addition to the current
8725 method. I've dropped the use of discover for this mapping, as the
8726 modalias approach is more flexible and easier to use on Linux as long
8727 as the Linux kernel expose its modalias strings directly.</p>
8728
8729 <p><strong>Update 2013-01-21 16:50</strong>: Due to popular demand,
8730 here is the command required to check out and build the source: Use
8731 '<tt>svn checkout
8732 svn://svn.debian.org/debian-edu/trunk/src/hw-support-handler/; cd
8733 hw-support-handler; debuild</tt>'. If you lack debuild, install the
8734 devscripts package.</p>
8735
8736 <p><strong>Update 2013-01-23 12:00</strong>: The project is now
8737 renamed to Isenkram and the source moved from the Debian Edu
8738 subversion repository to a Debian collab-maint git repository. See
8739 <a href="http://people.skolelinux.org/pere/blog/Welcome_to_the_world__Isenkram_.html">build
8740 instructions</a> for details.</p>
8741
8742 </div>
8743 <div class="tags">
8744
8745
8746 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
8747
8748
8749 </div>
8750 </div>
8751 <div class="padding"></div>
8752
8753 <div class="entry">
8754 <div class="title">
8755 <a href="http://people.skolelinux.org/pere/blog/Thank_you_Thinkpad_X41__for_your_long_and_trustworthy_service.html">Thank you Thinkpad X41, for your long and trustworthy service</a>
8756 </div>
8757 <div class="date">
8758 19th January 2013
8759 </div>
8760 <div class="body">
8761 <p>This Christmas my trusty old laptop died. It died quietly and
8762 suddenly in bed. With a quiet whimper, it went completely quiet and
8763 black. The power button was no longer able to turn it on. It was a
8764 IBM Thinkpad X41, and the best laptop I ever had. Better than both
8765 Thinkpads X30, X31, X40, X60, X61 and X61S. Far better than the
8766 Compaq I had before that. Now I need to find a replacement. To keep
8767 going during Christmas, I moved the one year old SSD disk to my old
8768 X40 where it fitted (only one I had left that could use it), but it is
8769 not a durable solution.
8770
8771 <p>My laptop needs are fairly modest. This is my wishlist from when I
8772 got a new one more than 10 years ago. It still holds true.:)</p>
8773
8774 <ul>
8775
8776 <li>Lightweight (around 1 kg) and small volume (preferably smaller
8777 than A4).</li>
8778 <li>Robust, it will be in my backpack every day.</li>
8779 <li>Three button mouse and a mouse pin instead of touch pad.</li>
8780 <li>Long battery life time. Preferable a week.</li>
8781 <li>Internal WIFI network card.</li>
8782 <li>Internal Twisted Pair network card.</li>
8783 <li>Some USB slots (2-3 is plenty)</li>
8784 <li>Good keyboard - similar to the Thinkpad.</li>
8785 <li>Video resolution at least 1024x768, with size around 12" (A4 paper
8786 size).</li>
8787 <li>Hardware supported by Debian Stable, ie the default kernel and
8788 X.org packages.</li>
8789 <li>Quiet, preferably fan free (or at least not using the fan most of
8790 the time).
8791
8792 </ul>
8793
8794 <p>You will notice that there are no RAM and CPU requirements in the
8795 list. The reason is simply that the specifications on laptops the
8796 last 10-15 years have been sufficient for my needs, and I have to look
8797 at other features to choose my laptop. But are there still made as
8798 robust laptops as my X41? The Thinkpad X60/X61 proved to be less
8799 robust, and Thinkpads seem to be heading in the wrong direction since
8800 Lenovo took over. But I've been told that X220 and X1 Carbon might
8801 still be useful.</p>
8802
8803 <p>Perhaps I should rethink my needs, and look for a pad with an
8804 external keyboard? I'll have to check the
8805 <a href="http://www.linux-laptop.net/">Linux Laptops site</a> for
8806 well-supported laptops, or perhaps just buy one preinstalled from one
8807 of the vendors listed on the <a href="http://linuxpreloaded.com/">Linux
8808 Pre-loaded site</a>.</p>
8809
8810 </div>
8811 <div class="tags">
8812
8813
8814 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
8815
8816
8817 </div>
8818 </div>
8819 <div class="padding"></div>
8820
8821 <div class="entry">
8822 <div class="title">
8823 <a href="http://people.skolelinux.org/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>
8824 </div>
8825 <div class="date">
8826 18th January 2013
8827 </div>
8828 <div class="body">
8829 <p>Some times I try to figure out which Iceweasel browser plugin to
8830 install to get support for a given MIME type. Thanks to
8831 <a href="https://wiki.ubuntu.com/MozillaTeam/Plugins">specifications
8832 done by Ubuntu</a> and Mozilla, it is possible to do this in Debian.
8833 Unfortunately, not very many packages provide the needed meta
8834 information, Anyway, here is a small script to look up all browser
8835 plugin packages announcing ther MIME support using this specification:</p>
8836
8837 <pre>
8838 #!/usr/bin/python
8839 import sys
8840 import apt
8841 def pkgs_handling_mimetype(mimetype):
8842 cache = apt.Cache()
8843 cache.open(None)
8844 thepkgs = []
8845 for pkg in cache:
8846 version = pkg.candidate
8847 if version is None:
8848 version = pkg.installed
8849 if version is None:
8850 continue
8851 record = version.record
8852 if not record.has_key('Npp-MimeType'):
8853 continue
8854 mime_types = record['Npp-MimeType'].split(',')
8855 for t in mime_types:
8856 t = t.rstrip().strip()
8857 if t == mimetype:
8858 thepkgs.append(pkg.name)
8859 return thepkgs
8860 mimetype = "audio/ogg"
8861 if 1 < len(sys.argv):
8862 mimetype = sys.argv[1]
8863 print "Browser plugin packages supporting %s:" % mimetype
8864 for pkg in pkgs_handling_mimetype(mimetype):
8865 print " %s" %pkg
8866 </pre>
8867
8868 <p>It can be used like this to look up a given MIME type:</p>
8869
8870 <pre>
8871 % ./apt-find-browserplug-for-mimetype
8872 Browser plugin packages supporting audio/ogg:
8873 gecko-mediaplayer
8874 % ./apt-find-browserplug-for-mimetype application/x-shockwave-flash
8875 Browser plugin packages supporting application/x-shockwave-flash:
8876 browser-plugin-gnash
8877 %
8878 </pre>
8879
8880 <p>In Ubuntu this mechanism is combined with support in the browser
8881 itself to query for plugins and propose to install the needed
8882 packages. It would be great if Debian supported such feature too. Is
8883 anyone working on adding it?</p>
8884
8885 <p><strong>Update 2013-01-18 14:20</strong>: The Debian BTS
8886 request for icweasel support for this feature is
8887 <a href="http://bugs.debian.org/484010">#484010</a> from 2008 (and
8888 <a href="http://bugs.debian.org/698426">#698426</a> from today). Lack
8889 of manpower and wish for a different design is the reason thus feature
8890 is not yet in iceweasel from Debian.</p>
8891
8892 </div>
8893 <div class="tags">
8894
8895
8896 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
8897
8898
8899 </div>
8900 </div>
8901 <div class="padding"></div>
8902
8903 <div class="entry">
8904 <div class="title">
8905 <a href="http://people.skolelinux.org/pere/blog/What_is_the_most_supported_MIME_type_in_Debian_.html">What is the most supported MIME type in Debian?</a>
8906 </div>
8907 <div class="date">
8908 16th January 2013
8909 </div>
8910 <div class="body">
8911 <p>The <a href="http://wiki.debian.org/AppStreamDebianProposal">DEP-11
8912 proposal to add AppStream information to the Debian archive</a>, is a
8913 proposal to make it possible for a Desktop application to propose to
8914 the user some package to install to gain support for a given MIME
8915 type, font, library etc. that is currently missing. With such
8916 mechanism in place, it would be possible for the desktop to
8917 automatically propose and install leocad if some LDraw file is
8918 downloaded by the browser.</p>
8919
8920 <p>To get some idea about the current content of the archive, I decided
8921 to write a simple program to extract all .desktop files from the
8922 Debian archive and look up the claimed MIME support there. The result
8923 can be found on the
8924 <a href="http://ftp.skolelinux.org/pub/AppStreamTest">Skolelinux FTP
8925 site</a>. Using the collected information, it become possible to
8926 answer the question in the title. Here are the 20 most supported MIME
8927 types in Debian stable (Squeeze), testing (Wheezy) and unstable (Sid).
8928 The complete list is available from the link above.</p>
8929
8930 <p><strong>Debian Stable:</strong></p>
8931
8932 <pre>
8933 count MIME type
8934 ----- -----------------------
8935 32 text/plain
8936 30 audio/mpeg
8937 29 image/png
8938 28 image/jpeg
8939 27 application/ogg
8940 26 audio/x-mp3
8941 25 image/tiff
8942 25 image/gif
8943 22 image/bmp
8944 22 audio/x-wav
8945 20 audio/x-flac
8946 19 audio/x-mpegurl
8947 18 video/x-ms-asf
8948 18 audio/x-musepack
8949 18 audio/x-mpeg
8950 18 application/x-ogg
8951 17 video/mpeg
8952 17 audio/x-scpls
8953 17 audio/ogg
8954 16 video/x-ms-wmv
8955 </pre>
8956
8957 <p><strong>Debian Testing:</strong></p>
8958
8959 <pre>
8960 count MIME type
8961 ----- -----------------------
8962 33 text/plain
8963 32 image/png
8964 32 image/jpeg
8965 29 audio/mpeg
8966 27 image/gif
8967 26 image/tiff
8968 26 application/ogg
8969 25 audio/x-mp3
8970 22 image/bmp
8971 21 audio/x-wav
8972 19 audio/x-mpegurl
8973 19 audio/x-mpeg
8974 18 video/mpeg
8975 18 audio/x-scpls
8976 18 audio/x-flac
8977 18 application/x-ogg
8978 17 video/x-ms-asf
8979 17 text/html
8980 17 audio/x-musepack
8981 16 image/x-xbitmap
8982 </pre>
8983
8984 <p><strong>Debian Unstable:</strong></p>
8985
8986 <pre>
8987 count MIME type
8988 ----- -----------------------
8989 31 text/plain
8990 31 image/png
8991 31 image/jpeg
8992 29 audio/mpeg
8993 28 application/ogg
8994 27 image/gif
8995 26 image/tiff
8996 26 audio/x-mp3
8997 23 audio/x-wav
8998 22 image/bmp
8999 21 audio/x-flac
9000 20 audio/x-mpegurl
9001 19 audio/x-mpeg
9002 18 video/x-ms-asf
9003 18 video/mpeg
9004 18 audio/x-scpls
9005 18 application/x-ogg
9006 17 audio/x-musepack
9007 16 video/x-ms-wmv
9008 16 video/x-msvideo
9009 </pre>
9010
9011 <p>I am told that PackageKit can provide an API to access the kind of
9012 information mentioned in DEP-11. I have not yet had time to look at
9013 it, but hope the PackageKit people in Debian are on top of these
9014 issues.</p>
9015
9016 <p><strong>Update 2013-01-16 13:35</strong>: Updated numbers after
9017 discovering a typo in my script.</p>
9018
9019 </div>
9020 <div class="tags">
9021
9022
9023 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
9024
9025
9026 </div>
9027 </div>
9028 <div class="padding"></div>
9029
9030 <div class="entry">
9031 <div class="title">
9032 <a href="http://people.skolelinux.org/pere/blog/Using_modalias_info_to_find_packages_handling_my_hardware.html">Using modalias info to find packages handling my hardware</a>
9033 </div>
9034 <div class="date">
9035 15th January 2013
9036 </div>
9037 <div class="body">
9038 <p>Yesterday, I wrote about the
9039 <a href="http://people.skolelinux.org/pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html">modalias
9040 values provided by the Linux kernel</a> following my hope for
9041 <a href="http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">better
9042 dongle support in Debian</a>. Using this knowledge, I have tested how
9043 modalias values attached to package names can be used to map packages
9044 to hardware. This allow the system to look up and suggest relevant
9045 packages when I plug in some new hardware into my machine, and replace
9046 discover and discover-data as the database used to map hardware to
9047 packages.</p>
9048
9049 <p>I create a modaliases file with entries like the following,
9050 containing package name, kernel module name (if relevant, otherwise
9051 the package name) and globs matching the relevant hardware
9052 modalias.</p>
9053
9054 <p><blockquote>
9055 Package: package-name
9056 <br>Modaliases: module(modaliasglob, modaliasglob, modaliasglob)</p>
9057 </blockquote></p>
9058
9059 <p>It is fairly trivial to write code to find the relevant packages
9060 for a given modalias value using this file.</p>
9061
9062 <p>An entry like this would suggest the video and picture application
9063 cheese for many USB web cameras (interface bus class 0E01):</p>
9064
9065 <p><blockquote>
9066 Package: cheese
9067 <br>Modaliases: cheese(usb:v*p*d*dc*dsc*dp*ic0Eisc01ip*)</p>
9068 </blockquote></p>
9069
9070 <p>An entry like this would suggest the pcmciautils package when a
9071 CardBus bridge (bus class 0607) PCI device is present:</p>
9072
9073 <p><blockquote>
9074 Package: pcmciautils
9075 <br>Modaliases: pcmciautils(pci:v*d*sv*sd*bc06sc07i*)
9076 </blockquote></p>
9077
9078 <p>An entry like this would suggest the package colorhug-client when
9079 plugging in a ColorHug with USB IDs 04D8:F8DA:</p>
9080
9081 <p><blockquote>
9082 Package: colorhug-client
9083 <br>Modaliases: colorhug-client(usb:v04D8pF8DAd*)</p>
9084 </blockquote></p>
9085
9086 <p>I believe the format is compatible with the format of the Packages
9087 file in the Debian archive. Ubuntu already uses their Packages file
9088 to store their mappings from packages to hardware.</p>
9089
9090 <p>By adding a XB-Modaliases: header in debian/control, any .deb can
9091 announce the hardware it support in a way my prototype understand.
9092 This allow those publishing packages in an APT source outside the
9093 Debian archive as well as those backporting packages to make sure the
9094 hardware mapping are included in the package meta information. I've
9095 tested such header in the pymissile package, and its modalias mapping
9096 is working as it should with my prototype. It even made it to Ubuntu
9097 Raring.</p>
9098
9099 <p>To test if it was possible to look up supported hardware using only
9100 the shell tools available in the Debian installer, I wrote a shell
9101 implementation of the lookup code. The idea is to create files for
9102 each modalias and let the shell do the matching. Please check out and
9103 try the
9104 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/hw-support-lookup?view=co">hw-support-lookup</a>
9105 shell script. It run without any extra dependencies and fetch the
9106 hardware mappings from the Debian archive and the subversion
9107 repository where I currently work on my prototype.</p>
9108
9109 <p>When I use it on a machine with a yubikey inserted, it suggest to
9110 install yubikey-personalization:</p>
9111
9112 <p><blockquote>
9113 % ./hw-support-lookup
9114 <br>yubikey-personalization
9115 <br>%
9116 </blockquote></p>
9117
9118 <p>When I run it on my Thinkpad X40 with a PCMCIA/CardBus slot, it
9119 propose to install the pcmciautils package:</p>
9120
9121 <p><blockquote>
9122 % ./hw-support-lookup
9123 <br>pcmciautils
9124 <br>%
9125 </blockquote></p>
9126
9127 <p>If you know of any hardware-package mapping that should be added to
9128 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/modaliases?view=co">my
9129 database</a>, please tell me about it.</p>
9130
9131 <p>It could be possible to generate several of the mappings between
9132 packages and hardware. One source would be to look at packages with
9133 kernel modules, ie packages with *.ko files in /lib/modules/, and
9134 extract their modalias information. Another would be to look at
9135 packages with udev rules, ie packages with files in
9136 /lib/udev/rules.d/, and extract their vendor/model information to
9137 generate a modalias matching rule. I have not tested any of these to
9138 see if it work.</p>
9139
9140 <p>If you want to help implementing a system to let us propose what
9141 packages to install when new hardware is plugged into a Debian
9142 machine, please send me an email or talk to me on
9143 <a href="irc://irc.debian.org/%23debian-devel">#debian-devel</a>.</p>
9144
9145 </div>
9146 <div class="tags">
9147
9148
9149 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
9150
9151
9152 </div>
9153 </div>
9154 <div class="padding"></div>
9155
9156 <div class="entry">
9157 <div class="title">
9158 <a href="http://people.skolelinux.org/pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html">Modalias strings - a practical way to map "stuff" to hardware</a>
9159 </div>
9160 <div class="date">
9161 14th January 2013
9162 </div>
9163 <div class="body">
9164 <p>While looking into how to look up Debian packages based on hardware
9165 information, to find the packages that support a given piece of
9166 hardware, I refreshed my memory regarding modalias values, and decided
9167 to document the details. Here are my findings so far, also available
9168 in
9169 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/">the
9170 Debian Edu subversion repository</a>:
9171
9172 <p><strong>Modalias decoded</strong></p>
9173
9174 <p>This document try to explain what the different types of modalias
9175 values stands for. It is in part based on information from
9176 &lt;URL: <a href="https://wiki.archlinux.org/index.php/Modalias">https://wiki.archlinux.org/index.php/Modalias</a> &gt;,
9177 &lt;URL: <a href="http://unix.stackexchange.com/questions/26132/how-to-assign-usb-driver-to-device">http://unix.stackexchange.com/questions/26132/how-to-assign-usb-driver-to-device</a> &gt;,
9178 &lt;URL: <a href="http://code.metager.de/source/history/linux/stable/scripts/mod/file2alias.c">http://code.metager.de/source/history/linux/stable/scripts/mod/file2alias.c</a> &gt; and
9179 &lt;URL: <a href="http://cvs.savannah.gnu.org/viewvc/dmidecode/dmidecode.c?root=dmidecode&view=markup">http://cvs.savannah.gnu.org/viewvc/dmidecode/dmidecode.c?root=dmidecode&view=markup</a> &gt;.
9180
9181 <p>The modalias entries for a given Linux machine can be found using
9182 this shell script:</p>
9183
9184 <pre>
9185 find /sys -name modalias -print0 | xargs -0 cat | sort -u
9186 </pre>
9187
9188 <p>The supported modalias globs for a given kernel module can be found
9189 using modinfo:</p>
9190
9191 <pre>
9192 % /sbin/modinfo psmouse | grep alias:
9193 alias: serio:ty05pr*id*ex*
9194 alias: serio:ty01pr*id*ex*
9195 %
9196 </pre>
9197
9198 <p><strong>PCI subtype</strong></p>
9199
9200 <p>A typical PCI entry can look like this. This is an Intel Host
9201 Bridge memory controller:</p>
9202
9203 <p><blockquote>
9204 pci:v00008086d00002770sv00001028sd000001ADbc06sc00i00
9205 </blockquote></p>
9206
9207 <p>This represent these values:</p>
9208
9209 <pre>
9210 v 00008086 (vendor)
9211 d 00002770 (device)
9212 sv 00001028 (subvendor)
9213 sd 000001AD (subdevice)
9214 bc 06 (bus class)
9215 sc 00 (bus subclass)
9216 i 00 (interface)
9217 </pre>
9218
9219 <p>The vendor/device values are the same values outputted from 'lspci
9220 -n' as 8086:2770. The bus class/subclass is also shown by lspci as
9221 0600. The 0600 class is a host bridge. Other useful bus values are
9222 0300 (VGA compatible card) and 0200 (Ethernet controller).</p>
9223
9224 <p>Not sure how to figure out the interface value, nor what it
9225 means.</p>
9226
9227 <p><strong>USB subtype</strong></p>
9228
9229 <p>Some typical USB entries can look like this. This is an internal
9230 USB hub in a laptop:</p>
9231
9232 <p><blockquote>
9233 usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
9234 </blockquote></p>
9235
9236 <p>Here is the values included in this alias:</p>
9237
9238 <pre>
9239 v 1D6B (device vendor)
9240 p 0001 (device product)
9241 d 0206 (bcddevice)
9242 dc 09 (device class)
9243 dsc 00 (device subclass)
9244 dp 00 (device protocol)
9245 ic 09 (interface class)
9246 isc 00 (interface subclass)
9247 ip 00 (interface protocol)
9248 </pre>
9249
9250 <p>The 0900 device class/subclass means hub. Some times the relevant
9251 class is in the interface class section. For a simple USB web camera,
9252 these alias entries show up:</p>
9253
9254 <p><blockquote>
9255 usb:v0AC8p3420d5000dcEFdsc02dp01ic01isc01ip00
9256 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic01isc02ip00
9257 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic0Eisc01ip00
9258 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic0Eisc02ip00
9259 </blockquote></p>
9260
9261 <p>Interface class 0E01 is video control, 0E02 is video streaming (aka
9262 camera), 0101 is audio control device and 0102 is audio streaming (aka
9263 microphone). Thus this is a camera with microphone included.</p>
9264
9265 <p><strong>ACPI subtype</strong></p>
9266
9267 <p>The ACPI type is used for several non-PCI/USB stuff. This is an IR
9268 receiver in a Thinkpad X40:</p>
9269
9270 <p><blockquote>
9271 acpi:IBM0071:PNP0511:
9272 </blockquote></p>
9273
9274 <p>The values between the colons are IDs.</p>
9275
9276 <p><strong>DMI subtype</strong></p>
9277
9278 <p>The DMI table contain lots of information about the computer case
9279 and model. This is an entry for a IBM Thinkpad X40, fetched from
9280 /sys/devices/virtual/dmi/id/modalias:</p>
9281
9282 <p><blockquote>
9283 dmi:bvnIBM:bvr1UETB6WW(1.66):bd06/15/2005:svnIBM:pn2371H4G:pvrThinkPadX40:rvnIBM:rn2371H4G:rvrNotAvailable:cvnIBM:ct10:cvrNotAvailable:
9284 </blockquote></p>
9285
9286 <p>The values present are</p>
9287
9288 <pre>
9289 bvn IBM (BIOS vendor)
9290 bvr 1UETB6WW(1.66) (BIOS version)
9291 bd 06/15/2005 (BIOS date)
9292 svn IBM (system vendor)
9293 pn 2371H4G (product name)
9294 pvr ThinkPadX40 (product version)
9295 rvn IBM (board vendor)
9296 rn 2371H4G (board name)
9297 rvr NotAvailable (board version)
9298 cvn IBM (chassis vendor)
9299 ct 10 (chassis type)
9300 cvr NotAvailable (chassis version)
9301 </pre>
9302
9303 <p>The chassis type 10 is Notebook. Other interesting values can be
9304 found in the dmidecode source:</p>
9305
9306 <pre>
9307 3 Desktop
9308 4 Low Profile Desktop
9309 5 Pizza Box
9310 6 Mini Tower
9311 7 Tower
9312 8 Portable
9313 9 Laptop
9314 10 Notebook
9315 11 Hand Held
9316 12 Docking Station
9317 13 All In One
9318 14 Sub Notebook
9319 15 Space-saving
9320 16 Lunch Box
9321 17 Main Server Chassis
9322 18 Expansion Chassis
9323 19 Sub Chassis
9324 20 Bus Expansion Chassis
9325 21 Peripheral Chassis
9326 22 RAID Chassis
9327 23 Rack Mount Chassis
9328 24 Sealed-case PC
9329 25 Multi-system
9330 26 CompactPCI
9331 27 AdvancedTCA
9332 28 Blade
9333 29 Blade Enclosing
9334 </pre>
9335
9336 <p>The chassis type values are not always accurately set in the DMI
9337 table. For example my home server is a tower, but the DMI modalias
9338 claim it is a desktop.</p>
9339
9340 <p><strong>SerIO subtype</strong></p>
9341
9342 <p>This type is used for PS/2 mouse plugs. One example is from my
9343 test machine:</p>
9344
9345 <p><blockquote>
9346 serio:ty01pr00id00ex00
9347 </blockquote></p>
9348
9349 <p>The values present are</p>
9350
9351 <pre>
9352 ty 01 (type)
9353 pr 00 (prototype)
9354 id 00 (id)
9355 ex 00 (extra)
9356 </pre>
9357
9358 <p>This type is supported by the psmouse driver. I am not sure what
9359 the valid values are.</p>
9360
9361 <p><strong>Other subtypes</strong></p>
9362
9363 <p>There are heaps of other modalias subtypes according to
9364 file2alias.c. There is the rest of the list from that source: amba,
9365 ap, bcma, ccw, css, eisa, hid, i2c, ieee1394, input, ipack, isapnp,
9366 mdio, of, parisc, pcmcia, platform, scsi, sdio, spi, ssb, vio, virtio,
9367 vmbus, x86cpu and zorro. I did not spend time documenting all of
9368 these, as they do not seem relevant for my intended use with mapping
9369 hardware to packages when new stuff is inserted during run time.</p>
9370
9371 <p><strong>Looking up kernel modules using modalias values</strong></p>
9372
9373 <p>To check which kernel modules provide support for a given modalias,
9374 one can use the following shell script:</p>
9375
9376 <pre>
9377 for id in $(find /sys -name modalias -print0 | xargs -0 cat | sort -u); do \
9378 echo "$id" ; \
9379 /sbin/modprobe --show-depends "$id"|sed 's/^/ /' ; \
9380 done
9381 </pre>
9382
9383 <p>The output can look like this (only the first few entries as the
9384 list is very long on my test machine):</p>
9385
9386 <pre>
9387 acpi:ACPI0003:
9388 insmod /lib/modules/2.6.32-5-686/kernel/drivers/acpi/ac.ko
9389 acpi:device:
9390 FATAL: Module acpi:device: not found.
9391 acpi:IBM0068:
9392 insmod /lib/modules/2.6.32-5-686/kernel/drivers/char/nvram.ko
9393 insmod /lib/modules/2.6.32-5-686/kernel/drivers/leds/led-class.ko
9394 insmod /lib/modules/2.6.32-5-686/kernel/net/rfkill/rfkill.ko
9395 insmod /lib/modules/2.6.32-5-686/kernel/drivers/platform/x86/thinkpad_acpi.ko
9396 acpi:IBM0071:PNP0511:
9397 insmod /lib/modules/2.6.32-5-686/kernel/lib/crc-ccitt.ko
9398 insmod /lib/modules/2.6.32-5-686/kernel/net/irda/irda.ko
9399 insmod /lib/modules/2.6.32-5-686/kernel/drivers/net/irda/nsc-ircc.ko
9400 [...]
9401 </pre>
9402
9403 <p>If you want to help implementing a system to let us propose what
9404 packages to install when new hardware is plugged into a Debian
9405 machine, please send me an email or talk to me on
9406 <a href="irc://irc.debian.org/%23debian-devel">#debian-devel</a>.</p>
9407
9408 <p><strong>Update 2013-01-15:</strong> Rewrite "cat $(find ...)" to
9409 "find ... -print0 | xargs -0 cat" to make sure it handle directories
9410 in /sys/ with space in them.</p>
9411
9412 </div>
9413 <div class="tags">
9414
9415
9416 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
9417
9418
9419 </div>
9420 </div>
9421 <div class="padding"></div>
9422
9423 <div class="entry">
9424 <div class="title">
9425 <a href="http://people.skolelinux.org/pere/blog/Moved_the_pymissile_Debian_packaging_to_collab_maint.html">Moved the pymissile Debian packaging to collab-maint</a>
9426 </div>
9427 <div class="date">
9428 10th January 2013
9429 </div>
9430 <div class="body">
9431 <p>As part of my investigation on how to improve the support in Debian
9432 for hardware dongles, I dug up my old Mark and Spencer USB Rocket
9433 Launcher and updated the Debian package
9434 <a href="http://packages.qa.debian.org/pymissile">pymissile</a> to make
9435 sure udev will fix the device permissions when it is plugged in. I
9436 also added a "Modaliases" header to test it in the Debian archive and
9437 hopefully make the package be proposed by jockey in Ubuntu when a user
9438 plug in his rocket launcher. In the process I moved the source to a
9439 git repository under collab-maint, to make it easier for any DD to
9440 contribute. <a href="http://code.google.com/p/pymissile/">Upstream</a>
9441 is not very active, but the software still work for me even after five
9442 years of relative silence. The new git repository is not listed in
9443 the uploaded package yet, because I want to test the other changes a
9444 bit more before I upload the new version. If you want to check out
9445 the new version with a .desktop file included, visit the
9446 <a href="http://anonscm.debian.org/gitweb/?p=collab-maint/pymissile.git">gitweb
9447 view</a> or use "<tt>git clone
9448 git://anonscm.debian.org/collab-maint/pymissile.git</tt>".</p>
9449
9450 </div>
9451 <div class="tags">
9452
9453
9454 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>, <a href="http://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
9455
9456
9457 </div>
9458 </div>
9459 <div class="padding"></div>
9460
9461 <div class="entry">
9462 <div class="title">
9463 <a href="http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">Lets make hardware dongles easier to use in Debian</a>
9464 </div>
9465 <div class="date">
9466 9th January 2013
9467 </div>
9468 <div class="body">
9469 <p>One thing that annoys me with Debian and Linux distributions in
9470 general, is that there is a great package management system with the
9471 ability to automatically install software packages by downloading them
9472 from the distribution mirrors, but no way to get it to automatically
9473 install the packages I need to use the hardware I plug into my
9474 machine. Even if the package to use it is easily available from the
9475 Linux distribution. When I plug in a LEGO Mindstorms NXT, it could
9476 suggest to automatically install the python-nxt, nbc and t2n packages
9477 I need to talk to it. When I plug in a Yubikey, it could propose the
9478 yubikey-personalization package. The information required to do this
9479 is available, but no-one have pulled all the pieces together.</p>
9480
9481 <p>Some years ago, I proposed to
9482 <a href="http://lists.debian.org/debian-devel/2010/05/msg01206.html">use
9483 the discover subsystem to implement this</a>. The idea is fairly
9484 simple:
9485
9486 <ul>
9487
9488 <li>Add a desktop entry in /usr/share/autostart/ pointing to a program
9489 starting when a user log in.</li>
9490
9491 <li>Set this program up to listen for kernel events emitted when new
9492 hardware is inserted into the computer.</li>
9493
9494 <li>When new hardware is inserted, look up the hardware ID in a
9495 database mapping to packages, and take note of any non-installed
9496 packages.</li>
9497
9498 <li>Show a message to the user proposing to install the discovered
9499 package, and make it easy to install it.</li>
9500
9501 </ul>
9502
9503 <p>I am not sure what the best way to implement this is, but my
9504 initial idea was to use dbus events to discover new hardware, the
9505 discover database to find packages and
9506 <a href="http://www.packagekit.org/">PackageKit</a> to install
9507 packages.</p>
9508
9509 <p>Yesterday, I found time to try to implement this idea, and the
9510 draft package is now checked into
9511 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/">the
9512 Debian Edu subversion repository</a>. In the process, I updated the
9513 <a href="http://packages.qa.debian.org/d/discover-data.html">discover-data</a>
9514 package to map the USB ids of LEGO Mindstorms and Yubikey devices to
9515 the relevant packages in Debian, and uploaded a new version
9516 2.2013.01.09 to unstable. I also discovered that the current
9517 <a href="http://packages.qa.debian.org/d/discover.html">discover</a>
9518 package in Debian no longer discovered any USB devices, because
9519 /proc/bus/usb/devices is no longer present. I ported it to use
9520 libusb as a fall back option to get it working. The fixed package
9521 version 2.1.2-6 is now in experimental (didn't upload it to unstable
9522 because of the freeze).</p>
9523
9524 <p>With this prototype in place, I can insert my Yubikey, and get this
9525 desktop notification to show up (only once, the first time it is
9526 inserted):</p>
9527
9528 <p align="center"><img src="http://people.skolelinux.org/pere/blog/images/2013-01-09-hw-autoinstall.png"></p>
9529
9530 <p>For this prototype to be really useful, some way to automatically
9531 install the proposed packages by pressing the "Please install
9532 program(s)" button should to be implemented.</p>
9533
9534 <p>If this idea seem useful to you, and you want to help make it
9535 happen, please help me update the discover-data database with mappings
9536 from hardware to Debian packages. Check if 'discover-pkginstall -l'
9537 list the package you would like to have installed when a given
9538 hardware device is inserted into your computer, and report bugs using
9539 reportbug if it isn't. Or, if you know of a better way to provide
9540 such mapping, please let me know.</p>
9541
9542 <p>This prototype need more work, and there are several questions that
9543 should be considered before it is ready for production use. Is dbus
9544 the correct way to detect new hardware? At the moment I look for HAL
9545 dbus events on the system bus, because that is the events I could see
9546 on my Debian Squeeze KDE desktop. Are there better events to use?
9547 How should the user be notified? Is the desktop notification
9548 mechanism the best option, or should the background daemon raise a
9549 popup instead? How should packages be installed? When should they
9550 not be installed?</p>
9551
9552 <p>If you want to help getting such feature implemented in Debian,
9553 please send me an email. :)</p>
9554
9555 </div>
9556 <div class="tags">
9557
9558
9559 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
9560
9561
9562 </div>
9563 </div>
9564 <div class="padding"></div>
9565
9566 <div class="entry">
9567 <div class="title">
9568 <a href="http://people.skolelinux.org/pere/blog/New_IRC_channel_for_LEGO_designers_using_Debian.html">New IRC channel for LEGO designers using Debian</a>
9569 </div>
9570 <div class="date">
9571 2nd January 2013
9572 </div>
9573 <div class="body">
9574 <p>During Christmas, I have worked a bit on the Debian support for
9575 <a href="http://mindstorms.lego.com/en-us/Default.aspx">LEGO Mindstorm
9576 NXT</a>. My son and I have played a bit with my NXT set, and I
9577 discovered I had to build all the tools myself because none were
9578 already in Debian Squeeze. If Debian support for LEGO is something
9579 you care about, please join me on the IRC channel
9580 <a href="irc://irc.debian.org/%23debian-lego">#debian-lego</a> (server
9581 irc.debian.org). There is a lot that could be done to improve the
9582 Debian support for LEGO designers. For example both CAD software
9583 and Mindstorm compilers are missing. :)</p>
9584
9585 <p>Update 2012-01-03: A
9586 <a href="http://wiki.debian.org/LegoDesigners">project page</a>
9587 including links to Lego related packages is now available.</p>
9588
9589 </div>
9590 <div class="tags">
9591
9592
9593 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/lego">lego</a>, <a href="http://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
9594
9595
9596 </div>
9597 </div>
9598 <div class="padding"></div>
9599
9600 <div class="entry">
9601 <div class="title">
9602 <a href="http://people.skolelinux.org/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>
9603 </div>
9604 <div class="date">
9605 25th December 2012
9606 </div>
9607 <div class="body">
9608 <p>Let me start by wishing you all marry Christmas and a happy new
9609 year! I hope next year will prove to be a good year.</p>
9610
9611 <p><a href="http://www.bitcoin.org/">Bitcoin</a>, the digital
9612 decentralised "currency" that allow people to transfer bitcoins
9613 between each other with minimal overhead, is a very interesting
9614 experiment. And as I wrote a few days ago, the bitcoin situation in
9615 <a href="http://www.debian.org/">Debian</a> is about to improve a bit.
9616 The <a href="http://packages.qa.debian.org/bitcoin">new debian source
9617 package</a> (version 0.7.2-2) was uploaded yesterday, and is waiting
9618 in <a href="http://ftp-master.debian.org/new.html">the NEW queue</A>
9619 for one of the ftpmasters to approve the new bitcoin-qt package
9620 name.</p>
9621
9622 <p>And thanks to the great work of Jonas and the rest of the bitcoin
9623 team in Debian, you can easily test the package in Debian Squeeze
9624 using the following steps to get a set of working packages:</p>
9625
9626 <blockquote><pre>
9627 git clone git://git.debian.org/git/collab-maint/bitcoin
9628 cd bitcoin
9629 DEB_MAINTAINER_MODE=1 DEB_BUILD_OPTIONS=noupnp fakeroot debian/rules clean
9630 DEB_BUILD_OPTIONS=noupnp git-buildpackage --git-ignore-new
9631 </pre></blockquote>
9632
9633 <p>You might have to install some build dependencies as well. The
9634 list of commands should give you two packages, bitcoind and
9635 bitcoin-qt, ready for use in a Squeeze environment. Note that the
9636 client will download the complete set of bitcoin "blocks", which need
9637 around 5.6 GiB of data on my machine at the moment. Make sure your
9638 ~/.bitcoin/ directory have lots of spare room if you want to download
9639 all the blocks. The client will warn if the disk is getting full, so
9640 there is not really a problem if you got too little room, but you will
9641 not be able to get all the features out of the client.</p>
9642
9643 <p>As usual, if you use bitcoin and want to show your support of my
9644 activities, please send Bitcoin donations to my address
9645 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
9646
9647 </div>
9648 <div class="tags">
9649
9650
9651 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
9652
9653
9654 </div>
9655 </div>
9656 <div class="padding"></div>
9657
9658 <div class="entry">
9659 <div class="title">
9660 <a href="http://people.skolelinux.org/pere/blog/A_word_on_bitcoin_support_in_Debian.html">A word on bitcoin support in Debian</a>
9661 </div>
9662 <div class="date">
9663 21st December 2012
9664 </div>
9665 <div class="body">
9666 <p>It has been a while since I wrote about
9667 <a href="http://www.bitcoin.org/">bitcoin</a>, the decentralised
9668 peer-to-peer based crypto-currency, and the reason is simply that I
9669 have been busy elsewhere. But two days ago, I started looking at the
9670 state of <a href="http://packages.qa.debian.org/bitcoin">bitcoin in
9671 Debian</a> again to try to recover my old bitcoin wallet. The package
9672 is now maintained by a
9673 <a href="https://alioth.debian.org/projects/pkg-bitcoin/">team of
9674 people</a>, and the grunt work had already been done by this team. We
9675 owe a huge thank you to all these team members. :)
9676 But I was sad to discover that the bitcoin client is missing in
9677 Wheezy. It is only available in Sid (and an outdated client from
9678 backports). The client had several RC bugs registered in BTS blocking
9679 it from entering testing. To try to help the team and improve the
9680 situation, I spent some time providing patches and triaging the bug
9681 reports. I also had a look at the bitcoin package available from Matt
9682 Corallo in a
9683 <a href="https://launchpad.net/~bitcoin/+archive/bitcoin">PPA for
9684 Ubuntu</a>, and moved the useful pieces from that version into the
9685 Debian package.</p>
9686
9687 <p>After checking with the main package maintainer Jonas Smedegaard on
9688 IRC, I pushed several patches into the collab-maint git repository to
9689 improve the package. It now contains fixes for the RC issues (not from
9690 me, but fixed by Scott Howard), build rules for a Qt GUI client
9691 package, konqueror support for the bitcoin: URI and bash completion
9692 setup. As I work on Debian Squeeze, I also created
9693 <a href="http://lists.alioth.debian.org/pipermail/pkg-bitcoin-devel/Week-of-Mon-20121217/000041.html">a
9694 patch to backport</a> the latest version. Jonas is going to look at
9695 it and try to integrate it into the git repository before uploading a
9696 new version to unstable.
9697
9698 <p>I would very much like bitcoin to succeed, to get rid of the
9699 centralized control currently exercised in the monetary system. I
9700 find it completely unacceptable that the USA government is collecting
9701 transaction data for almost all international money transfers (most are done in USD and transaction logs shipped to the spooks), and
9702 that the major credit card companies can block legal money
9703 transactions to Wikileaks. But for bitcoin to succeed, more people
9704 need to use bitcoins, and more people need to accept bitcoins when
9705 they sell products and services. Improving the bitcoin support in
9706 Debian is a small step in the right direction, but not enough.
9707 Unfortunately the user experience when browsing the web and wanting to
9708 pay with bitcoin is still not very good. The bitcoin: URI is a step
9709 in the right direction, but need to work in most or every browser in
9710 use. Also the bitcoin-qt client is too heavy to fire up to do a
9711 quick transaction. I believe there are other clients available, but
9712 have not tested them.</p>
9713
9714 <p>My
9715 <a href="http://people.skolelinux.org/pere/blog/Now_accepting_bitcoins___anonymous_and_distributed_p2p_crypto_money.html">experiment
9716 with bitcoins</a> showed that at least some of my readers use bitcoin.
9717 I received 20.15 BTC so far on the address I provided in my blog two
9718 years ago, as can be
9719 <a href="http://blockexplorer.com/address/15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">seen
9720 on the blockexplorer service</a>. Thank you everyone for your
9721 donation. The blockexplorer service demonstrates quite well that
9722 bitcoin is not quite anonymous and untracked. :) I wonder if the
9723 number of users have gone up since then. If you use bitcoin and want
9724 to show your support of my activity, please send Bitcoin donations to
9725 the same address as last time,
9726 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
9727
9728 </div>
9729 <div class="tags">
9730
9731
9732 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
9733
9734
9735 </div>
9736 </div>
9737 <div class="padding"></div>
9738
9739 <div class="entry">
9740 <div class="title">
9741 <a href="http://people.skolelinux.org/pere/blog/Git_repository_for_song_book_for_Computer_Scientists.html">Git repository for song book for Computer Scientists</a>
9742 </div>
9743 <div class="date">
9744 7th September 2012
9745 </div>
9746 <div class="body">
9747 <p>As I
9748 <a href="http://people.skolelinux.org/pere/blog/Song_book_for_Computer_Scientists.html">mentioned
9749 this summer</a>, I have created a Computer Science song book a few
9750 years ago, and today I finally found time to create a public
9751 <a href="https://gitorious.org/pere-cs-songbook/pere-cs-songbook">Gitorious
9752 repository for the project</a>.</p>
9753
9754 <p>If you want to help out, please clone the source and submit patches
9755 to the HTML version. To generate the PDF and PostScript version,
9756 please use prince XML, or let me know about a useful free software
9757 processor capable of creating a good looking PDF from the HTML.</p>
9758
9759 <p>Want to sing? You can still find the song book in HTML, PDF and
9760 PostScript formats at
9761 <a href="http://www.hungry.com/~pere/cs-songbook/">Petter's Computer
9762 Science Songbook</a>.</p>
9763
9764 </div>
9765 <div class="tags">
9766
9767
9768 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>.
9769
9770
9771 </div>
9772 </div>
9773 <div class="padding"></div>
9774
9775 <div class="entry">
9776 <div class="title">
9777 <a href="http://people.skolelinux.org/pere/blog/Gratulerer_med_19__rsdagen__Debian_.html">Gratulerer med 19-årsdagen, Debian!</a>
9778 </div>
9779 <div class="date">
9780 16th August 2012
9781 </div>
9782 <div class="body">
9783 <p>I dag fyller
9784 <a href="http://www.debian.org/News/2012/20120813">Debian-prosjektet 19
9785 år</a>. Jeg har fulgt det de siste 12 årene, og er veldig glad for å kunne
9786 si gratulerer med dagen, Debian!</p>
9787
9788 </div>
9789 <div class="tags">
9790
9791
9792 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>.
9793
9794
9795 </div>
9796 </div>
9797 <div class="padding"></div>
9798
9799 <div class="entry">
9800 <div class="title">
9801 <a href="http://people.skolelinux.org/pere/blog/Song_book_for_Computer_Scientists.html">Song book for Computer Scientists</a>
9802 </div>
9803 <div class="date">
9804 24th June 2012
9805 </div>
9806 <div class="body">
9807 <p>Many years ago, while studying Computer Science at the
9808 <a href="http://www.uit.no/">University of Tromsø</a>, I started
9809 collecting computer related songs for use at parties. The original
9810 version was written in LaTeX, but a few years ago I got help from
9811 Håkon W. Lie, one of the inventors of W3C CSS, to convert it to HTML
9812 while keeping the ability to create a nice book in PDF format. I have
9813 not had time to maintain the book for a while now, and guess I should
9814 put it up on some public version control repository where others can
9815 help me extend and update the book. If anyone is volunteering to help
9816 me with this, send me an email. Also let me know if there are songs
9817 missing in my book.</p>
9818
9819 <p>I have not mentioned the book on my blog so far, and it occured to
9820 me today that I really should let all my readers share the joys of
9821 singing out load about programming, computers and computer networks.
9822 Especially now that <a href="http://debconf12.debconf.org/">Debconf
9823 12</a> is about to start (and I am not going). Want to sing? Check
9824 out <a href="http://www.hungry.com/~pere/cs-songbook/">Petter's
9825 Computer Science Songbook</a>.
9826
9827 </div>
9828 <div class="tags">
9829
9830
9831 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>.
9832
9833
9834 </div>
9835 </div>
9836 <div class="padding"></div>
9837
9838 <div class="entry">
9839 <div class="title">
9840 <a href="http://people.skolelinux.org/pere/blog/Automatically_upgrading_server_firmware_on_Dell_PowerEdge.html">Automatically upgrading server firmware on Dell PowerEdge</a>
9841 </div>
9842 <div class="date">
9843 21st November 2011
9844 </div>
9845 <div class="body">
9846 <p>At work we have heaps of servers. I believe the total count is
9847 around 1000 at the moment. To be able to get help from the vendors
9848 when something go wrong, we want to keep the firmware on the servers
9849 up to date. If the firmware isn't the latest and greatest, the
9850 vendors typically refuse to start debugging any problems until the
9851 firmware is upgraded. So before every reboot, we want to upgrade the
9852 firmware, and we would really like everyone handling servers at the
9853 university to do this themselves when they plan to reboot a machine.
9854 For that to happen we at the unix server admin group need to provide
9855 the tools to do so.</p>
9856
9857 <p>To make firmware upgrading easier, I am working on a script to
9858 fetch and install the latest firmware for the servers we got. Most of
9859 our hardware are from Dell and HP, so I have focused on these servers
9860 so far. This blog post is about the Dell part.</P>
9861
9862 <p>On the Dell FTP site I was lucky enough to find
9863 <a href="ftp://ftp.us.dell.com/catalog/Catalog.xml.gz">an XML file</a>
9864 with firmware information for all 11th generation servers, listing
9865 which firmware should be used on a given model and where on the FTP
9866 site I can find it. Using a simple perl XML parser I can then
9867 download the shell scripts Dell provides to do firmware upgrades from
9868 within Linux and reboot when all the firmware is primed and ready to
9869 be activated on the first reboot.</p>
9870
9871 <p>This is the Dell related fragment of the perl code I am working on.
9872 Are there anyone working on similar tools for firmware upgrading all
9873 servers at a site? Please get in touch and lets share resources.</p>
9874
9875 <p><pre>
9876 #!/usr/bin/perl
9877 use strict;
9878 use warnings;
9879 use File::Temp qw(tempdir);
9880 BEGIN {
9881 # Install needed RHEL packages if missing
9882 my %rhelmodules = (
9883 'XML::Simple' => 'perl-XML-Simple',
9884 );
9885 for my $module (keys %rhelmodules) {
9886 eval "use $module;";
9887 if ($@) {
9888 my $pkg = $rhelmodules{$module};
9889 system("yum install -y $pkg");
9890 eval "use $module;";
9891 }
9892 }
9893 }
9894 my $errorsto = 'pere@hungry.com';
9895
9896 upgrade_dell();
9897
9898 exit 0;
9899
9900 sub run_firmware_script {
9901 my ($opts, $script) = @_;
9902 unless ($script) {
9903 print STDERR "fail: missing script name\n";
9904 exit 1
9905 }
9906 print STDERR "Running $script\n\n";
9907
9908 if (0 == system("sh $script $opts")) { # FIXME correct exit code handling
9909 print STDERR "success: firmware script ran succcessfully\n";
9910 } else {
9911 print STDERR "fail: firmware script returned error\n";
9912 }
9913 }
9914
9915 sub run_firmware_scripts {
9916 my ($opts, @dirs) = @_;
9917 # Run firmware packages
9918 for my $dir (@dirs) {
9919 print STDERR "info: Running scripts in $dir\n";
9920 opendir(my $dh, $dir) or die "Unable to open directory $dir: $!";
9921 while (my $s = readdir $dh) {
9922 next if $s =~ m/^\.\.?/;
9923 run_firmware_script($opts, "$dir/$s");
9924 }
9925 closedir $dh;
9926 }
9927 }
9928
9929 sub download {
9930 my $url = shift;
9931 print STDERR "info: Downloading $url\n";
9932 system("wget --quiet \"$url\"");
9933 }
9934
9935 sub upgrade_dell {
9936 my @dirs;
9937 my $product = `dmidecode -s system-product-name`;
9938 chomp $product;
9939
9940 if ($product =~ m/PowerEdge/) {
9941
9942 # on RHEL, these pacakges are needed by the firwmare upgrade scripts
9943 system('yum install -y compat-libstdc++-33.i686 libstdc++.i686 libxml2.i686 procmail');
9944
9945 my $tmpdir = tempdir(
9946 CLEANUP => 1
9947 );
9948 chdir($tmpdir);
9949 fetch_dell_fw('catalog/Catalog.xml.gz');
9950 system('gunzip Catalog.xml.gz');
9951 my @paths = fetch_dell_fw_list('Catalog.xml');
9952 # -q is quiet, disabling interactivity and reducing console output
9953 my $fwopts = "-q";
9954 if (@paths) {
9955 for my $url (@paths) {
9956 fetch_dell_fw($url);
9957 }
9958 run_firmware_scripts($fwopts, $tmpdir);
9959 } else {
9960 print STDERR "error: Unsupported Dell model '$product'.\n";
9961 print STDERR "error: Please report to $errorsto.\n";
9962 }
9963 chdir('/');
9964 } else {
9965 print STDERR "error: Unsupported Dell model '$product'.\n";
9966 print STDERR "error: Please report to $errorsto.\n";
9967 }
9968 }
9969
9970 sub fetch_dell_fw {
9971 my $path = shift;
9972 my $url = "ftp://ftp.us.dell.com/$path";
9973 download($url);
9974 }
9975
9976 # Using ftp://ftp.us.dell.com/catalog/Catalog.xml.gz, figure out which
9977 # firmware packages to download from Dell. Only work for Linux
9978 # machines and 11th generation Dell servers.
9979 sub fetch_dell_fw_list {
9980 my $filename = shift;
9981
9982 my $product = `dmidecode -s system-product-name`;
9983 chomp $product;
9984 my ($mybrand, $mymodel) = split(/\s+/, $product);
9985
9986 print STDERR "Finding firmware bundles for $mybrand $mymodel\n";
9987
9988 my $xml = XMLin($filename);
9989 my @paths;
9990 for my $bundle (@{$xml->{SoftwareBundle}}) {
9991 my $brand = $bundle->{TargetSystems}->{Brand}->{Display}->{content};
9992 my $model = $bundle->{TargetSystems}->{Brand}->{Model}->{Display}->{content};
9993 my $oscode;
9994 if ("ARRAY" eq ref $bundle->{TargetOSes}->{OperatingSystem}) {
9995 $oscode = $bundle->{TargetOSes}->{OperatingSystem}[0]->{osCode};
9996 } else {
9997 $oscode = $bundle->{TargetOSes}->{OperatingSystem}->{osCode};
9998 }
9999 if ($mybrand eq $brand && $mymodel eq $model && "LIN" eq $oscode)
10000 {
10001 @paths = map { $_->{path} } @{$bundle->{Contents}->{Package}};
10002 }
10003 }
10004 for my $component (@{$xml->{SoftwareComponent}}) {
10005 my $componenttype = $component->{ComponentType}->{value};
10006
10007 # Drop application packages, only firmware and BIOS
10008 next if 'APAC' eq $componenttype;
10009
10010 my $cpath = $component->{path};
10011 for my $path (@paths) {
10012 if ($cpath =~ m%/$path$%) {
10013 push(@paths, $cpath);
10014 }
10015 }
10016 }
10017 return @paths;
10018 }
10019 </pre>
10020
10021 <p>The code is only tested on RedHat Enterprise Linux, but I suspect
10022 it could work on other platforms with some tweaking. Anyone know a
10023 index like Catalog.xml is available from HP for HP servers? At the
10024 moment I maintain a similar list manually and it is quickly getting
10025 outdated.</p>
10026
10027 </div>
10028 <div class="tags">
10029
10030
10031 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
10032
10033
10034 </div>
10035 </div>
10036 <div class="padding"></div>
10037
10038 <div class="entry">
10039 <div class="title">
10040 <a href="http://people.skolelinux.org/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>
10041 </div>
10042 <div class="date">
10043 4th August 2011
10044 </div>
10045 <div class="body">
10046 <p>Wouter Verhelst have some
10047 <a href="http://grep.be/blog/en/retorts/pere_kubuntu_boot">interesting
10048 comments and opinions</a> on my blog post on
10049 <a href="http://people.skolelinux.org/pere/blog/What_should_start_from__etc_rcS_d__in_Debian____almost_nothing.html">the
10050 need to clean up /etc/rcS.d/ in Debian</a> and my blog post about
10051 <a href="http://people.skolelinux.org/pere/blog/What_is_missing_in_the_Debian_desktop__or_why_my_parents_use_Kubuntu.html">the
10052 default KDE desktop in Debian</a>. I only have time to address one
10053 small piece of his comment now, and though it best to address the
10054 misunderstanding he bring forward:</p>
10055
10056 <p><blockquote>
10057 Currently, a system admin has four options: [...] boot to a
10058 single-user system (by adding 'single' to the kernel command line;
10059 this runs rcS and rc1 scripts)
10060 </blockquote></p>
10061
10062 <p>This make me believe Wouter believe booting into single user mode
10063 and booting into runlevel 1 is the same. I am not surprised he
10064 believe this, because it would make sense and is a quite sensible
10065 thing to believe. But because the boot in Debian is slightly broken,
10066 runlevel 1 do not work properly and it isn't the same as single user
10067 mode. I'll try to explain what is actually happing, but it is a bit
10068 hard to explain.</p>
10069
10070 <p>Single user mode is defined like this in /etc/inittab:
10071 "<tt>~~:S:wait:/sbin/sulogin</tt>". This means the only thing that is
10072 executed in single user mode is sulogin. Single user mode is a boot
10073 state "between" the runlevels, and when booting into single user mode,
10074 only the scripts in /etc/rcS.d/ are executed before the init process
10075 enters the single user state. When switching to runlevel 1, the state
10076 is in fact not ending in runlevel 1, but it passes through runlevel 1
10077 and end up in the single user mode (see /etc/rc1.d/S03single, which
10078 runs "init -t1 S" to switch to single user mode at the end of runlevel
10079 1. It is confusing that the 'S' (single user) init mode is not the
10080 mode enabled by /etc/rcS.d/ (which is more like the initial boot
10081 mode).</p>
10082
10083 <p>This summary might make it clearer. When booting for the first
10084 time into single user mode, the following commands are executed:
10085 "<tt>/etc/init.d/rc S; /sbin/sulogin</tt>". When booting into
10086 runlevel 1, the following commands are executed: "<tt>/etc/init.d/rc
10087 S; /etc/init.d/rc 1; /sbin/sulogin</tt>". A problem show up when
10088 trying to continue after visiting single user mode. Not all services
10089 are started again as they should, causing the machine to end up in an
10090 unpredicatble state. This is why Debian admins recommend rebooting
10091 after visiting single user mode.</p>
10092
10093 <p>A similar problem with runlevel 1 is caused by the amount of
10094 scripts executed from /etc/rcS.d/. When switching from say runlevel 2
10095 to runlevel 1, the services started from /etc/rcS.d/ are not properly
10096 stopped when passing through the scripts in /etc/rc1.d/, and not
10097 started again when switching away from runlevel 1 to the runlevels
10098 2-5. I believe the problem is best fixed by moving all the scripts
10099 out of /etc/rcS.d/ that are not <strong>required</strong> to get a
10100 functioning single user mode during boot.</p>
10101
10102 <p>I have spent several years investigating the Debian boot system,
10103 and discovered this problem a few years ago. I suspect it originates
10104 from when sysvinit was introduced into Debian, a long time ago.</p>
10105
10106 </div>
10107 <div class="tags">
10108
10109
10110 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
10111
10112
10113 </div>
10114 </div>
10115 <div class="padding"></div>
10116
10117 <div class="entry">
10118 <div class="title">
10119 <a href="http://people.skolelinux.org/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>
10120 </div>
10121 <div class="date">
10122 30th July 2011
10123 </div>
10124 <div class="body">
10125 <p>In the Debian boot system, several packages include scripts that
10126 are started from /etc/rcS.d/. In fact, there is a bite more of them
10127 than make sense, and this causes a few problems. What kind of
10128 problems, you might ask. There are at least two problems. The first
10129 is that it is not possible to recover a machine after switching to
10130 runlevel 1. One need to actually reboot to get the machine back to
10131 the expected state. The other is that single user boot will sometimes
10132 run into problems because some of the subsystems are activated before
10133 the root login is presented, causing problems when trying to recover a
10134 machine from a problem in that subsystem. A minor additional point is
10135 that moving more scripts out of rcS.d/ and into the other rc#.d/
10136 directories will increase the amount of scripts that can run in
10137 parallel during boot, and thus decrease the boot time.</p>
10138
10139 <p>So, which scripts should start from rcS.d/. In short, only the
10140 scripts that _have_ to execute before the root login prompt is
10141 presented during a single user boot should go there. Everything else
10142 should go into the numeric runlevels. This means things like
10143 lm-sensors, fuse and x11-common should not run from rcS.d, but from
10144 the numeric runlevels. Today in Debian, there are around 115 init.d
10145 scripts that are started from rcS.d/, and most of them should be moved
10146 out. Do your package have one of them? Please help us make single
10147 user and runlevel 1 better by moving it.</p>
10148
10149 <p>Scripts setting up the screen, keyboard, system partitions
10150 etc. should still be started from rcS.d/, but there is for example no
10151 need to have the network enabled before the single user login prompt
10152 is presented.</p>
10153
10154 <p>As always, things are not so easy to fix as they sound. To keep
10155 Debian systems working while scripts migrate and during upgrades, the
10156 scripts need to be moved from rcS.d/ to rc2.d/ in reverse dependency
10157 order, ie the scripts that nothing in rcS.d/ depend on can be moved,
10158 and the next ones can only be moved when their dependencies have been
10159 moved first. This migration must be done sequentially while we ensure
10160 that the package system upgrade packages in the right order to keep
10161 the system state correct. This will require some coordination when it
10162 comes to network related packages, but most of the packages with
10163 scripts that should migrate do not have anything in rcS.d/ depending
10164 on them. Some packages have already been updated, like the sudo
10165 package, while others are still left to do. I wish I had time to work
10166 on this myself, but real live constrains make it unlikely that I will
10167 find time to push this forward.</p>
10168
10169 </div>
10170 <div class="tags">
10171
10172
10173 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
10174
10175
10176 </div>
10177 </div>
10178 <div class="padding"></div>
10179
10180 <div class="entry">
10181 <div class="title">
10182 <a href="http://people.skolelinux.org/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>
10183 </div>
10184 <div class="date">
10185 29th July 2011
10186 </div>
10187 <div class="body">
10188 <p>While at Debconf11, I have several times during discussions
10189 mentioned the issues I believe should be improved in Debian for its
10190 desktop to be useful for more people. The use case for this is my
10191 parents, which are currently running Kubuntu which solve the
10192 issues.</p>
10193
10194 <p>I suspect these four missing features are not very hard to
10195 implement. After all, they are present in Ubuntu, so if we wanted to
10196 do this in Debian we would have a source.</p>
10197
10198 <ol>
10199
10200 <li><strong>Simple GUI based upgrade of packages.</strong> When there
10201 are new packages available for upgrades, a icon in the KDE status bar
10202 indicate this, and clicking on it will activate the simple upgrade
10203 tool to handle it. I have no problem guiding both of my parents
10204 through the process over the phone. If a kernel reboot is required,
10205 this too is indicated by the status bars and the upgrade tool. Last
10206 time I checked, nothing with the same features was working in KDE in
10207 Debian.</li>
10208
10209 <li><strong>Simple handling of missing Firefox browser
10210 plugins.</strong> When the browser encounter a MIME type it do not
10211 currently have a handler for, it will ask the user if the system
10212 should search for a package that would add support for this MIME type,
10213 and if the user say yes, the APT sources will be searched for packages
10214 advertising the MIME type in their control file (visible in the
10215 Packages file in the APT archive). If one or more packages are found,
10216 it is a simple click of the mouse to add support for the missing mime
10217 type. If the package require the user to accept some non-free
10218 license, this is explained to the user. The entire process make it
10219 more clear to the user why something do not work in the browser, and
10220 make the chances higher for the user to blame the web page authors and
10221 not the browser for any missing features.</li>
10222
10223 <li><strong>Simple handling of missing multimedia codec/format
10224 handlers.</strong> When the media players encounter a format or codec
10225 it is not supporting, a dialog pop up asking the user if the system
10226 should search for a package that would add support for it. This
10227 happen with things like MP3, Windows Media or H.264. The selection
10228 and installation procedure is very similar to the Firefox browser
10229 plugin handling. This is as far as I know implemented using a
10230 gstreamer hook. The end result is that the user easily get access to
10231 the codecs that are present from the APT archives available, while
10232 explaining more on why a given format is unsupported by Ubuntu.</li>
10233
10234 <li><strong>Better browser handling of some MIME types.</strong> When
10235 displaying a text/plain file in my Debian browser, it will propose to
10236 start emacs to show it. If I remember correctly, when doing the same
10237 in Kunbutu it show the file as a text file in the browser. At least I
10238 know Opera will show text files within the browser. I much prefer the
10239 latter behaviour.</li>
10240
10241 </ol>
10242
10243 <p>There are other nice features as well, like the simplified suite
10244 upgrader, but given that I am the one mostly doing the dist-upgrade,
10245 it do not matter much.</p>
10246
10247 <p>I really hope we could get these features in place for the next
10248 Debian release. It would require the coordinated effort of several
10249 maintainers, but would make the end user experience a lot better.</p>
10250
10251 </div>
10252 <div class="tags">
10253
10254
10255 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/h264">h264</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>.
10256
10257
10258 </div>
10259 </div>
10260 <div class="padding"></div>
10261
10262 <div class="entry">
10263 <div class="title">
10264 <a href="http://people.skolelinux.org/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>
10265 </div>
10266 <div class="date">
10267 26th July 2011
10268 </div>
10269 <div class="body">
10270 <p>The Norwegian <a href="http://www.fiksgatami.no/">FiksGataMi</A>
10271 site is build on Debian/Squeeze, and this platform was chosen because
10272 I am most familiar with Debian (being a Debian Developer for around 10
10273 years) because it is the latest stable Debian release which should get
10274 security support for a few years.</p>
10275
10276 <p>The web service is written in Perl, and depend on some perl modules
10277 that are missing in Debian at the moment. It would be great if these
10278 modules were added to the Debian archive, allowing anyone to set up
10279 their own <a href="http://www.fixmystreet.com">FixMyStreet</a> clone
10280 in their own country using only Debian packages. The list of modules
10281 missing in Debian/Squeeze isn't very long, and I hope the perl group
10282 will find time to package the 12 modules Catalyst::Plugin::SmartURI,
10283 Catalyst::Plugin::Unicode::Encoding, Catalyst::View::TT, Devel::Hide,
10284 Sort::Key, Statistics::Distributions, Template::Plugin::Comma,
10285 Template::Plugin::DateTime::Format, Term::Size::Any, Term::Size::Perl,
10286 URI::SmartURI and Web::Scraper to make the maintenance of FixMyStreet
10287 easier in the future.</p>
10288
10289 <p>Thanks to the great tools in Debian, getting the missing modules
10290 installed on my server was a simple call to 'cpan2deb Module::Name'
10291 and 'dpkg -i' to install the resulting package. But this leave me
10292 with the responsibility of tracking security problems, which I really
10293 do not have time for.</p>
10294
10295 </div>
10296 <div class="tags">
10297
10298
10299 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami</a>.
10300
10301
10302 </div>
10303 </div>
10304 <div class="padding"></div>
10305
10306 <div class="entry">
10307 <div class="title">
10308 <a href="http://people.skolelinux.org/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>
10309 </div>
10310 <div class="date">
10311 3rd April 2011
10312 </div>
10313 <div class="body">
10314 <p>Here is a small update for my English readers. Most of my blog
10315 posts have been in Norwegian the last few weeks, so here is a short
10316 update in English.</p>
10317
10318 <p>The kids still keep me too busy to get much free software work
10319 done, but I did manage to organise a project to get a Norwegian port
10320 of the British service
10321 <a href="http://www.fixmystreet.com/">FixMyStreet</a> up and running,
10322 and it has been running for a month now. The entire project has been
10323 organised by me and two others. Around Christmas we gathered sponsors
10324 to fund the development work. In January I drafted a contract with
10325 <a href="http://www.mysociety.org/">mySociety</a> on what to develop,
10326 and in February the development took place. Most of it involved
10327 converting the source to use GPS coordinates instead of British
10328 easting/northing, and the resulting code should be a lot easier to get
10329 running in any country by now. The Norwegian
10330 <a href="http://www.fiksgatami.no/">FiksGataMi</a> is using
10331 <a href="http://www.openstreetmap.org/">OpenStreetmap</a> as the map
10332 source and the source for administrative borders in Norway, and
10333 support for this had to be added/fixed.</p>
10334
10335 <p>The Norwegian version went live March 3th, and we spent the weekend
10336 polishing the system before we announced it March 7th. The system is
10337 running on a KVM instance of Debian/Squeeze, and has seen almost 3000
10338 problem reports in a few weeks. Soon we hope to announce the Android
10339 and iPhone versions making it even easier to report problems with the
10340 public infrastructure.</p>
10341
10342 <p>Perhaps something to consider for those of you in countries without
10343 such service?</p>
10344
10345 </div>
10346 <div class="tags">
10347
10348
10349 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami</a>, <a href="http://people.skolelinux.org/pere/blog/tags/kart">kart</a>.
10350
10351
10352 </div>
10353 </div>
10354 <div class="padding"></div>
10355
10356 <div class="entry">
10357 <div class="title">
10358 <a href="http://people.skolelinux.org/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>
10359 </div>
10360 <div class="date">
10361 28th January 2011
10362 </div>
10363 <div class="body">
10364 <p>The last few days I have looked at ways to track open security
10365 issues here at my work with the University of Oslo. My idea is that
10366 it should be possible to use the information about security issues
10367 available on the Internet, and check our locally
10368 maintained/distributed software against this information. It should
10369 allow us to verify that no known security issues are forgotten. The
10370 CVE database listing vulnerabilities seem like a great central point,
10371 and by using the package lists from Debian mapped to CVEs provided by
10372 the testing security team, I believed it should be possible to figure
10373 out which security holes were present in our free software
10374 collection.</p>
10375
10376 <p>After reading up on the topic, it became obvious that the first
10377 building block is to be able to name software packages in a unique and
10378 consistent way across data sources. I considered several ways to do
10379 this, for example coming up with my own naming scheme like using URLs
10380 to project home pages or URLs to the Freshmeat entries, or using some
10381 existing naming scheme. And it seem like I am not the first one to
10382 come across this problem, as MITRE already proposed and implemented a
10383 solution. Enter the <a href="http://cpe.mitre.org/index.html">Common
10384 Platform Enumeration</a> dictionary, a vocabulary for referring to
10385 software, hardware and other platform components. The CPE ids are
10386 mapped to CVEs in the <a href="http://web.nvd.nist.gov/">National
10387 Vulnerability Database</a>, allowing me to look up know security
10388 issues for any CPE name. With this in place, all I need to do is to
10389 locate the CPE id for the software packages we use at the university.
10390 This is fairly trivial (I google for 'cve cpe $package' and check the
10391 NVD entry if a CVE for the package exist).</p>
10392
10393 <p>To give you an example. The GNU gzip source package have the CPE
10394 name cpe:/a:gnu:gzip. If the old version 1.3.3 was the package to
10395 check out, one could look up
10396 <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
10397 in NVD</a> and get a list of 6 security holes with public CVE entries.
10398 The most recent one is
10399 <a href="http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-0001">CVE-2010-0001</a>,
10400 and at the bottom of the NVD page for this vulnerability the complete
10401 list of affected versions is provided.</p>
10402
10403 <p>The NVD database of CVEs is also available as a XML dump, allowing
10404 for offline processing of issues. Using this dump, I've written a
10405 small script taking a list of CPEs as input and list all CVEs
10406 affecting the packages represented by these CPEs. One give it CPEs
10407 with version numbers as specified above and get a list of open
10408 security issues out.</p>
10409
10410 <p>Of course for this approach to be useful, the quality of the NVD
10411 information need to be high. For that to happen, I believe as many as
10412 possible need to use and contribute to the NVD database. I notice
10413 RHEL is providing
10414 <a href="https://www.redhat.com/security/data/metrics/rhsamapcpe.txt">a
10415 map from CVE to CPE</a>, indicating that they are using the CPE
10416 information. I'm not aware of Debian and Ubuntu doing the same.</p>
10417
10418 <p>To get an idea about the quality for free software, I spent some
10419 time making it possible to compare the CVE database from Debian with
10420 the CVE database in NVD. The result look fairly good, but there are
10421 some inconsistencies in NVD (same software package having several
10422 CPEs), and some inaccuracies (NVD not mentioning buggy packages that
10423 Debian believe are affected by a CVE). Hope to find time to improve
10424 the quality of NVD, but that require being able to get in touch with
10425 someone maintaining it. So far my three emails with questions and
10426 corrections have not seen any reply, but I hope contact can be
10427 established soon.</p>
10428
10429 <p>An interesting application for CPEs is cross platform package
10430 mapping. It would be useful to know which packages in for example
10431 RHEL, OpenSuSe and Mandriva are missing from Debian and Ubuntu, and
10432 this would be trivial if all linux distributions provided CPE entries
10433 for their packages.</p>
10434
10435 </div>
10436 <div class="tags">
10437
10438
10439 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
10440
10441
10442 </div>
10443 </div>
10444 <div class="padding"></div>
10445
10446 <div class="entry">
10447 <div class="title">
10448 <a href="http://people.skolelinux.org/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>
10449 </div>
10450 <div class="date">
10451 23rd January 2011
10452 </div>
10453 <div class="body">
10454 <p>In the
10455 <a href="http://packages.qa.debian.org/discover-data">discover-data</a>
10456 package in Debian, there is a script to report useful information
10457 about the running hardware for use when people report missing
10458 information. One part of this script that I find very useful when
10459 debugging hardware problems, is the part mapping loaded kernel module
10460 to the PCI device it claims. It allow me to quickly see if the kernel
10461 module I expect is driving the hardware I am struggling with. To see
10462 the output, make sure discover-data is installed and run
10463 <tt>/usr/share/bug/discover-data 3>&1</tt>. The relevant output on
10464 one of my machines like this:</p>
10465
10466 <pre>
10467 loaded modules:
10468 10de:03eb i2c_nforce2
10469 10de:03f1 ohci_hcd
10470 10de:03f2 ehci_hcd
10471 10de:03f0 snd_hda_intel
10472 10de:03ec pata_amd
10473 10de:03f6 sata_nv
10474 1022:1103 k8temp
10475 109e:036e bttv
10476 109e:0878 snd_bt87x
10477 11ab:4364 sky2
10478 </pre>
10479
10480 <p>The code in question look like this, slightly modified for
10481 readability and to drop the output to file descriptor 3:</p>
10482
10483 <pre>
10484 if [ -d /sys/bus/pci/devices/ ] ; then
10485 echo loaded pci modules:
10486 (
10487 cd /sys/bus/pci/devices/
10488 for address in * ; do
10489 if [ -d "$address/driver/module" ] ; then
10490 module=`cd $address/driver/module ; pwd -P | xargs basename`
10491 if grep -q "^$module " /proc/modules ; then
10492 address=$(echo $address |sed s/0000://)
10493 id=`lspci -n -s $address | tail -n 1 | awk '{print $3}'`
10494 echo "$id $module"
10495 fi
10496 fi
10497 done
10498 )
10499 echo
10500 fi
10501 </pre>
10502
10503 <p>Similar code could be used to extract USB device module
10504 mappings:</p>
10505
10506 <pre>
10507 if [ -d /sys/bus/usb/devices/ ] ; then
10508 echo loaded usb modules:
10509 (
10510 cd /sys/bus/usb/devices/
10511 for address in * ; do
10512 if [ -d "$address/driver/module" ] ; then
10513 module=`cd $address/driver/module ; pwd -P | xargs basename`
10514 if grep -q "^$module " /proc/modules ; then
10515 address=$(echo $address |sed s/0000://)
10516 id=$(lsusb -s $address | tail -n 1 | awk '{print $6}')
10517 if [ "$id" ] ; then
10518 echo "$id $module"
10519 fi
10520 fi
10521 fi
10522 done
10523 )
10524 echo
10525 fi
10526 </pre>
10527
10528 <p>This might perhaps be something to include in other tools as
10529 well.</p>
10530
10531 </div>
10532 <div class="tags">
10533
10534
10535 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
10536
10537
10538 </div>
10539 </div>
10540 <div class="padding"></div>
10541
10542 <div class="entry">
10543 <div class="title">
10544 <a href="http://people.skolelinux.org/pere/blog/How_to_test_if_a_laptop_is_working_with_Linux.html">How to test if a laptop is working with Linux</a>
10545 </div>
10546 <div class="date">
10547 22nd December 2010
10548 </div>
10549 <div class="body">
10550 <p>The last few days I have spent at work here at the <a
10551 href="http://www.uio.no/">University of Oslo</a> testing if the new
10552 batch of computers will work with Linux. Every year for the last few
10553 years the university have organised shared bid of a few thousand
10554 computers, and this year HP won the bid. Two different desktops and
10555 five different laptops are on the list this year. We in the UNIX
10556 group want to know which one of these computers work well with RHEL
10557 and Ubuntu, the two Linux distributions we currently handle at the
10558 university.</p>
10559
10560 <p>My test method is simple, and I share it here to get feedback and
10561 perhaps inspire others to test hardware as well. To test, I PXE
10562 install the OS version of choice, and log in as my normal user and run
10563 a few applications and plug in selected pieces of hardware. When
10564 something fail, I make a note about this in the test matrix and move
10565 on. If I have some spare time I try to report the bug to the OS
10566 vendor, but as I only have the machines for a short time, I rarely
10567 have the time to do this for all the problems I find.</p>
10568
10569 <p>Anyway, to get to the point of this post. Here is the simple tests
10570 I perform on a new model.</p>
10571
10572 <ul>
10573
10574 <li>Is PXE installation working? I'm testing with RHEL6, Ubuntu Lucid
10575 and Ubuntu Maverik at the moment. If I feel like it, I also test with
10576 RHEL5 and Debian Edu/Squeeze.</li>
10577
10578 <li>Is X.org working? If the graphical login screen show up after
10579 installation, X.org is working.</li>
10580
10581 <li>Is hardware accelerated OpenGL working? Running glxgears (in
10582 package mesa-utils on Ubuntu) and writing down the frames per second
10583 reported by the program.</li>
10584
10585 <li>Is sound working? With Gnome and KDE, a sound is played when
10586 logging in, and if I can hear this the test is successful. If there
10587 are several audio exits on the machine, I try them all and check if
10588 the Gnome/KDE audio mixer can control where to send the sound. I
10589 normally test this by playing
10590 <a href="http://www.nuug.no/aktiviteter/20101012-chef/ ">a HTML5
10591 video</a> in Firefox/Iceweasel.</li>
10592
10593 <li>Is the USB subsystem working? I test this by plugging in a USB
10594 memory stick and see if Gnome/KDE notices this.</li>
10595
10596 <li>Is the CD/DVD player working? I test this by inserting any CD/DVD
10597 I have lying around, and see if Gnome/KDE notices this.</li>
10598
10599 <li>Is any built in camera working? Test using cheese, and see if a
10600 picture from the v4l device show up.</li>
10601
10602 <li>Is bluetooth working? Use the Gnome/KDE browsing tool to see if
10603 any bluetooth devices are discovered. In my office, I normally see a
10604 few.</li>
10605
10606 <li>For laptops, is the SD or Compaq Flash reader working. I have
10607 memory modules lying around, and stick them in and see if Gnome/KDE
10608 notice this.</li>
10609
10610 <li>For laptops, is suspend/hibernate working? I'm testing if the
10611 special button work, and if the laptop continue to work after
10612 resume.</li>
10613
10614 <li>For laptops, is the extra buttons working, like audio level,
10615 adjusting background light, switching on/off external video output,
10616 switching on/off wifi, bluetooth, etc? The set of buttons differ from
10617 laptop to laptop, so I just write down which are working and which are
10618 not.</li>
10619
10620 <li>Some laptops have smart card readers, finger print readers,
10621 acceleration sensors etc. I rarely test these, as I do not know how
10622 to quickly test if they are working or not, so I only document their
10623 existence.</li>
10624
10625 </ul>
10626
10627 <p>By now I suspect you are really curious what the test results are
10628 for the HP machines I am testing. I'm not done yet, so I will report
10629 the test results later. For now I can report that HP 8100 Elite work
10630 fine, and hibernation fail with HP EliteBook 8440p on Ubuntu Lucid,
10631 and audio fail on RHEL6. Ubuntu Maverik worked with 8440p. As you
10632 can see, I have most machines left to test. One interesting
10633 observation is that Ubuntu Lucid has almost twice the frame rate than
10634 RHEL6 with glxgears. No idea why.</p>
10635
10636 </div>
10637 <div class="tags">
10638
10639
10640 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
10641
10642
10643 </div>
10644 </div>
10645 <div class="padding"></div>
10646
10647 <div class="entry">
10648 <div class="title">
10649 <a href="http://people.skolelinux.org/pere/blog/Some_thoughts_on_BitCoins.html">Some thoughts on BitCoins</a>
10650 </div>
10651 <div class="date">
10652 11th December 2010
10653 </div>
10654 <div class="body">
10655 <p>As I continue to explore
10656 <a href="http://www.bitcoin.org/">BitCoin</a>, I've starting to wonder
10657 what properties the system have, and how it will be affected by laws
10658 and regulations here in Norway. Here are some random notes.</p>
10659
10660 <p>One interesting thing to note is that since the transactions are
10661 verified using a peer to peer network, all details about a transaction
10662 is known to everyone. This means that if a BitCoin address has been
10663 published like I did with mine in my initial post about BitCoin, it is
10664 possible for everyone to see how many BitCoins have been transfered to
10665 that address. There is even a web service to look at the details for
10666 all transactions. There I can see that my address
10667 <a href="http://blockexplorer.com/address/15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a>
10668 have received 16.06 Bitcoin, the
10669 <a href="http://blockexplorer.com/address/1LfdGnGuWkpSJgbQySxxCWhv8MHqvwst3">1LfdGnGuWkpSJgbQySxxCWhv8MHqvwst3</a>
10670 address of Simon Phipps have received 181.97 BitCoin and the address
10671 <a href="http://blockexplorer.com/address/1MCwBbhNGp5hRm5rC1Aims2YFRe2SXPYKt">1MCwBbhNGp5hRm5rC1Aims2YFRe2SXPYKt</A>
10672 of EFF have received 2447.38 BitCoins so far. Thank you to each and
10673 every one of you that donated bitcoins to support my activity. The
10674 fact that anyone can see how much money was transfered to a given
10675 address make it more obvious why the BitCoin community recommend to
10676 generate and hand out a new address for each transaction. I'm told
10677 there is no way to track which addresses belong to a given person or
10678 organisation without the person or organisation revealing it
10679 themselves, as Simon, EFF and I have done.</p>
10680
10681 <p>In Norway, and in most other countries, there are laws and
10682 regulations limiting how much money one can transfer across the border
10683 without declaring it. There are money laundering, tax and accounting
10684 laws and regulations I would expect to apply to the use of BitCoin.
10685 If the Skolelinux foundation
10686 (<a href="http://linuxiskolen.no/slxdebianlabs/donations.html">SLX
10687 Debian Labs</a>) were to accept donations in BitCoin in addition to
10688 normal bank transfers like EFF is doing, how should this be accounted?
10689 Given that it is impossible to know if money can cross the border or
10690 not, should everything or nothing be declared? What exchange rate
10691 should be used when calculating taxes? Would receivers have to pay
10692 income tax if the foundation were to pay Skolelinux contributors in
10693 BitCoin? I have no idea, but it would be interesting to know.</p>
10694
10695 <p>For a currency to be useful and successful, it must be trusted and
10696 accepted by a lot of users. It must be possible to get easy access to
10697 the currency (as a wage or using currency exchanges), and it must be
10698 easy to spend it. At the moment BitCoin seem fairly easy to get
10699 access to, but there are very few places to spend it. I am not really
10700 a regular user of any of the vendor types currently accepting BitCoin,
10701 so I wonder when my kind of shop would start accepting BitCoins. I
10702 would like to buy electronics, travels and subway tickets, not herbs
10703 and books. :) The currency is young, and this will improve over time
10704 if it become popular, but I suspect regular banks will start to lobby
10705 to get BitCoin declared illegal if it become popular. I'm sure they
10706 will claim it is helping fund terrorism and money laundering (which
10707 probably would be true, as is any currency in existence), but I
10708 believe the problems should be solved elsewhere and not by blaming
10709 currencies.</p>
10710
10711 <p>The process of creating new BitCoins is called mining, and it is
10712 CPU intensive process that depend on a bit of luck as well (as one is
10713 competing against all the other miners currently spending CPU cycles
10714 to see which one get the next lump of cash). The "winner" get 50
10715 BitCoin when this happen. Yesterday I came across the obvious way to
10716 join forces to increase ones changes of getting at least some coins,
10717 by coordinating the work on mining BitCoins across several machines
10718 and people, and sharing the result if one is lucky and get the 50
10719 BitCoins. Check out
10720 <a href="http://www.bluishcoder.co.nz/bitcoin-pool/">BitCoin Pool</a>
10721 if this sounds interesting. I have not had time to try to set up a
10722 machine to participate there yet, but have seen that running on ones
10723 own for a few days have not yield any BitCoins througth mining
10724 yet.</p>
10725
10726 <p>Update 2010-12-15: Found an <a
10727 href="http://inertia.posterous.com/reply-to-the-underground-economist-why-bitcoi">interesting
10728 criticism</a> of bitcoin. Not quite sure how valid it is, but thought
10729 it was interesting to read. The arguments presented seem to be
10730 equally valid for gold, which was used as a currency for many years.</p>
10731
10732 </div>
10733 <div class="tags">
10734
10735
10736 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
10737
10738
10739 </div>
10740 </div>
10741 <div class="padding"></div>
10742
10743 <div class="entry">
10744 <div class="title">
10745 <a href="http://people.skolelinux.org/pere/blog/Now_accepting_bitcoins___anonymous_and_distributed_p2p_crypto_money.html">Now accepting bitcoins - anonymous and distributed p2p crypto-money</a>
10746 </div>
10747 <div class="date">
10748 10th December 2010
10749 </div>
10750 <div class="body">
10751 <p>With this weeks lawless
10752 <a href="http://www.salon.com/news/opinion/glenn_greenwald/2010/12/06/wikileaks/index.html">governmental
10753 attacks</a> on Wikileak and
10754 <a href="http://www.salon.com/technology/dan_gillmor/2010/12/06/war_on_speech">free
10755 speech</a>, it has become obvious that PayPal, visa and mastercard can
10756 not be trusted to handle money transactions.
10757 A blog post from
10758 <a href="http://webmink.com/2010/12/06/now-accepting-bitcoin/">Simon
10759 Phipps on bitcoin</a> reminded me about a project that a friend of
10760 mine mentioned earlier. I decided to follow Simon's example, and get
10761 involved with <a href="http://www.bitcoin.org/">BitCoin</a>. I got
10762 some help from my friend to get it all running, and he even handed me
10763 some bitcoins to get started. I even donated a few bitcoins to Simon
10764 for helping me remember BitCoin.</p>
10765
10766 <p>So, what is bitcoins, you probably wonder? It is a digital
10767 crypto-currency, decentralised and handled using peer-to-peer
10768 networks. It allows anonymous transactions and prohibits central
10769 control over the transactions, making it impossible for governments
10770 and companies alike to block donations and other transactions. The
10771 source is free software, and while the key dependency wxWidgets 2.9
10772 for the graphical user interface is missing in Debian, the command
10773 line client builds just fine. Hopefully Jonas
10774 <a href="http://bugs.debian.org/578157">will get the package into
10775 Debian</a> soon.</p>
10776
10777 <p>Bitcoins can be converted to other currencies, like USD and EUR.
10778 There are <a href="http://www.bitcoin.org/trade">companies accepting
10779 bitcoins</a> when selling services and goods, and there are even
10780 currency "stock" markets where the exchange rate is decided. There
10781 are not many users so far, but the concept seems promising. If you
10782 want to get started and lack a friend with any bitcoins to spare,
10783 you can even get
10784 <a href="https://freebitcoins.appspot.com/">some for free</a> (0.05
10785 bitcoin at the time of writing). Use
10786 <a href="http://www.bitcoinwatch.com/">BitcoinWatch</a> to keep an eye
10787 on the current exchange rates.</p>
10788
10789 <p>As an experiment, I have decided to set up bitcoind on one of my
10790 machines. If you want to support my activity, please send Bitcoin
10791 donations to the address
10792 <b>15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</b>. Thank you!</p>
10793
10794 </div>
10795 <div class="tags">
10796
10797
10798 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
10799
10800
10801 </div>
10802 </div>
10803 <div class="padding"></div>
10804
10805 <div class="entry">
10806 <div class="title">
10807 <a href="http://people.skolelinux.org/pere/blog/Why_isn_t_Debian_Edu_using_VLC_.html">Why isn't Debian Edu using VLC?</a>
10808 </div>
10809 <div class="date">
10810 27th November 2010
10811 </div>
10812 <div class="body">
10813 <p>In the latest issue of Linux Journal, the readers choices were
10814 presented, and the winner among the multimedia player were VLC.
10815 Personally, I like VLC, and it is my player of choice when I first try
10816 to play a video file or stream. Only if VLC fail will I drag out
10817 gmplayer to see if it can do better. The reason is mostly the failure
10818 model and trust. When VLC fail, it normally pop up a error message
10819 reporting the problem. When mplayer fail, it normally segfault or
10820 just hangs. The latter failure mode drain my trust in the program.<p>
10821
10822 <p>But even if VLC is my player of choice, we have choosen to use
10823 mplayer in <a href="http://www.skolelinux.org/">Debian
10824 Edu/Skolelinux</a>. The reason is simple. We need a good browser
10825 plugin to play web videos seamlessly, and the VLC browser plugin is
10826 not very good. For example, it lack in-line control buttons, so there
10827 is no way for the user to pause the video. Also, when I
10828 <a href="http://wiki.debian.org/DebianEdu/BrowserMultimedia">last
10829 tested the browser plugins</a> available in Debian, the VLC plugin
10830 failed on several video pages where mplayer based plugins worked. If
10831 the browser plugin for VLC was as good as the gecko-mediaplayer
10832 package (which uses mplayer), we would switch.</P>
10833
10834 <p>While VLC is a good player, its user interface is slightly
10835 annoying. The most annoying feature is its inconsistent use of
10836 keyboard shortcuts. When the player is in full screen mode, its
10837 shortcuts are different from when it is playing the video in a window.
10838 For example, space only work as pause when in full screen mode. I
10839 wish it had consisten shortcuts and that space also would work when in
10840 window mode. Another nice shortcut in gmplayer is [enter] to restart
10841 the current video. It is very nice when playing short videos from the
10842 web and want to restart it when new people arrive to have a look at
10843 what is going on.</p>
10844
10845 </div>
10846 <div class="tags">
10847
10848
10849 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="http://people.skolelinux.org/pere/blog/tags/video">video</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>.
10850
10851
10852 </div>
10853 </div>
10854 <div class="padding"></div>
10855
10856 <div class="entry">
10857 <div class="title">
10858 <a href="http://people.skolelinux.org/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>
10859 </div>
10860 <div class="date">
10861 22nd November 2010
10862 </div>
10863 <div class="body">
10864 <p>Michael Biebl suggested to me on IRC, that I changed my automated
10865 upgrade testing of the
10866 <a href="http://people.skolelinux.org/~pere/debian-upgrade-testing/">Lenny
10867 Gnome and KDE Desktop</a> to do <tt>apt-get autoremove</tt> when using apt-get.
10868 This seem like a very good idea, so I adjusted by test scripts and
10869 can now present the updated result from today:</p>
10870
10871 <p>This is for Gnome:</p>
10872
10873 <p>Installed using apt-get, missing with aptitude</p>
10874
10875 <blockquote><p>
10876 apache2.2-bin
10877 aptdaemon
10878 baobab
10879 binfmt-support
10880 browser-plugin-gnash
10881 cheese-common
10882 cli-common
10883 cups-pk-helper
10884 dmz-cursor-theme
10885 empathy
10886 empathy-common
10887 freedesktop-sound-theme
10888 freeglut3
10889 gconf-defaults-service
10890 gdm-themes
10891 gedit-plugins
10892 geoclue
10893 geoclue-hostip
10894 geoclue-localnet
10895 geoclue-manual
10896 geoclue-yahoo
10897 gnash
10898 gnash-common
10899 gnome
10900 gnome-backgrounds
10901 gnome-cards-data
10902 gnome-codec-install
10903 gnome-core
10904 gnome-desktop-environment
10905 gnome-disk-utility
10906 gnome-screenshot
10907 gnome-search-tool
10908 gnome-session-canberra
10909 gnome-system-log
10910 gnome-themes-extras
10911 gnome-themes-more
10912 gnome-user-share
10913 gstreamer0.10-fluendo-mp3
10914 gstreamer0.10-tools
10915 gtk2-engines
10916 gtk2-engines-pixbuf
10917 gtk2-engines-smooth
10918 hamster-applet
10919 libapache2-mod-dnssd
10920 libapr1
10921 libaprutil1
10922 libaprutil1-dbd-sqlite3
10923 libaprutil1-ldap
10924 libart2.0-cil
10925 libboost-date-time1.42.0
10926 libboost-python1.42.0
10927 libboost-thread1.42.0
10928 libchamplain-0.4-0
10929 libchamplain-gtk-0.4-0
10930 libcheese-gtk18
10931 libclutter-gtk-0.10-0
10932 libcryptui0
10933 libdiscid0
10934 libelf1
10935 libepc-1.0-2
10936 libepc-common
10937 libepc-ui-1.0-2
10938 libfreerdp-plugins-standard
10939 libfreerdp0
10940 libgconf2.0-cil
10941 libgdata-common
10942 libgdata7
10943 libgdu-gtk0
10944 libgee2
10945 libgeoclue0
10946 libgexiv2-0
10947 libgif4
10948 libglade2.0-cil
10949 libglib2.0-cil
10950 libgmime2.4-cil
10951 libgnome-vfs2.0-cil
10952 libgnome2.24-cil
10953 libgnomepanel2.24-cil
10954 libgpod-common
10955 libgpod4
10956 libgtk2.0-cil
10957 libgtkglext1
10958 libgtksourceview2.0-common
10959 libmono-addins-gui0.2-cil
10960 libmono-addins0.2-cil
10961 libmono-cairo2.0-cil
10962 libmono-corlib2.0-cil
10963 libmono-i18n-west2.0-cil
10964 libmono-posix2.0-cil
10965 libmono-security2.0-cil
10966 libmono-sharpzip2.84-cil
10967 libmono-system2.0-cil
10968 libmtp8
10969 libmusicbrainz3-6
10970 libndesk-dbus-glib1.0-cil
10971 libndesk-dbus1.0-cil
10972 libopal3.6.8
10973 libpolkit-gtk-1-0
10974 libpt2.6.7
10975 libpython2.6
10976 librpm1
10977 librpmio1
10978 libsdl1.2debian
10979 libsrtp0
10980 libssh-4
10981 libtelepathy-farsight0
10982 libtelepathy-glib0
10983 libtidy-0.99-0
10984 media-player-info
10985 mesa-utils
10986 mono-2.0-gac
10987 mono-gac
10988 mono-runtime
10989 nautilus-sendto
10990 nautilus-sendto-empathy
10991 p7zip-full
10992 pkg-config
10993 python-aptdaemon
10994 python-aptdaemon-gtk
10995 python-axiom
10996 python-beautifulsoup
10997 python-bugbuddy
10998 python-clientform
10999 python-coherence
11000 python-configobj
11001 python-crypto
11002 python-cupshelpers
11003 python-elementtree
11004 python-epsilon
11005 python-evolution
11006 python-feedparser
11007 python-gdata
11008 python-gdbm
11009 python-gst0.10
11010 python-gtkglext1
11011 python-gtksourceview2
11012 python-httplib2
11013 python-louie
11014 python-mako
11015 python-markupsafe
11016 python-mechanize
11017 python-nevow
11018 python-notify
11019 python-opengl
11020 python-openssl
11021 python-pam
11022 python-pkg-resources
11023 python-pyasn1
11024 python-pysqlite2
11025 python-rdflib
11026 python-serial
11027 python-tagpy
11028 python-twisted-bin
11029 python-twisted-conch
11030 python-twisted-core
11031 python-twisted-web
11032 python-utidylib
11033 python-webkit
11034 python-xdg
11035 python-zope.interface
11036 remmina
11037 remmina-plugin-data
11038 remmina-plugin-rdp
11039 remmina-plugin-vnc
11040 rhythmbox-plugin-cdrecorder
11041 rhythmbox-plugins
11042 rpm-common
11043 rpm2cpio
11044 seahorse-plugins
11045 shotwell
11046 software-center
11047 system-config-printer-udev
11048 telepathy-gabble
11049 telepathy-mission-control-5
11050 telepathy-salut
11051 tomboy
11052 totem
11053 totem-coherence
11054 totem-mozilla
11055 totem-plugins
11056 transmission-common
11057 xdg-user-dirs
11058 xdg-user-dirs-gtk
11059 xserver-xephyr
11060 </p></blockquote>
11061
11062 <p>Installed using apt-get, removed with aptitude</p>
11063
11064 <blockquote><p>
11065 cheese
11066 ekiga
11067 eog
11068 epiphany-extensions
11069 evolution-exchange
11070 fast-user-switch-applet
11071 file-roller
11072 gcalctool
11073 gconf-editor
11074 gdm
11075 gedit
11076 gedit-common
11077 gnome-games
11078 gnome-games-data
11079 gnome-nettool
11080 gnome-system-tools
11081 gnome-themes
11082 gnuchess
11083 gucharmap
11084 guile-1.8-libs
11085 libavahi-ui0
11086 libdmx1
11087 libgalago3
11088 libgtk-vnc-1.0-0
11089 libgtksourceview2.0-0
11090 liblircclient0
11091 libsdl1.2debian-alsa
11092 libspeexdsp1
11093 libsvga1
11094 rhythmbox
11095 seahorse
11096 sound-juicer
11097 system-config-printer
11098 totem-common
11099 transmission-gtk
11100 vinagre
11101 vino
11102 </p></blockquote>
11103
11104 <p>Installed using aptitude, missing with apt-get</p>
11105
11106 <blockquote><p>
11107 gstreamer0.10-gnomevfs
11108 </p></blockquote>
11109
11110 <p>Installed using aptitude, removed with apt-get</p>
11111
11112 <blockquote><p>
11113 [nothing]
11114 </p></blockquote>
11115
11116 <p>This is for KDE:</p>
11117
11118 <p>Installed using apt-get, missing with aptitude</p>
11119
11120 <blockquote><p>
11121 ksmserver
11122 </p></blockquote>
11123
11124 <p>Installed using apt-get, removed with aptitude</p>
11125
11126 <blockquote><p>
11127 kwin
11128 network-manager-kde
11129 </p></blockquote>
11130
11131 <p>Installed using aptitude, missing with apt-get</p>
11132
11133 <blockquote><p>
11134 arts
11135 dolphin
11136 freespacenotifier
11137 google-gadgets-gst
11138 google-gadgets-xul
11139 kappfinder
11140 kcalc
11141 kcharselect
11142 kde-core
11143 kde-plasma-desktop
11144 kde-standard
11145 kde-window-manager
11146 kdeartwork
11147 kdeartwork-emoticons
11148 kdeartwork-style
11149 kdeartwork-theme-icon
11150 kdebase
11151 kdebase-apps
11152 kdebase-workspace
11153 kdebase-workspace-bin
11154 kdebase-workspace-data
11155 kdeeject
11156 kdelibs
11157 kdeplasma-addons
11158 kdeutils
11159 kdewallpapers
11160 kdf
11161 kfloppy
11162 kgpg
11163 khelpcenter4
11164 kinfocenter
11165 konq-plugins-l10n
11166 konqueror-nsplugins
11167 kscreensaver
11168 kscreensaver-xsavers
11169 ktimer
11170 kwrite
11171 libgle3
11172 libkde4-ruby1.8
11173 libkonq5
11174 libkonq5-templates
11175 libnetpbm10
11176 libplasma-ruby
11177 libplasma-ruby1.8
11178 libqt4-ruby1.8
11179 marble-data
11180 marble-plugins
11181 netpbm
11182 nuvola-icon-theme
11183 plasma-dataengines-workspace
11184 plasma-desktop
11185 plasma-desktopthemes-artwork
11186 plasma-runners-addons
11187 plasma-scriptengine-googlegadgets
11188 plasma-scriptengine-python
11189 plasma-scriptengine-qedje
11190 plasma-scriptengine-ruby
11191 plasma-scriptengine-webkit
11192 plasma-scriptengines
11193 plasma-wallpapers-addons
11194 plasma-widget-folderview
11195 plasma-widget-networkmanagement
11196 ruby
11197 sweeper
11198 update-notifier-kde
11199 xscreensaver-data-extra
11200 xscreensaver-gl
11201 xscreensaver-gl-extra
11202 xscreensaver-screensaver-bsod
11203 </p></blockquote>
11204
11205 <p>Installed using aptitude, removed with apt-get</p>
11206
11207 <blockquote><p>
11208 ark
11209 google-gadgets-common
11210 google-gadgets-qt
11211 htdig
11212 kate
11213 kdebase-bin
11214 kdebase-data
11215 kdepasswd
11216 kfind
11217 klipper
11218 konq-plugins
11219 konqueror
11220 ksysguard
11221 ksysguardd
11222 libarchive1
11223 libcln6
11224 libeet1
11225 libeina-svn-06
11226 libggadget-1.0-0b
11227 libggadget-qt-1.0-0b
11228 libgps19
11229 libkdecorations4
11230 libkephal4
11231 libkonq4
11232 libkonqsidebarplugin4a
11233 libkscreensaver5
11234 libksgrd4
11235 libksignalplotter4
11236 libkunitconversion4
11237 libkwineffects1a
11238 libmarblewidget4
11239 libntrack-qt4-1
11240 libntrack0
11241 libplasma-geolocation-interface4
11242 libplasmaclock4a
11243 libplasmagenericshell4
11244 libprocesscore4a
11245 libprocessui4a
11246 libqalculate5
11247 libqedje0a
11248 libqtruby4shared2
11249 libqzion0a
11250 libruby1.8
11251 libscim8c2a
11252 libsmokekdecore4-3
11253 libsmokekdeui4-3
11254 libsmokekfile3
11255 libsmokekhtml3
11256 libsmokekio3
11257 libsmokeknewstuff2-3
11258 libsmokeknewstuff3-3
11259 libsmokekparts3
11260 libsmokektexteditor3
11261 libsmokekutils3
11262 libsmokenepomuk3
11263 libsmokephonon3
11264 libsmokeplasma3
11265 libsmokeqtcore4-3
11266 libsmokeqtdbus4-3
11267 libsmokeqtgui4-3
11268 libsmokeqtnetwork4-3
11269 libsmokeqtopengl4-3
11270 libsmokeqtscript4-3
11271 libsmokeqtsql4-3
11272 libsmokeqtsvg4-3
11273 libsmokeqttest4-3
11274 libsmokeqtuitools4-3
11275 libsmokeqtwebkit4-3
11276 libsmokeqtxml4-3
11277 libsmokesolid3
11278 libsmokesoprano3
11279 libtaskmanager4a
11280 libtidy-0.99-0
11281 libweather-ion4a
11282 libxklavier16
11283 libxxf86misc1
11284 okteta
11285 oxygencursors
11286 plasma-dataengines-addons
11287 plasma-scriptengine-superkaramba
11288 plasma-widget-lancelot
11289 plasma-widgets-addons
11290 plasma-widgets-workspace
11291 polkit-kde-1
11292 ruby1.8
11293 systemsettings
11294 update-notifier-common
11295 </p></blockquote>
11296
11297 <p>Running apt-get autoremove made the results using apt-get and
11298 aptitude a bit more similar, but there are still quite a lott of
11299 differences. I have no idea what packages should be installed after
11300 the upgrade, but hope those that do can have a look.</p>
11301
11302 </div>
11303 <div class="tags">
11304
11305
11306 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
11307
11308
11309 </div>
11310 </div>
11311 <div class="padding"></div>
11312
11313 <div class="entry">
11314 <div class="title">
11315 <a href="http://people.skolelinux.org/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>
11316 </div>
11317 <div class="date">
11318 22nd November 2010
11319 </div>
11320 <div class="body">
11321 <p>Most of the computers in use by the
11322 <a href="http://www.skolelinux.org/">Debian Edu/Skolelinux project</a>
11323 are virtual machines. And they have been Xen machines running on a
11324 fairly old IBM eserver xseries 345 machine, and we wanted to migrate
11325 them to KVM on a newer Dell PowerEdge 2950 host machine. This was a
11326 bit harder that it could have been, because we set up the Xen virtual
11327 machines to get the virtual partitions from LVM, which as far as I
11328 know is not supported by KVM. So to migrate, we had to convert
11329 several LVM logical volumes to partitions on a virtual disk file.</p>
11330
11331 <p>I found
11332 <a href="http://searchnetworking.techtarget.com.au/articles/35011-Six-steps-for-migrating-Xen-virtual-machines-to-KVM">a
11333 nice recipe</a> to do this, and wrote the following script to do the
11334 migration. It uses qemu-img from the qemu package to make the disk
11335 image, parted to partition it, losetup and kpartx to present the disk
11336 image partions as devices, and dd to copy the data. I NFS mounted the
11337 new servers storage area on the old server to do the migration.</p>
11338
11339 <pre>
11340 #!/bin/sh
11341
11342 # Based on
11343 # http://searchnetworking.techtarget.com.au/articles/35011-Six-steps-for-migrating-Xen-virtual-machines-to-KVM
11344
11345 set -e
11346 set -x
11347
11348 if [ -z "$1" ] ; then
11349 echo "Usage: $0 &lt;hostname&gt;"
11350 exit 1
11351 else
11352 host="$1"
11353 fi
11354
11355 if [ ! -e /dev/vg_data/$host-disk ] ; then
11356 echo "error: unable to find LVM volume for $host"
11357 exit 1
11358 fi
11359
11360 # Partitions need to be a bit bigger than the LVM LVs. not sure why.
11361 disksize=$( lvs --units m | grep $host-disk | awk '{sum = sum + $4} END { print int(sum * 1.05) }')
11362 swapsize=$( lvs --units m | grep $host-swap | awk '{sum = sum + $4} END { print int(sum * 1.05) }')
11363 totalsize=$(( ( $disksize + $swapsize ) ))
11364
11365 img=$host.img
11366 #dd if=/dev/zero of=$img bs=1M count=$(( $disksize + $swapsize ))
11367 qemu-img create $img ${totalsize}MMaking room on the Debian Edu/Sqeeze DVD
11368
11369 parted $img mklabel msdos
11370 parted $img mkpart primary linux-swap 0 $disksize
11371 parted $img mkpart primary ext2 $disksize $totalsize
11372 parted $img set 1 boot on
11373
11374 modprobe dm-mod
11375 losetup /dev/loop0 $img
11376 kpartx -a /dev/loop0
11377
11378 dd if=/dev/vg_data/$host-disk of=/dev/mapper/loop0p1 bs=1M
11379 fsck.ext3 -f /dev/mapper/loop0p1 || true
11380 mkswap /dev/mapper/loop0p2
11381
11382 kpartx -d /dev/loop0
11383 losetup -d /dev/loop0
11384 </pre>
11385
11386 <p>The script is perhaps so simple that it is not copyrightable, but
11387 if it is, it is licenced using GPL v2 or later at your discretion.</p>
11388
11389 <p>After doing this, I booted a Debian CD in rescue mode in KVM with
11390 the new disk image attached, installed grub-pc and linux-image-686 and
11391 set up grub to boot from the disk image. After this, the KVM machines
11392 seem to work just fine.</p>
11393
11394 </div>
11395 <div class="tags">
11396
11397
11398 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
11399
11400
11401 </div>
11402 </div>
11403 <div class="padding"></div>
11404
11405 <div class="entry">
11406 <div class="title">
11407 <a href="http://people.skolelinux.org/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>
11408 </div>
11409 <div class="date">
11410 20th November 2010
11411 </div>
11412 <div class="body">
11413 <p>I'm still running upgrade testing of the
11414 <a href="http://people.skolelinux.org/~pere/debian-upgrade-testing/">Lenny
11415 Gnome and KDE Desktop</a>, but have not had time to spend on reporting the
11416 status. Here is a short update based on a test I ran 20101118.</p>
11417
11418 <p>I still do not know what a correct migration should look like, so I
11419 report any differences between apt and aptitude and hope someone else
11420 can see if anything should be changed.</p>
11421
11422 <p>This is for Gnome:</p>
11423
11424 <p>Installed using apt-get, missing with aptitude</p>
11425
11426 <blockquote><p>
11427 apache2.2-bin aptdaemon at-spi baobab binfmt-support
11428 browser-plugin-gnash cheese-common cli-common cpp-4.3 cups-pk-helper
11429 dmz-cursor-theme empathy empathy-common finger
11430 freedesktop-sound-theme freeglut3 gconf-defaults-service gdm-themes
11431 gedit-plugins geoclue geoclue-hostip geoclue-localnet geoclue-manual
11432 geoclue-yahoo gnash gnash-common gnome gnome-backgrounds
11433 gnome-cards-data gnome-codec-install gnome-core
11434 gnome-desktop-environment gnome-disk-utility gnome-screenshot
11435 gnome-search-tool gnome-session-canberra gnome-spell
11436 gnome-system-log gnome-themes-extras gnome-themes-more
11437 gnome-user-share gs-common gstreamer0.10-fluendo-mp3
11438 gstreamer0.10-tools gtk2-engines gtk2-engines-pixbuf
11439 gtk2-engines-smooth hal-info hamster-applet libapache2-mod-dnssd
11440 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap
11441 libart2.0-cil libatspi1.0-0 libboost-date-time1.42.0
11442 libboost-python1.42.0 libboost-thread1.42.0 libchamplain-0.4-0
11443 libchamplain-gtk-0.4-0 libcheese-gtk18 libclutter-gtk-0.10-0
11444 libcryptui0 libcupsys2 libdiscid0 libeel2-data libelf1 libepc-1.0-2
11445 libepc-common libepc-ui-1.0-2 libfreerdp-plugins-standard
11446 libfreerdp0 libgail-common libgconf2.0-cil libgdata-common libgdata7
11447 libgdl-1-common libgdu-gtk0 libgee2 libgeoclue0 libgexiv2-0 libgif4
11448 libglade2.0-cil libglib2.0-cil libgmime2.4-cil libgnome-vfs2.0-cil
11449 libgnome2.24-cil libgnomepanel2.24-cil libgnomeprint2.2-data
11450 libgnomeprintui2.2-common libgnomevfs2-bin libgpod-common libgpod4
11451 libgtk2.0-cil libgtkglext1 libgtksourceview-common
11452 libgtksourceview2.0-common libmono-addins-gui0.2-cil
11453 libmono-addins0.2-cil libmono-cairo2.0-cil libmono-corlib2.0-cil
11454 libmono-i18n-west2.0-cil libmono-posix2.0-cil
11455 libmono-security2.0-cil libmono-sharpzip2.84-cil
11456 libmono-system2.0-cil libmtp8 libmusicbrainz3-6
11457 libndesk-dbus-glib1.0-cil libndesk-dbus1.0-cil libopal3.6.8
11458 libpolkit-gtk-1-0 libpt-1.10.10-plugins-alsa
11459 libpt-1.10.10-plugins-v4l libpt2.6.7 libpython2.6 librpm1 librpmio1
11460 libsdl1.2debian libservlet2.4-java libsrtp0 libssh-4
11461 libtelepathy-farsight0 libtelepathy-glib0 libtidy-0.99-0
11462 libxalan2-java libxerces2-java media-player-info mesa-utils
11463 mono-2.0-gac mono-gac mono-runtime nautilus-sendto
11464 nautilus-sendto-empathy openoffice.org-writer2latex
11465 openssl-blacklist p7zip p7zip-full pkg-config python-4suite-xml
11466 python-aptdaemon python-aptdaemon-gtk python-axiom
11467 python-beautifulsoup python-bugbuddy python-clientform
11468 python-coherence python-configobj python-crypto python-cupshelpers
11469 python-cupsutils python-eggtrayicon python-elementtree
11470 python-epsilon python-evolution python-feedparser python-gdata
11471 python-gdbm python-gst0.10 python-gtkglext1 python-gtkmozembed
11472 python-gtksourceview2 python-httplib2 python-louie python-mako
11473 python-markupsafe python-mechanize python-nevow python-notify
11474 python-opengl python-openssl python-pam python-pkg-resources
11475 python-pyasn1 python-pysqlite2 python-rdflib python-serial
11476 python-tagpy python-twisted-bin python-twisted-conch
11477 python-twisted-core python-twisted-web python-utidylib python-webkit
11478 python-xdg python-zope.interface remmina remmina-plugin-data
11479 remmina-plugin-rdp remmina-plugin-vnc rhythmbox-plugin-cdrecorder
11480 rhythmbox-plugins rpm-common rpm2cpio seahorse-plugins shotwell
11481 software-center svgalibg1 system-config-printer-udev
11482 telepathy-gabble telepathy-mission-control-5 telepathy-salut tomboy
11483 totem totem-coherence totem-mozilla totem-plugins
11484 transmission-common xdg-user-dirs xdg-user-dirs-gtk xserver-xephyr
11485 zip
11486 </p></blockquote>
11487
11488 Installed using apt-get, removed with aptitude
11489
11490 <blockquote><p>
11491 arj bluez-utils cheese dhcdbd djvulibre-desktop ekiga eog
11492 epiphany-extensions epiphany-gecko evolution-exchange
11493 fast-user-switch-applet file-roller gcalctool gconf-editor gdm gedit
11494 gedit-common gnome-app-install gnome-games gnome-games-data
11495 gnome-nettool gnome-system-tools gnome-themes gnome-utils
11496 gnome-vfs-obexftp gnome-volume-manager gnuchess gucharmap
11497 guile-1.8-libs hal libavahi-compat-libdnssd1 libavahi-core5
11498 libavahi-ui0 libbind9-50 libbluetooth2 libcamel1.2-11 libcdio7
11499 libcucul0 libcurl3 libdirectfb-1.0-0 libdmx1 libdvdread3
11500 libedata-cal1.2-6 libedataserver1.2-9 libeel2-2.20 libepc-1.0-1
11501 libepc-ui-1.0-1 libexchange-storage1.2-3 libfaad0 libgadu3
11502 libgalago3 libgd2-noxpm libgda3-3 libgda3-common libggz2 libggzcore9
11503 libggzmod4 libgksu1.2-0 libgksuui1.0-1 libgmyth0 libgnome-desktop-2
11504 libgnome-pilot2 libgnomecups1.0-1 libgnomeprint2.2-0
11505 libgnomeprintui2.2-0 libgpod3 libgraphviz4 libgtk-vnc-1.0-0
11506 libgtkhtml2-0 libgtksourceview1.0-0 libgtksourceview2.0-0
11507 libgucharmap6 libhesiod0 libicu38 libisccc50 libisccfg50 libiw29
11508 libjaxp1.3-java-gcj libkpathsea4 liblircclient0 libltdl3 liblwres50
11509 libmagick++10 libmagick10 libmalaga7 libmozjs1d libmpfr1ldbl libmtp7
11510 libmysqlclient15off libnautilus-burn4 libneon27 libnm-glib0
11511 libnm-util0 libopal-2.2 libosp5 libparted1.8-10 libpisock9
11512 libpisync1 libpoppler-glib3 libpoppler3 libpt-1.10.10 libraw1394-8
11513 libsdl1.2debian-alsa libsensors3 libsexy2 libsmbios2 libsoup2.2-8
11514 libspeexdsp1 libssh2-1 libsuitesparse-3.1.0 libsvga1
11515 libswfdec-0.6-90 libtalloc1 libtotem-plparser10 libtrackerclient0
11516 libvoikko1 libxalan2-java-gcj libxerces2-java-gcj libxklavier12
11517 libxtrap6 libxxf86misc1 libzephyr3 mysql-common rhythmbox seahorse
11518 sound-juicer swfdec-gnome system-config-printer totem-common
11519 totem-gstreamer transmission-gtk vinagre vino w3c-dtd-xhtml wodim
11520 </p></blockquote>
11521
11522 <p>Installed using aptitude, missing with apt-get</p>
11523
11524 <blockquote><p>
11525 gstreamer0.10-gnomevfs
11526 </p></blockquote>
11527
11528 <p>Installed using aptitude, removed with apt-get</p>
11529
11530 <blockquote><p>
11531 [nothing]
11532 </p></blockquote>
11533
11534 <p>This is for KDE:</p>
11535
11536 <p>Installed using apt-get, missing with aptitude</p>
11537
11538 <blockquote><p>
11539 autopoint bomber bovo cantor cantor-backend-kalgebra cpp-4.3 dcoprss
11540 edict espeak espeak-data eyesapplet fifteenapplet finger gettext
11541 ghostscript-x git gnome-audio gnugo granatier gs-common
11542 gstreamer0.10-pulseaudio indi kaddressbook-plugins kalgebra
11543 kalzium-data kanjidic kapman kate-plugins kblocks kbreakout kbstate
11544 kde-icons-mono kdeaccessibility kdeaddons-kfile-plugins
11545 kdeadmin-kfile-plugins kdeartwork-misc kdeartwork-theme-window
11546 kdeedu kdeedu-data kdeedu-kvtml-data kdegames kdegames-card-data
11547 kdegames-mahjongg-data kdegraphics-kfile-plugins kdelirc
11548 kdemultimedia-kfile-plugins kdenetwork-kfile-plugins
11549 kdepim-kfile-plugins kdepim-kio-plugins kdessh kdetoys kdewebdev
11550 kdiamond kdnssd kfilereplace kfourinline kgeography-data kigo
11551 killbots kiriki klettres-data kmoon kmrml knewsticker-scripts
11552 kollision kpf krosspython ksirk ksmserver ksquares kstars-data
11553 ksudoku kubrick kweather libasound2-plugins libboost-python1.42.0
11554 libcfitsio3 libconvert-binhex-perl libcrypt-ssleay-perl libdb4.6++
11555 libdjvulibre-text libdotconf1.0 liberror-perl libespeak1
11556 libfinance-quote-perl libgail-common libgsl0ldbl libhtml-parser-perl
11557 libhtml-tableextract-perl libhtml-tagset-perl libhtml-tree-perl
11558 libio-stringy-perl libkdeedu4 libkdegames5 libkiten4 libkpathsea5
11559 libkrossui4 libmailtools-perl libmime-tools-perl
11560 libnews-nntpclient-perl libopenbabel3 libportaudio2 libpulse-browse0
11561 libservlet2.4-java libspeechd2 libtiff-tools libtimedate-perl
11562 libunistring0 liburi-perl libwww-perl libxalan2-java libxerces2-java
11563 lirc luatex marble networkstatus noatun-plugins
11564 openoffice.org-writer2latex palapeli palapeli-data parley
11565 parley-data poster psutils pulseaudio pulseaudio-esound-compat
11566 pulseaudio-module-x11 pulseaudio-utils quanta-data rocs rsync
11567 speech-dispatcher step svgalibg1 texlive-binaries texlive-luatex
11568 ttf-sazanami-gothic
11569 </p></blockquote>
11570
11571 <p>Installed using apt-get, removed with aptitude</p>
11572
11573 <blockquote><p>
11574 amor artsbuilder atlantik atlantikdesigner blinken bluez-utils cvs
11575 dhcdbd djvulibre-desktop imlib-base imlib11 kalzium kanagram kandy
11576 kasteroids katomic kbackgammon kbattleship kblackbox kbounce kbruch
11577 kcron kdat kdemultimedia-kappfinder-data kdeprint kdict kdvi kedit
11578 keduca kenolaba kfax kfaxview kfouleggs kgeography kghostview
11579 kgoldrunner khangman khexedit kiconedit kig kimagemapeditor
11580 kitchensync kiten kjumpingcube klatin klettres klickety klines
11581 klinkstatus kmag kmahjongg kmailcvt kmenuedit kmid kmilo kmines
11582 kmousetool kmouth kmplot knetwalk kodo kolf kommander konquest kooka
11583 kpager kpat kpdf kpercentage kpilot kpoker kpovmodeler krec
11584 kregexpeditor kreversi ksame ksayit kshisen ksig ksim ksirc ksirtet
11585 ksmiletris ksnake ksokoban kspaceduel kstars ksvg ksysv kteatime
11586 ktip ktnef ktouch ktron kttsd ktuberling kturtle ktux kuickshow
11587 kverbos kview kviewshell kvoctrain kwifimanager kwin kwin4 kwordquiz
11588 kworldclock kxsldbg libakode2 libarts1-akode libarts1-audiofile
11589 libarts1-mpeglib libarts1-xine libavahi-compat-libdnssd1
11590 libavahi-core5 libavc1394-0 libbind9-50 libbluetooth2
11591 libboost-python1.34.1 libcucul0 libcurl3 libcvsservice0
11592 libdirectfb-1.0-0 libdjvulibre21 libdvdread3 libfaad0 libfreebob0
11593 libgd2-noxpm libgraphviz4 libgsmme1c2a libgtkhtml2-0 libicu38
11594 libiec61883-0 libindex0 libisccc50 libisccfg50 libiw29
11595 libjaxp1.3-java-gcj libk3b3 libkcal2b libkcddb1 libkdeedu3
11596 libkdegames1 libkdepim1a libkgantt0 libkleopatra1 libkmime2
11597 libkpathsea4 libkpimexchange1 libkpimidentities1 libkscan1
11598 libksieve0 libktnef1 liblockdev1 libltdl3 liblwres50 libmagick10
11599 libmimelib1c2a libmodplug0c2 libmozjs1d libmpcdec3 libmpfr1ldbl
11600 libneon27 libnm-util0 libopensync0 libpisock9 libpoppler-glib3
11601 libpoppler-qt2 libpoppler3 libraw1394-8 librss1 libsensors3
11602 libsmbios2 libssh2-1 libsuitesparse-3.1.0 libswfdec-0.6-90
11603 libtalloc1 libxalan2-java-gcj libxerces2-java-gcj libxtrap6 lskat
11604 mpeglib network-manager-kde noatun pmount tex-common texlive-base
11605 texlive-common texlive-doc-base texlive-fonts-recommended tidy
11606 ttf-dustin ttf-kochi-gothic ttf-sjfonts
11607 </p></blockquote>
11608
11609 <p>Installed using aptitude, missing with apt-get</p>
11610
11611 <blockquote><p>
11612 dolphin kde-core kde-plasma-desktop kde-standard kde-window-manager
11613 kdeartwork kdebase kdebase-apps kdebase-workspace
11614 kdebase-workspace-bin kdebase-workspace-data kdeutils kscreensaver
11615 kscreensaver-xsavers libgle3 libkonq5 libkonq5-templates libnetpbm10
11616 netpbm plasma-widget-folderview plasma-widget-networkmanagement
11617 xscreensaver-data-extra xscreensaver-gl xscreensaver-gl-extra
11618 xscreensaver-screensaver-bsod
11619 </p></blockquote>
11620
11621 <p>Installed using aptitude, removed with apt-get</p>
11622
11623 <blockquote><p>
11624 kdebase-bin konq-plugins konqueror
11625 </p></blockquote>
11626
11627 </div>
11628 <div class="tags">
11629
11630
11631 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
11632
11633
11634 </div>
11635 </div>
11636 <div class="padding"></div>
11637
11638 <div class="entry">
11639 <div class="title">
11640 <a href="http://people.skolelinux.org/pere/blog/Gnash_buildbot_slave_and_Debian_kfreebsd.html">Gnash buildbot slave and Debian kfreebsd</a>
11641 </div>
11642 <div class="date">
11643 20th November 2010
11644 </div>
11645 <div class="body">
11646 <p>Answering
11647 <a href="http://www.listware.net/201011/gnash-dev/67431-gnash-dev-buildbot-looking-for-slaves.html">the
11648 call from the Gnash project</a> for
11649 <a href="http://www.gnashdev.org:8010">buildbot</a> slaves to test the
11650 current source, I have set up a virtual KVM machine on the Debian
11651 Edu/Skolelinux virtualization host to test the git source on
11652 Debian/Squeeze. I hope this can help the developers in getting new
11653 releases out more often.</p>
11654
11655 <p>As the developers want less main-stream build platforms tested to,
11656 I have considered setting up a <a
11657 href="http://www.debian.org/ports/kfreebsd-gnu/">Debian/kfreebsd</a>
11658 machine as well. I have also considered using the kfreebsd
11659 architecture in Debian as a file server in NUUG to get access to the 5
11660 TB zfs volume we currently use to store DV video. Because of this, I
11661 finally got around to do a test installation of Debian/Squeeze with
11662 kfreebsd. Installation went fairly smooth, thought I noticed some
11663 visual glitches in the cdebconf dialogs (black cursor left on the
11664 screen at random locations). Have not gotten very far with the
11665 testing. Noticed cfdisk did not work, but fdisk did so it was not a
11666 fatal problem. Have to spend some more time on it to see if it is
11667 useful as a file server for NUUG. Will try to find time to set up a
11668 gnash buildbot slave on the Debian Edu/Skolelinux this weekend.</p>
11669
11670 </div>
11671 <div class="tags">
11672
11673
11674 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
11675
11676
11677 </div>
11678 </div>
11679 <div class="padding"></div>
11680
11681 <div class="entry">
11682 <div class="title">
11683 <a href="http://people.skolelinux.org/pere/blog/Debian_in_3D.html">Debian in 3D</a>
11684 </div>
11685 <div class="date">
11686 9th November 2010
11687 </div>
11688 <div class="body">
11689 <p><img src="http://thingiverse-production.s3.amazonaws.com/renders/23/e0/c4/f9/2b/debswagtdose_preview_medium.jpg"></p>
11690
11691 <p>3D printing is just great. I just came across this Debian logo in
11692 3D linked in from
11693 <a href="http://blog.thingiverse.com/2010/11/09/participatory-branding/">the
11694 thingiverse blog</a>.</p>
11695
11696 </div>
11697 <div class="tags">
11698
11699
11700 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
11701
11702
11703 </div>
11704 </div>
11705 <div class="padding"></div>
11706
11707 <div class="entry">
11708 <div class="title">
11709 <a href="http://people.skolelinux.org/pere/blog/Software_updates_2010_10_24.html">Software updates 2010-10-24</a>
11710 </div>
11711 <div class="date">
11712 24th October 2010
11713 </div>
11714 <div class="body">
11715 <p>Some updates.</p>
11716
11717 <p>My <a href="http://pledgebank.com/gnash-avm2">gnash pledge</a> to
11718 raise money for the project is going well. The lower limit of 10
11719 signers was reached in 24 hours, and so far 13 people have signed it.
11720 More signers and more funding is most welcome, and I am really curious
11721 how far we can get before the time limit of December 24 is reached.
11722 :)</p>
11723
11724 <p>On the #gnash IRC channel on irc.freenode.net, I was just tipped
11725 about what appear to be a great code coverage tool capable of
11726 generating code coverage stats without any changes to the source code.
11727 It is called
11728 <a href="http://simonkagstrom.github.com/kcov/index.html">kcov</a>,
11729 and can be used using <tt>kcov &lt;directory&gt; &lt;binary&gt;</tt>.
11730 It is missing in Debian, but the git source built just fine in Squeeze
11731 after I installed libelf-dev, libdwarf-dev, pkg-config and
11732 libglib2.0-dev. Failed to build in Lenny, but suspect that is
11733 solvable. I hope kcov make it into Debian soon.</p>
11734
11735 <p>Finally found time to wrap up the release notes for <a
11736 href="http://lists.debian.org/debian-edu-announce/2010/10/msg00002.html">a
11737 new alpha release of Debian Edu</a>, and just published the second
11738 alpha test release of the Squeeze based Debian Edu /
11739 <a href="http://www.skolelinux.org/">Skolelinux</a>
11740 release. Give it a try if you need a complete linux solution for your
11741 school, including central infrastructure server, workstations, thin
11742 client servers and diskless workstations. A nice touch added
11743 yesterday is RDP support on the thin client servers, for windows
11744 clients to get a Linux desktop on request.</p>
11745
11746 </div>
11747 <div class="tags">
11748
11749
11750 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>.
11751
11752
11753 </div>
11754 </div>
11755 <div class="padding"></div>
11756
11757 <div class="entry">
11758 <div class="title">
11759 <a href="http://people.skolelinux.org/pere/blog/Some_notes_on_Flash_in_Debian_and_Debian_Edu.html">Some notes on Flash in Debian and Debian Edu</a>
11760 </div>
11761 <div class="date">
11762 4th September 2010
11763 </div>
11764 <div class="body">
11765 <p>In the <a href="http://popcon.debian.org/unknown/by_vote">Debian
11766 popularity-contest numbers</a>, the adobe-flashplugin package the
11767 second most popular used package that is missing in Debian. The sixth
11768 most popular is flashplayer-mozilla. This is a clear indication that
11769 working flash is important for Debian users. Around 10 percent of the
11770 users submitting data to popcon.debian.org have this package
11771 installed.</p>
11772
11773 <p>In the report written by Lars Risan in August 2008
11774<a href="http://wiki.skolelinux.no/Dokumentasjon/Rapporter?action=AttachFile&do=view&target=Skolelinux_i_bruk_rapport_1.0.pdf">Skolelinux
11775 i bruk – Rapport for Hurum kommune, Universitetet i Agder og
11776 stiftelsen SLX Debian Labs</a>»), one of the most important problems
11777 schools experienced with <a href="http://www.skolelinux.org/">Debian
11778 Edu/Skolelinux</a> was the lack of working Flash. A lot of educational
11779 web sites require Flash to work, and lacking working Flash support in
11780 the web browser and the problems with installing it was perceived as a
11781 good reason to stay with Windows.</p>
11782
11783 <p>I once saw a funny and sad comment in a web forum, where Linux was
11784 said to be the retarded cousin that did not really understand
11785 everything you told him but could work fairly well. This was a
11786 comment regarding the problems Linux have with proprietary formats and
11787 non-standard web pages, and is sad because it exposes a fairly common
11788 understanding of whose fault it is if web pages that only work in for
11789 example Internet Explorer 6 fail to work on Firefox, and funny because
11790 it explain very well how annoying it is for users when Linux
11791 distributions do not work with the documents they receive or the web
11792 pages they want to visit.</p>
11793
11794 <p>This is part of the reason why I believe it is important for Debian
11795 and Debian Edu to have a well working Flash implementation in the
11796 distribution, to get at least popular sites as Youtube and Google
11797 Video to working out of the box. For Squeeze, Debian have the chance
11798 to include the latest version of Gnash that will make this happen, as
11799 the new release 0.8.8 was published a few weeks ago and is resting in
11800 unstable. The new version work with more sites that version 0.8.7.
11801 The Gnash maintainers have asked for a freeze exception, but the
11802 release team have not had time to reply to it yet. I hope they agree
11803 with me that Flash is important for the Debian desktop users, and thus
11804 accept the new package into Squeeze.</p>
11805
11806 </div>
11807 <div class="tags">
11808
11809
11810 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="http://people.skolelinux.org/pere/blog/tags/video">video</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>.
11811
11812
11813 </div>
11814 </div>
11815 <div class="padding"></div>
11816
11817 <div class="entry">
11818 <div class="title">
11819 <a href="http://people.skolelinux.org/pere/blog/Circular_package_dependencies_harms_apt_recovery.html">Circular package dependencies harms apt recovery</a>
11820 </div>
11821 <div class="date">
11822 27th July 2010
11823 </div>
11824 <div class="body">
11825 <p>I discovered this while doing
11826 <a href="http://people.skolelinux.org/pere/blog/Automatic_upgrade_testing_from_Lenny_to_Squeeze.html">automated
11827 testing of upgrades from Debian Lenny to Squeeze</a>. A few packages
11828 in Debian still got circular dependencies, and it is often claimed
11829 that apt and aptitude should be able to handle this just fine, but
11830 some times these dependency loops causes apt to fail.</p>
11831
11832 <p>An example is from todays
11833 <a href="http://people.skolelinux.org/~pere/debian-upgrade-testing//test-20100727-lenny-squeeze-kde-aptitude.txt">upgrade
11834 of KDE using aptitude</a>. In it, a bug in kdebase-workspace-data
11835 causes perl-modules to fail to upgrade. The cause is simple. If a
11836 package fail to unpack, then only part of packages with the circular
11837 dependency might end up being unpacked when unpacking aborts, and the
11838 ones already unpacked will fail to configure in the recovery phase
11839 because its dependencies are unavailable.</p>
11840
11841 <p>In this log, the problem manifest itself with this error:</p>
11842
11843 <blockquote><pre>
11844 dpkg: dependency problems prevent configuration of perl-modules:
11845 perl-modules depends on perl (>= 5.10.1-1); however:
11846 Version of perl on system is 5.10.0-19lenny2.
11847 dpkg: error processing perl-modules (--configure):
11848 dependency problems - leaving unconfigured
11849 </pre></blockquote>
11850
11851 <p>The perl/perl-modules circular dependency is already
11852 <a href="http://bugs.debian.org/527917">reported as a bug</a>, and will
11853 hopefully be solved as soon as possible, but it is not the only one,
11854 and each one of these loops in the dependency tree can cause similar
11855 failures. Of course, they only occur when there are bugs in other
11856 packages causing the unpacking to fail, but it is rather nasty when
11857 the failure of one package causes the problem to become worse because
11858 of dependency loops.</p>
11859
11860 <p>Thanks to
11861 <a href="http://lists.debian.org/debian-devel/2010/06/msg00116.html">the
11862 tireless effort by Bill Allombert</a>, the number of circular
11863 dependencies
11864 <a href="http://debian.semistable.com/debgraph.out.html">left in Debian
11865 is dropping</a>, and perhaps it will reach zero one day. :)</p>
11866
11867 <p>Todays testing also exposed a bug in
11868 <a href="http://bugs.debian.org/590605">update-notifier</a> and
11869 <a href="http://bugs.debian.org/590604">different behaviour</a> between
11870 apt-get and aptitude, the latter possibly caused by some circular
11871 dependency. Reported both to BTS to try to get someone to look at
11872 it.</p>
11873
11874 </div>
11875 <div class="tags">
11876
11877
11878 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
11879
11880
11881 </div>
11882 </div>
11883 <div class="padding"></div>
11884
11885 <div class="entry">
11886 <div class="title">
11887 <a href="http://people.skolelinux.org/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>
11888 </div>
11889 <div class="date">
11890 17th July 2010
11891 </div>
11892 <div class="body">
11893 <p>This is a
11894 <a href="http://people.skolelinux.org/pere/blog/Time_for_new__LDAP_schemas_replacing_RFC_2307_.html">followup</a>
11895 on my
11896 <a href="http://people.skolelinux.org/pere/blog/Idea_for_a_change_to_LDAP_schemas_allowing_DNS_and_DHCP_info_to_be_combined_into_one_object.html">previous
11897 work</a> on
11898 <a href="http://people.skolelinux.org/pere/blog/Combining_PowerDNS_and_ISC_DHCP_LDAP_objects.html">merging
11899 all</a> the computer related LDAP objects in Debian Edu.</p>
11900
11901 <p>As a step to try to see if it possible to merge the DNS and DHCP
11902 LDAP objects, I have had a look at how the packages pdns-backend-ldap
11903 and dhcp3-server-ldap in Debian use the LDAP server. The two
11904 implementations are quite different in how they use LDAP.</p>
11905
11906 To get this information, I started slapd with debugging enabled and
11907 dumped the debug output to a file to get the LDAP searches performed
11908 on a Debian Edu main-server. Here is a summary.
11909
11910 <p><strong>powerdns</strong></p>
11911
11912 <a href="http://www.linuxnetworks.de/doc/index.php/PowerDNS_LDAP_Backend">Clues
11913 on how to</a> set up PowerDNS to use a LDAP backend is available on
11914 the web.
11915
11916 <p>PowerDNS have two modes of operation using LDAP as its backend.
11917 One "strict" mode where the forward and reverse DNS lookups are done
11918 using the same LDAP objects, and a "tree" mode where the forward and
11919 reverse entries are in two different subtrees in LDAP with a structure
11920 based on the DNS names, as in tjener.intern and
11921 2.2.0.10.in-addr.arpa.</p>
11922
11923 <p>In tree mode, the server is set up to use a LDAP subtree as its
11924 base, and uses a "base" scoped search for the DNS name by adding
11925 "dc=tjener,dc=intern," to the base with a filter for
11926 "(associateddomain=tjener.intern)" for the forward entry and
11927 "dc=2,dc=2,dc=0,dc=10,dc=in-addr,dc=arpa," with a filter for
11928 "(associateddomain=2.2.0.10.in-addr.arpa)" for the reverse entry. For
11929 forward entries, it is looking for attributes named dnsttl, arecord,
11930 nsrecord, cnamerecord, soarecord, ptrrecord, hinforecord, mxrecord,
11931 txtrecord, rprecord, afsdbrecord, keyrecord, aaaarecord, locrecord,
11932 srvrecord, naptrrecord, kxrecord, certrecord, dsrecord, sshfprecord,
11933 ipseckeyrecord, rrsigrecord, nsecrecord, dnskeyrecord, dhcidrecord,
11934 spfrecord and modifytimestamp. For reverse entries it is looking for
11935 the attributes dnsttl, arecord, nsrecord, cnamerecord, soarecord,
11936 ptrrecord, hinforecord, mxrecord, txtrecord, rprecord, aaaarecord,
11937 locrecord, srvrecord, naptrrecord and modifytimestamp. The equivalent
11938 ldapsearch commands could look like this:</p>
11939
11940 <blockquote><pre>
11941 ldapsearch -h ldap \
11942 -b dc=tjener,dc=intern,ou=hosts,dc=skole,dc=skolelinux,dc=no \
11943 -s base -x '(associateddomain=tjener.intern)' dNSTTL aRecord nSRecord \
11944 cNAMERecord sOARecord pTRRecord hInfoRecord mXRecord tXTRecord \
11945 rPRecord aFSDBRecord KeyRecord aAAARecord lOCRecord sRVRecord \
11946 nAPTRRecord kXRecord certRecord dSRecord sSHFPRecord iPSecKeyRecord \
11947 rRSIGRecord nSECRecord dNSKeyRecord dHCIDRecord sPFRecord modifyTimestamp
11948
11949 ldapsearch -h ldap \
11950 -b dc=2,dc=2,dc=0,dc=10,dc=in-addr,dc=arpa,ou=hosts,dc=skole,dc=skolelinux,dc=no \
11951 -s base -x '(associateddomain=2.2.0.10.in-addr.arpa)'
11952 dnsttl, arecord, nsrecord, cnamerecord soarecord ptrrecord \
11953 hinforecord mxrecord txtrecord rprecord aaaarecord locrecord \
11954 srvrecord naptrrecord modifytimestamp
11955 </pre></blockquote>
11956
11957 <p>In Debian Edu/Lenny, the PowerDNS tree mode is used with
11958 ou=hosts,dc=skole,dc=skolelinux,dc=no as the base, and these are two
11959 example LDAP objects used there. In addition to these objects, the
11960 parent objects all th way up to ou=hosts,dc=skole,dc=skolelinux,dc=no
11961 also exist.</p>
11962
11963 <blockquote><pre>
11964 dn: dc=tjener,dc=intern,ou=hosts,dc=skole,dc=skolelinux,dc=no
11965 objectclass: top
11966 objectclass: dnsdomain
11967 objectclass: domainrelatedobject
11968 dc: tjener
11969 arecord: 10.0.2.2
11970 associateddomain: tjener.intern
11971
11972 dn: dc=2,dc=2,dc=0,dc=10,dc=in-addr,dc=arpa,ou=hosts,dc=skole,dc=skolelinux,dc=no
11973 objectclass: top
11974 objectclass: dnsdomain2
11975 objectclass: domainrelatedobject
11976 dc: 2
11977 ptrrecord: tjener.intern
11978 associateddomain: 2.2.0.10.in-addr.arpa
11979 </pre></blockquote>
11980
11981 <p>In strict mode, the server behaves differently. When looking for
11982 forward DNS entries, it is doing a "subtree" scoped search with the
11983 same base as in the tree mode for a object with filter
11984 "(associateddomain=tjener.intern)" and requests the attributes dnsttl,
11985 arecord, nsrecord, cnamerecord, soarecord, ptrrecord, hinforecord,
11986 mxrecord, txtrecord, rprecord, aaaarecord, locrecord, srvrecord,
11987 naptrrecord and modifytimestamp. For reverse entires it also do a
11988 subtree scoped search but this time the filter is "(arecord=10.0.2.2)"
11989 and the requested attributes are associateddomain, dnsttl and
11990 modifytimestamp. In short, in strict mode the objects with ptrrecord
11991 go away, and the arecord attribute in the forward object is used
11992 instead.</p>
11993
11994 <p>The forward and reverse searches can be simulated using ldapsearch
11995 like this:</p>
11996
11997 <blockquote><pre>
11998 ldapsearch -h ldap -b ou=hosts,dc=skole,dc=skolelinux,dc=no -s sub -x \
11999 '(associateddomain=tjener.intern)' dNSTTL aRecord nSRecord \
12000 cNAMERecord sOARecord pTRRecord hInfoRecord mXRecord tXTRecord \
12001 rPRecord aFSDBRecord KeyRecord aAAARecord lOCRecord sRVRecord \
12002 nAPTRRecord kXRecord certRecord dSRecord sSHFPRecord iPSecKeyRecord \
12003 rRSIGRecord nSECRecord dNSKeyRecord dHCIDRecord sPFRecord modifyTimestamp
12004
12005 ldapsearch -h ldap -b ou=hosts,dc=skole,dc=skolelinux,dc=no -s sub -x \
12006 '(arecord=10.0.2.2)' associateddomain dnsttl modifytimestamp
12007 </pre></blockquote>
12008
12009 <p>In addition to the forward and reverse searches , there is also a
12010 search for SOA records, which behave similar to the forward and
12011 reverse lookups.</p>
12012
12013 <p>A thing to note with the PowerDNS behaviour is that it do not
12014 specify any objectclass names, and instead look for the attributes it
12015 need to generate a DNS reply. This make it able to work with any
12016 objectclass that provide the needed attributes.</p>
12017
12018 <p>The attributes are normally provided in the cosine (RFC 1274) and
12019 dnsdomain2 schemas. The latter is used for reverse entries like
12020 ptrrecord and recent DNS additions like aaaarecord and srvrecord.</p>
12021
12022 <p>In Debian Edu, we have created DNS objects using the object classes
12023 dcobject (for dc), dnsdomain or dnsdomain2 (structural, for the DNS
12024 attributes) and domainrelatedobject (for associatedDomain). The use
12025 of structural object classes make it impossible to combine these
12026 classes with the object classes used by DHCP.</p>
12027
12028 <p>There are other schemas that could be used too, for example the
12029 dnszone structural object class used by Gosa and bind-sdb for the DNS
12030 attributes combined with the domainrelatedobject object class, but in
12031 this case some unused attributes would have to be included as well
12032 (zonename and relativedomainname).</p>
12033
12034 <p>My proposal for Debian Edu would be to switch PowerDNS to strict
12035 mode and not use any of the existing objectclasses (dnsdomain,
12036 dnsdomain2 and dnszone) when one want to combine the DNS information
12037 with DHCP information, and instead create a auxiliary object class
12038 defined something like this (using the attributes defined for
12039 dnsdomain and dnsdomain2 or dnszone):</p>
12040
12041 <blockquote><pre>
12042 objectclass ( some-oid NAME 'dnsDomainAux'
12043 SUP top
12044 AUXILIARY
12045 MAY ( ARecord $ MDRecord $ MXRecord $ NSRecord $ SOARecord $ CNAMERecord $
12046 DNSTTL $ DNSClass $ PTRRecord $ HINFORecord $ MINFORecord $
12047 TXTRecord $ SIGRecord $ KEYRecord $ AAAARecord $ LOCRecord $
12048 NXTRecord $ SRVRecord $ NAPTRRecord $ KXRecord $ CERTRecord $
12049 A6Record $ DNAMERecord
12050 ))
12051 </pre></blockquote>
12052
12053 <p>This will allow any object to become a DNS entry when combined with
12054 the domainrelatedobject object class, and allow any entity to include
12055 all the attributes PowerDNS wants. I've sent an email to the PowerDNS
12056 developers asking for their view on this schema and if they are
12057 interested in providing such schema with PowerDNS, and I hope my
12058 message will be accepted into their mailing list soon.</p>
12059
12060 <p><strong>ISC dhcp</strong></p>
12061
12062 <p>The DHCP server searches for specific objectclass and requests all
12063 the object attributes, and then uses the attributes it want. This
12064 make it harder to figure out exactly what attributes are used, but
12065 thanks to the working example in Debian Edu I can at least get an idea
12066 what is needed without having to read the source code.</p>
12067
12068 <p>In the DHCP server configuration, the LDAP base to use and the
12069 search filter to use to locate the correct dhcpServer entity is
12070 stored. These are the relevant entries from
12071 /etc/dhcp3/dhcpd.conf:</p>
12072
12073 <blockquote><pre>
12074 ldap-base-dn "dc=skole,dc=skolelinux,dc=no";
12075 ldap-dhcp-server-cn "dhcp";
12076 </pre></blockquote>
12077
12078 <p>The DHCP server uses this information to nest all the DHCP
12079 configuration it need. The cn "dhcp" is located using the given LDAP
12080 base and the filter "(&(objectClass=dhcpServer)(cn=dhcp))". The
12081 search result is this entry:</p>
12082
12083 <blockquote><pre>
12084 dn: cn=dhcp,dc=skole,dc=skolelinux,dc=no
12085 cn: dhcp
12086 objectClass: top
12087 objectClass: dhcpServer
12088 dhcpServiceDN: cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
12089 </pre></blockquote>
12090
12091 <p>The content of the dhcpServiceDN attribute is next used to locate the
12092 subtree with DHCP configuration. The DHCP configuration subtree base
12093 is located using a base scope search with base "cn=DHCP
12094 Config,dc=skole,dc=skolelinux,dc=no" and filter
12095 "(&(objectClass=dhcpService)(|(dhcpPrimaryDN=cn=dhcp,dc=skole,dc=skolelinux,dc=no)(dhcpSecondaryDN=cn=dhcp,dc=skole,dc=skolelinux,dc=no)))".
12096 The search result is this entry:</p>
12097
12098 <blockquote><pre>
12099 dn: cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
12100 cn: DHCP Config
12101 objectClass: top
12102 objectClass: dhcpService
12103 objectClass: dhcpOptions
12104 dhcpPrimaryDN: cn=dhcp, dc=skole,dc=skolelinux,dc=no
12105 dhcpStatements: ddns-update-style none
12106 dhcpStatements: authoritative
12107 dhcpOption: smtp-server code 69 = array of ip-address
12108 dhcpOption: www-server code 72 = array of ip-address
12109 dhcpOption: wpad-url code 252 = text
12110 </pre></blockquote>
12111
12112 <p>Next, the entire subtree is processed, one level at the time. When
12113 all the DHCP configuration is loaded, it is ready to receive requests.
12114 The subtree in Debian Edu contain objects with object classes
12115 top/dhcpService/dhcpOptions, top/dhcpSharedNetwork/dhcpOptions,
12116 top/dhcpSubnet, top/dhcpGroup and top/dhcpHost. These provide options
12117 and information about netmasks, dynamic range etc. Leaving out the
12118 details here because it is not relevant for the focus of my
12119 investigation, which is to see if it is possible to merge dns and dhcp
12120 related computer objects.</p>
12121
12122 <p>When a DHCP request come in, LDAP is searched for the MAC address
12123 of the client (00:00:00:00:00:00 in this example), using a subtree
12124 scoped search with "cn=DHCP Config,dc=skole,dc=skolelinux,dc=no" as
12125 the base and "(&(objectClass=dhcpHost)(dhcpHWAddress=ethernet
12126 00:00:00:00:00:00))" as the filter. This is what a host object look
12127 like:</p>
12128
12129 <blockquote><pre>
12130 dn: cn=hostname,cn=group1,cn=THINCLIENTS,cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
12131 cn: hostname
12132 objectClass: top
12133 objectClass: dhcpHost
12134 dhcpHWAddress: ethernet 00:00:00:00:00:00
12135 dhcpStatements: fixed-address hostname
12136 </pre></blockquote>
12137
12138 <p>There is less flexiblity in the way LDAP searches are done here.
12139 The object classes need to have fixed names, and the configuration
12140 need to be stored in a fairly specific LDAP structure. On the
12141 positive side, the invidiual dhcpHost entires can be anywhere without
12142 the DN pointed to by the dhcpServer entries. The latter should make
12143 it possible to group all host entries in a subtree next to the
12144 configuration entries, and this subtree can also be shared with the
12145 DNS server if the schema proposed above is combined with the dhcpHost
12146 structural object class.
12147
12148 <p><strong>Conclusion</strong></p>
12149
12150 <p>The PowerDNS implementation seem to be very flexible when it come
12151 to which LDAP schemas to use. While its "tree" mode is rigid when it
12152 come to the the LDAP structure, the "strict" mode is very flexible,
12153 allowing DNS objects to be stored anywhere under the base cn specified
12154 in the configuration.</p>
12155
12156 <p>The DHCP implementation on the other hand is very inflexible, both
12157 regarding which LDAP schemas to use and which LDAP structure to use.
12158 I guess one could implement ones own schema, as long as the
12159 objectclasses and attributes have the names used, but this do not
12160 really help when the DHCP subtree need to have a fairly fixed
12161 structure.</p>
12162
12163 <p>Based on the observed behaviour, I suspect a LDAP structure like
12164 this might work for Debian Edu:</p>
12165
12166 <blockquote><pre>
12167 ou=services
12168 cn=machine-info (dhcpService) - dhcpServiceDN points here
12169 cn=dhcp (dhcpServer)
12170 cn=dhcp-internal (dhcpSharedNetwork/dhcpOptions)
12171 cn=10.0.2.0 (dhcpSubnet)
12172 cn=group1 (dhcpGroup/dhcpOptions)
12173 cn=dhcp-thinclients (dhcpSharedNetwork/dhcpOptions)
12174 cn=192.168.0.0 (dhcpSubnet)
12175 cn=group1 (dhcpGroup/dhcpOptions)
12176 ou=machines - PowerDNS base points here
12177 cn=hostname (dhcpHost/domainrelatedobject/dnsDomainAux)
12178 </pre></blockquote>
12179
12180 <P>This is not tested yet. If the DHCP server require the dhcpHost
12181 entries to be in the dhcpGroup subtrees, the entries can be stored
12182 there instead of a common machines subtree, and the PowerDNS base
12183 would have to be moved one level up to the machine-info subtree.</p>
12184
12185 <p>The combined object under the machines subtree would look something
12186 like this:</p>
12187
12188 <blockquote><pre>
12189 dn: dc=hostname,ou=machines,cn=machine-info,dc=skole,dc=skolelinux,dc=no
12190 dc: hostname
12191 objectClass: top
12192 objectClass: dhcpHost
12193 objectclass: domainrelatedobject
12194 objectclass: dnsDomainAux
12195 associateddomain: hostname.intern
12196 arecord: 10.11.12.13
12197 dhcpHWAddress: ethernet 00:00:00:00:00:00
12198 dhcpStatements: fixed-address hostname.intern
12199 </pre></blockquote>
12200
12201 </p>One could even add the LTSP configuration associated with a given
12202 machine, as long as the required attributes are available in a
12203 auxiliary object class.</p>
12204
12205 </div>
12206 <div class="tags">
12207
12208
12209 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
12210
12211
12212 </div>
12213 </div>
12214 <div class="padding"></div>
12215
12216 <div class="entry">
12217 <div class="title">
12218 <a href="http://people.skolelinux.org/pere/blog/Combining_PowerDNS_and_ISC_DHCP_LDAP_objects.html">Combining PowerDNS and ISC DHCP LDAP objects</a>
12219 </div>
12220 <div class="date">
12221 14th July 2010
12222 </div>
12223 <div class="body">
12224 <p>For a while now, I have wanted to find a way to change the DNS and
12225 DHCP services in Debian Edu to use the same LDAP objects for a given
12226 computer, to avoid the possibility of having a inconsistent state for
12227 a computer in LDAP (as in DHCP but no DNS entry or the other way
12228 around) and make it easier to add computers to LDAP.</p>
12229
12230 <p>I've looked at how powerdns and dhcpd is using LDAP, and using this
12231 information finally found a solution that seem to work.</p>
12232
12233 <p>The old setup required three LDAP objects for a given computer.
12234 One forward DNS entry, one reverse DNS entry and one DHCP entry. If
12235 we switch powerdns to use its strict LDAP method (ldap-method=strict
12236 in pdns-debian-edu.conf), the forward and reverse DNS entries are
12237 merged into one while making it impossible to transfer the reverse map
12238 to a slave DNS server.</p>
12239
12240 <p>If we also replace the object class used to get the DNS related
12241 attributes to one allowing these attributes to be combined with the
12242 dhcphost object class, we can merge the DNS and DHCP entries into one.
12243 I've written such object class in the dnsdomainaux.schema file (need
12244 proper OIDs, but that is a minor issue), and tested the setup. It
12245 seem to work.</p>
12246
12247 <p>With this test setup in place, we can get away with one LDAP object
12248 for both DNS and DHCP, and even the LTSP configuration I suggested in
12249 an earlier email. The combined LDAP object will look something like
12250 this:</p>
12251
12252 <blockquote><pre>
12253 dn: cn=hostname,cn=group1,cn=THINCLIENTS,cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
12254 cn: hostname
12255 objectClass: dhcphost
12256 objectclass: domainrelatedobject
12257 objectclass: dnsdomainaux
12258 associateddomain: hostname.intern
12259 arecord: 10.11.12.13
12260 dhcphwaddress: ethernet 00:00:00:00:00:00
12261 dhcpstatements: fixed-address hostname
12262 ldapconfigsound: Y
12263 </pre></blockquote>
12264
12265 <p>The DNS server uses the associateddomain and arecord entries, while
12266 the DHCP server uses the dhcphwaddress and dhcpstatements entries
12267 before asking DNS to resolve the fixed-adddress. LTSP will use
12268 dhcphwaddress or associateddomain and the ldapconfig* attributes.</p>
12269
12270 <p>I am not yet sure if I can get the DHCP server to look for its
12271 dhcphost in a different location, to allow us to put the objects
12272 outside the "DHCP Config" subtree, but hope to figure out a way to do
12273 that. If I can't figure out a way to do that, we can still get rid of
12274 the hosts subtree and move all its content into the DHCP Config tree
12275 (which probably should be renamed to be more related to the new
12276 content. I suspect cn=dnsdhcp,ou=services or something like that
12277 might be a good place to put it.</p>
12278
12279 <p>If you want to help out with implementing this for Debian Edu,
12280 please contact us on debian-edu@lists.debian.org.</p>
12281
12282 </div>
12283 <div class="tags">
12284
12285
12286 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
12287
12288
12289 </div>
12290 </div>
12291 <div class="padding"></div>
12292
12293 <div class="entry">
12294 <div class="title">
12295 <a href="http://people.skolelinux.org/pere/blog/Idea_for_storing_LTSP_configuration_in_LDAP.html">Idea for storing LTSP configuration in LDAP</a>
12296 </div>
12297 <div class="date">
12298 11th July 2010
12299 </div>
12300 <div class="body">
12301 <p>Vagrant mentioned on IRC today that ltsp_config now support
12302 sourcing files from /usr/share/ltsp/ltsp_config.d/ on the thin
12303 clients, and that this can be used to fetch configuration from LDAP if
12304 Debian Edu choose to store configuration there.</p>
12305
12306 <p>Armed with this information, I got inspired and wrote a test module
12307 to get configuration from LDAP. The idea is to look up the MAC
12308 address of the client in LDAP, and look for attributes on the form
12309 ltspconfigsetting=value, and use this to export SETTING=value to the
12310 LTSP clients.</p>
12311
12312 <p>The goal is to be able to store the LTSP configuration attributes
12313 in a "computer" LDAP object used by both DNS and DHCP, and thus
12314 allowing us to store all information about a computer in one place.</p>
12315
12316 <p>This is a untested draft implementation, and I welcome feedback on
12317 this approach. A real LDAP schema for the ltspClientAux objectclass
12318 need to be written. Comments, suggestions, etc?</p>
12319
12320 <blockquote><pre>
12321 # Store in /opt/ltsp/$arch/usr/share/ltsp/ltsp_config.d/ldap-config
12322 #
12323 # Fetch LTSP client settings from LDAP based on MAC address
12324 #
12325 # Uses ethernet address as stored in the dhcpHost objectclass using
12326 # the dhcpHWAddress attribute or ethernet address stored in the
12327 # ieee802Device objectclass with the macAddress attribute.
12328 #
12329 # This module is written to be schema agnostic, and only depend on the
12330 # existence of attribute names.
12331 #
12332 # The LTSP configuration variables are saved directly using a
12333 # ltspConfig prefix and uppercasing the rest of the attribute name.
12334 # To set the SERVER variable, set the ltspConfigServer attribute.
12335 #
12336 # Some LDAP schema should be created with all the relevant
12337 # configuration settings. Something like this should work:
12338 #
12339 # objectclass ( 1.1.2.2 NAME 'ltspClientAux'
12340 # SUP top
12341 # AUXILIARY
12342 # MAY ( ltspConfigServer $ ltsConfigSound $ ... )
12343
12344 LDAPSERVER=$(debian-edu-ldapserver)
12345 if [ "$LDAPSERVER" ] ; then
12346 LDAPBASE=$(debian-edu-ldapserver -b)
12347 for MAC in $(LANG=C ifconfig |grep -i hwaddr| awk '{print $5}'|sort -u) ; do
12348 filter="(|(dhcpHWAddress=ethernet $MAC)(macAddress=$MAC))"
12349 ldapsearch -h "$LDAPSERVER" -b "$LDAPBASE" -v -x "$filter" | \
12350 grep '^ltspConfig' | while read attr value ; do
12351 # Remove prefix and convert to upper case
12352 attr=$(echo $attr | sed 's/^ltspConfig//i' | tr a-z A-Z)
12353 # bass value on to clients
12354 eval "$attr=$value; export $attr"
12355 done
12356 done
12357 fi
12358 </pre></blockquote>
12359
12360 <p>I'm not sure this shell construction will work, because I suspect
12361 the while block might end up in a subshell causing the variables set
12362 there to not show up in ltsp-config, but if that is the case I am sure
12363 the code can be restructured to make sure the variables are passed on.
12364 I expect that can be solved with some testing. :)</p>
12365
12366 <p>If you want to help out with implementing this for Debian Edu,
12367 please contact us on debian-edu@lists.debian.org.</p>
12368
12369 <p>Update 2010-07-17: I am aware of another effort to store LTSP
12370 configuration in LDAP that was created around year 2000 by
12371 <a href="http://www.pcxperience.com/thinclient/documentation/ldap.html">PC
12372 Xperience, Inc., 2000</a>. I found its
12373 <a href="http://people.redhat.com/alikins/ltsp/ldap/">files</a> on a
12374 personal home page over at redhat.com.</p>
12375
12376 </div>
12377 <div class="tags">
12378
12379
12380 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
12381
12382
12383 </div>
12384 </div>
12385 <div class="padding"></div>
12386
12387 <div class="entry">
12388 <div class="title">
12389 <a href="http://people.skolelinux.org/pere/blog/jXplorer__a_very_nice_LDAP_GUI.html">jXplorer, a very nice LDAP GUI</a>
12390 </div>
12391 <div class="date">
12392 9th July 2010
12393 </div>
12394 <div class="body">
12395 <p>Since
12396 <a href="http://people.skolelinux.org/pere/blog/LUMA__a_very_nice_LDAP_GUI.html">my
12397 last post</a> about available LDAP tools in Debian, I was told about a
12398 LDAP GUI that is even better than luma. The java application
12399 <a href="http://jxplorer.org/">jXplorer</a> is claimed to be capable of
12400 moving LDAP objects and subtrees using drag-and-drop, and can
12401 authenticate using Kerberos. I have only tested the Kerberos
12402 authentication, but do not have a LDAP setup allowing me to rewrite
12403 LDAP with my test user yet. It is
12404 <a href="http://packages.qa.debian.org/j/jxplorer.html">available in
12405 Debian</a> testing and unstable at the moment. The only problem I
12406 have with it is how it handle errors. If something go wrong, its
12407 non-intuitive behaviour require me to go through some query work list
12408 and remove the failing query. Nothing big, but very annoying.</p>
12409
12410 </div>
12411 <div class="tags">
12412
12413
12414 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
12415
12416
12417 </div>
12418 </div>
12419 <div class="padding"></div>
12420
12421 <div class="entry">
12422 <div class="title">
12423 <a href="http://people.skolelinux.org/pere/blog/Lenny__Squeeze_upgrades__apt_vs_aptitude_with_the_Gnome_desktop.html">Lenny->Squeeze upgrades, apt vs aptitude with the Gnome desktop</a>
12424 </div>
12425 <div class="date">
12426 3rd July 2010
12427 </div>
12428 <div class="body">
12429 <p>Here is a short update on my <a
12430 href="http://people.skolelinux.org/~pere/debian-upgrade-testing/">my
12431 Debian Lenny->Squeeze upgrade testing</a>. Here is a summary of the
12432 difference for Gnome when it is upgraded by apt-get and aptitude. I'm
12433 not reporting the status for KDE, because the upgrade crashes when
12434 aptitude try because of missing conflicts
12435 (<a href="http://bugs.debian.org/584861">#584861</a> and
12436 <a href="http://bugs.debian.org/585716">#585716</a>).</p>
12437
12438 <p>At the end of the upgrade test script, dpkg -l is executed to get a
12439 complete list of the installed packages. Based on this I see these
12440 differences when I did a test run today. As usual, I do not really
12441 know what the correct set of packages would be, but thought it best to
12442 publish the difference.</p>
12443
12444 <p>Installed using apt-get, missing with aptitude</p>
12445
12446 <blockquote><p>
12447 at-spi cpp-4.3 finger gnome-spell gstreamer0.10-gnomevfs
12448 libatspi1.0-0 libcupsys2 libeel2-data libgail-common libgdl-1-common
12449 libgnomeprint2.2-data libgnomeprintui2.2-common libgnomevfs2-bin
12450 libgtksourceview-common libpt-1.10.10-plugins-alsa
12451 libpt-1.10.10-plugins-v4l libservlet2.4-java libxalan2-java
12452 libxerces2-java openoffice.org-writer2latex openssl-blacklist p7zip
12453 python-4suite-xml python-eggtrayicon python-gtkhtml2
12454 python-gtkmozembed svgalibg1 xserver-xephyr zip
12455 </p></blockquote>
12456
12457 <p>Installed using apt-get, removed with aptitude</p>
12458
12459 <blockquote><p>
12460 bluez-utils dhcdbd djvulibre-desktop epiphany-gecko
12461 gnome-app-install gnome-mount gnome-vfs-obexftp gnome-volume-manager
12462 libao2 libavahi-compat-libdnssd1 libavahi-core5 libbind9-50
12463 libbluetooth2 libcamel1.2-11 libcdio7 libcucul0 libcurl3
12464 libdirectfb-1.0-0 libdvdread3 libedata-cal1.2-6 libedataserver1.2-9
12465 libeel2-2.20 libepc-1.0-1 libepc-ui-1.0-1 libexchange-storage1.2-3
12466 libfaad0 libgd2-noxpm libgda3-3 libgda3-common libggz2 libggzcore9
12467 libggzmod4 libgksu1.2-0 libgksuui1.0-1 libgmyth0 libgnome-desktop-2
12468 libgnome-pilot2 libgnomecups1.0-1 libgnomeprint2.2-0
12469 libgnomeprintui2.2-0 libgpod3 libgraphviz4 libgtkhtml2-0
12470 libgtksourceview1.0-0 libgucharmap6 libhesiod0 libicu38 libisccc50
12471 libisccfg50 libiw29 libkpathsea4 libltdl3 liblwres50 libmagick++10
12472 libmagick10 libmalaga7 libmtp7 libmysqlclient15off libnautilus-burn4
12473 libneon27 libnm-glib0 libnm-util0 libopal-2.2 libosp5
12474 libparted1.8-10 libpisock9 libpisync1 libpoppler-glib3 libpoppler3
12475 libpt-1.10.10 libraw1394-8 libsensors3 libsmbios2 libsoup2.2-8
12476 libssh2-1 libsuitesparse-3.1.0 libswfdec-0.6-90 libtalloc1
12477 libtotem-plparser10 libtrackerclient0 libvoikko1 libxalan2-java-gcj
12478 libxerces2-java-gcj libxklavier12 libxtrap6 libxxf86misc1 libzephyr3
12479 mysql-common swfdec-gnome totem-gstreamer wodim
12480 </p></blockquote>
12481
12482 <p>Installed using aptitude, missing with apt-get</p>
12483
12484 <blockquote><p>
12485 gnome gnome-desktop-environment hamster-applet python-gnomeapplet
12486 python-gnomekeyring python-wnck rhythmbox-plugins xorg
12487 xserver-xorg-input-all xserver-xorg-input-evdev
12488 xserver-xorg-input-kbd xserver-xorg-input-mouse
12489 xserver-xorg-input-synaptics xserver-xorg-video-all
12490 xserver-xorg-video-apm xserver-xorg-video-ark xserver-xorg-video-ati
12491 xserver-xorg-video-chips xserver-xorg-video-cirrus
12492 xserver-xorg-video-dummy xserver-xorg-video-fbdev
12493 xserver-xorg-video-glint xserver-xorg-video-i128
12494 xserver-xorg-video-i740 xserver-xorg-video-mach64
12495 xserver-xorg-video-mga xserver-xorg-video-neomagic
12496 xserver-xorg-video-nouveau xserver-xorg-video-nv
12497 xserver-xorg-video-r128 xserver-xorg-video-radeon
12498 xserver-xorg-video-radeonhd xserver-xorg-video-rendition
12499 xserver-xorg-video-s3 xserver-xorg-video-s3virge
12500 xserver-xorg-video-savage xserver-xorg-video-siliconmotion
12501 xserver-xorg-video-sis xserver-xorg-video-sisusb
12502 xserver-xorg-video-tdfx xserver-xorg-video-tga
12503 xserver-xorg-video-trident xserver-xorg-video-tseng
12504 xserver-xorg-video-vesa xserver-xorg-video-vmware
12505 xserver-xorg-video-voodoo
12506 </p></blockquote>
12507
12508 <p>Installed using aptitude, removed with apt-get</p>
12509
12510 <blockquote><p>
12511 deskbar-applet xserver-xorg xserver-xorg-core
12512 xserver-xorg-input-wacom xserver-xorg-video-intel
12513 xserver-xorg-video-openchrome
12514 </p></blockquote>
12515
12516 <p>I was told on IRC that the xorg-xserver package was
12517 <a href="http://git.debian.org/?p=pkg-xorg/xserver/xorg-server.git;a=commit;h=9c8080d06c457932d3bfec021c69ac000aa60120">changed
12518 in git</a> today to try to get apt-get to not remove xorg completely.
12519 No idea when it hits Squeeze, but when it does I hope it will reduce
12520 the difference somewhat.
12521
12522 </div>
12523 <div class="tags">
12524
12525
12526 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
12527
12528
12529 </div>
12530 </div>
12531 <div class="padding"></div>
12532
12533 <div class="entry">
12534 <div class="title">
12535 <a href="http://people.skolelinux.org/pere/blog/LUMA__a_very_nice_LDAP_GUI.html">LUMA, a very nice LDAP GUI</a>
12536 </div>
12537 <div class="date">
12538 28th June 2010
12539 </div>
12540 <div class="body">
12541 <p>The last few days I have been looking into the status of the LDAP
12542 directory in Debian Edu, and in the process I started to miss a GUI
12543 tool to browse the LDAP tree. The only one I was able to find in
12544 Debian/Squeeze and Lenny is
12545 <a href="http://luma.sourceforge.net/">LUMA</a>, which has proved to
12546 be a great tool to get a overview of the current LDAP directory
12547 populated by default in Skolelinux. Thanks to it, I have been able to
12548 find empty and obsolete subtrees, misplaced objects and duplicate
12549 objects. It will be installed by default in Debian/Squeeze. If you
12550 are working with LDAP, give it a go. :)</p>
12551
12552 <p>I did notice one problem with it I have not had time to report to
12553 the BTS yet. There is no .desktop file in the package, so the tool do
12554 not show up in the Gnome and KDE menus, but only deep down in in the
12555 Debian submenu in KDE. I hope that can be fixed before Squeeze is
12556 released.</p>
12557
12558 <p>I have not yet been able to get it to modify the tree yet. I would
12559 like to move objects and remove subtrees directly in the GUI, but have
12560 not found a way to do that with LUMA yet. So in the mean time, I use
12561 <a href="http://www.lichteblau.com/ldapvi/">ldapvi</a> for that.</p>
12562
12563 <p>If you have tips on other GUI tools for LDAP that might be useful
12564 in Debian Edu, please contact us on debian-edu@lists.debian.org.</p>
12565
12566 <p>Update 2010-06-29: Ross Reedstrom tipped us about the
12567 <a href="http://packages.qa.debian.org/g/gq.html">gq</a> package as a
12568 useful GUI alternative. It seem like a good tool, but is unmaintained
12569 in Debian and got a RC bug keeping it out of Squeeze. Unless that
12570 changes, it will not be an option for Debian Edu based on Squeeze.</p>
12571
12572 </div>
12573 <div class="tags">
12574
12575
12576 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
12577
12578
12579 </div>
12580 </div>
12581 <div class="padding"></div>
12582
12583 <div class="entry">
12584 <div class="title">
12585 <a href="http://people.skolelinux.org/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>
12586 </div>
12587 <div class="date">
12588 24th June 2010
12589 </div>
12590 <div class="body">
12591 <p>A while back, I
12592 <a href="http://people.skolelinux.org/pere/blog/Time_for_new__LDAP_schemas_replacing_RFC_2307_.html">complained
12593 about the fact</a> that it is not possible with the provided schemas
12594 for storing DNS and DHCP information in LDAP to combine the two sets
12595 of information into one LDAP object representing a computer.</p>
12596
12597 <p>In the mean time, I discovered that a simple fix would be to make
12598 the dhcpHost object class auxiliary, to allow it to be combined with
12599 the dNSDomain object class, and thus forming one object for one
12600 computer when storing both DHCP and DNS information in LDAP.</p>
12601
12602 <p>If I understand this correctly, it is not safe to do this change
12603 without also changing the assigned number for the object class, and I
12604 do not know enough about LDAP schema design to do that properly for
12605 Debian Edu.</p>
12606
12607 <p>Anyway, for future reference, this is how I believe we could change
12608 the
12609 <a href="http://tools.ietf.org/html/draft-ietf-dhc-ldap-schema-00">DHCP
12610 schema</a> to solve at least part of the problem with the LDAP schemas
12611 available today from IETF.</p>
12612
12613 <pre>
12614 --- dhcp.schema (revision 65192)
12615 +++ dhcp.schema (working copy)
12616 @@ -376,7 +376,7 @@
12617 objectclass ( 2.16.840.1.113719.1.203.6.6
12618 NAME 'dhcpHost'
12619 DESC 'This represents information about a particular client'
12620 - SUP top
12621 + SUP top AUXILIARY
12622 MUST cn
12623 MAY (dhcpLeaseDN $ dhcpHWAddress $ dhcpOptionsDN $ dhcpStatements $ dhcpComments $ dhcpOption)
12624 X-NDS_CONTAINMENT ('dhcpService' 'dhcpSubnet' 'dhcpGroup') )
12625 </pre>
12626
12627 <p>I very much welcome clues on how to do this properly for Debian
12628 Edu/Squeeze. We provide the DHCP schema in our debian-edu-config
12629 package, and should thus be free to rewrite it as we see fit.</p>
12630
12631 <p>If you want to help out with implementing this for Debian Edu,
12632 please contact us on debian-edu@lists.debian.org.</p>
12633
12634 </div>
12635 <div class="tags">
12636
12637
12638 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
12639
12640
12641 </div>
12642 </div>
12643 <div class="padding"></div>
12644
12645 <div class="entry">
12646 <div class="title">
12647 <a href="http://people.skolelinux.org/pere/blog/Calling_tasksel_like_the_installer__while_still_getting_useful_output.html">Calling tasksel like the installer, while still getting useful output</a>
12648 </div>
12649 <div class="date">
12650 16th June 2010
12651 </div>
12652 <div class="body">
12653 <p>A few times I have had the need to simulate the way tasksel
12654 installs packages during the normal debian-installer run. Until now,
12655 I have ended up letting tasksel do the work, with the annoying problem
12656 of not getting any feedback at all when something fails (like a
12657 conffile question from dpkg or a download that fails), using code like
12658 this:
12659
12660 <blockquote><pre>
12661 export DEBIAN_FRONTEND=noninteractive
12662 tasksel --new-install
12663 </pre></blockquote>
12664
12665 This would invoke tasksel, let its automatic task selection pick the
12666 tasks to install, and continue to install the requested tasks without
12667 any output what so ever.
12668
12669 Recently I revisited this problem while working on the automatic
12670 package upgrade testing, because tasksel would some times hang without
12671 any useful feedback, and I want to see what is going on when it
12672 happen. Then it occured to me, I can parse the output from tasksel
12673 when asked to run in test mode, and use that aptitude command line
12674 printed by tasksel then to simulate the tasksel run. I ended up using
12675 code like this:
12676
12677 <blockquote><pre>
12678 export DEBIAN_FRONTEND=noninteractive
12679 cmd="$(in_target tasksel -t --new-install | sed 's/debconf-apt-progress -- //')"
12680 $cmd
12681 </pre></blockquote>
12682
12683 <p>The content of $cmd is typically something like "<tt>aptitude -q
12684 --without-recommends -o APT::Install-Recommends=no -y install
12685 ~t^desktop$ ~t^gnome-desktop$ ~t^laptop$ ~pstandard ~prequired
12686 ~pimportant</tt>", which will install the gnome desktop task, the
12687 laptop task and all packages with priority standard , required and
12688 important, just like tasksel would have done it during
12689 installation.</p>
12690
12691 <p>A better approach is probably to extend tasksel to be able to
12692 install packages without using debconf-apt-progress, for use cases
12693 like this.</p>
12694
12695 </div>
12696 <div class="tags">
12697
12698
12699 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
12700
12701
12702 </div>
12703 </div>
12704 <div class="padding"></div>
12705
12706 <div class="entry">
12707 <div class="title">
12708 <a href="http://people.skolelinux.org/pere/blog/Lenny__Squeeze_upgrades__removals_by_apt_and_aptitude.html">Lenny->Squeeze upgrades, removals by apt and aptitude</a>
12709 </div>
12710 <div class="date">
12711 13th June 2010
12712 </div>
12713 <div class="body">
12714 <p>My
12715 <a href="http://people.skolelinux.org/pere/blog/Automatic_upgrade_testing_from_Lenny_to_Squeeze.html">testing
12716 of Debian upgrades</a> from Lenny to Squeeze continues, and I've
12717 finally made the upgrade logs available from
12718 <a href="http://people.skolelinux.org/pere/debian-upgrade-testing/">http://people.skolelinux.org/pere/debian-upgrade-testing/</a>.
12719 I am now testing dist-upgrade of Gnome and KDE in a chroot using both
12720 apt and aptitude, and found their differences interesting. This time
12721 I will only focus on their removal plans.</p>
12722
12723 <p>After installing a Gnome desktop and the laptop task, apt-get wants
12724 to remove 72 packages when dist-upgrading from Lenny to Squeeze. The
12725 surprising part is that it want to remove xorg and all
12726 xserver-xorg-video* drivers. Clearly not a good choice, but I am not
12727 sure why. When asking aptitude to do the same, it want to remove 129
12728 packages, but most of them are library packages I suspect are no
12729 longer needed. Both of them want to remove bluetooth packages, which
12730 I do not know. Perhaps these bluetooth packages are obsolete?</p>
12731
12732 <p>For KDE, apt-get want to remove 82 packages, among them kdebase
12733 which seem like a bad idea and xorg the same way as with Gnome. Asking
12734 aptitude for the same, it wants to remove 192 packages, none which are
12735 too surprising.</p>
12736
12737 <p>I guess the removal of xorg during upgrades should be investigated
12738 and avoided, and perhaps others as well. Here are the complete list
12739 of planned removals. The complete logs is available from the URL
12740 above. Note if you want to repeat these tests, that the upgrade test
12741 for kde+apt-get hung in the tasksel setup because of dpkg asking
12742 conffile questions. No idea why. I worked around it by using
12743 '<tt>echo >> /proc/<em>pidofdpkg</em>/fd/0</tt>' to tell dpkg to
12744 continue.</p>
12745
12746 <p><b>apt-get gnome 72</b>
12747 <br>bluez-gnome cupsddk-drivers deskbar-applet gnome
12748 gnome-desktop-environment gnome-network-admin gtkhtml3.14
12749 iceweasel-gnome-support libavcodec51 libdatrie0 libgdl-1-0
12750 libgnomekbd2 libgnomekbdui2 libmetacity0 libslab0 libxcb-xlib0
12751 nautilus-cd-burner python-gnome2-desktop python-gnome2-extras
12752 serpentine swfdec-mozilla update-manager xorg xserver-xorg
12753 xserver-xorg-core xserver-xorg-input-all xserver-xorg-input-evdev
12754 xserver-xorg-input-kbd xserver-xorg-input-mouse
12755 xserver-xorg-input-synaptics xserver-xorg-input-wacom
12756 xserver-xorg-video-all xserver-xorg-video-apm xserver-xorg-video-ark
12757 xserver-xorg-video-ati xserver-xorg-video-chips
12758 xserver-xorg-video-cirrus xserver-xorg-video-cyrix
12759 xserver-xorg-video-dummy xserver-xorg-video-fbdev
12760 xserver-xorg-video-glint xserver-xorg-video-i128
12761 xserver-xorg-video-i740 xserver-xorg-video-imstt
12762 xserver-xorg-video-intel xserver-xorg-video-mach64
12763 xserver-xorg-video-mga xserver-xorg-video-neomagic
12764 xserver-xorg-video-nsc xserver-xorg-video-nv
12765 xserver-xorg-video-openchrome xserver-xorg-video-r128
12766 xserver-xorg-video-radeon xserver-xorg-video-radeonhd
12767 xserver-xorg-video-rendition xserver-xorg-video-s3
12768 xserver-xorg-video-s3virge xserver-xorg-video-savage
12769 xserver-xorg-video-siliconmotion xserver-xorg-video-sis
12770 xserver-xorg-video-sisusb xserver-xorg-video-tdfx
12771 xserver-xorg-video-tga xserver-xorg-video-trident
12772 xserver-xorg-video-tseng xserver-xorg-video-v4l
12773 xserver-xorg-video-vesa xserver-xorg-video-vga
12774 xserver-xorg-video-vmware xserver-xorg-video-voodoo xulrunner-1.9
12775 xulrunner-1.9-gnome-support</p>
12776
12777 <p><b>aptitude gnome 129</b>
12778
12779 <br>bluez-gnome bluez-utils cpp-4.3 cupsddk-drivers dhcdbd
12780 djvulibre-desktop finger gnome-app-install gnome-mount
12781 gnome-network-admin gnome-spell gnome-vfs-obexftp
12782 gnome-volume-manager gstreamer0.10-gnomevfs gtkhtml3.14 libao2
12783 libavahi-compat-libdnssd1 libavahi-core5 libavcodec51 libbluetooth2
12784 libcamel1.2-11 libcdio7 libcucul0 libcupsys2 libcurl3 libdatrie0
12785 libdirectfb-1.0-0 libdvdread3 libedataserver1.2-9 libeel2-2.20
12786 libeel2-data libepc-1.0-1 libepc-ui-1.0-1 libfaad0 libgail-common
12787 libgd2-noxpm libgda3-3 libgda3-common libgdl-1-0 libgdl-1-common
12788 libggz2 libggzcore9 libggzmod4 libgksu1.2-0 libgksuui1.0-1 libgmyth0
12789 libgnomecups1.0-1 libgnomekbd2 libgnomekbdui2 libgnomeprint2.2-0
12790 libgnomeprint2.2-data libgnomeprintui2.2-0 libgnomeprintui2.2-common
12791 libgnomevfs2-bin libgpod3 libgraphviz4 libgtkhtml2-0
12792 libgtksourceview-common libgtksourceview1.0-0 libgucharmap6
12793 libhesiod0 libicu38 libiw29 libkpathsea4 libltdl3 libmagick++10
12794 libmagick10 libmalaga7 libmetacity0 libmtp7 libmysqlclient15off
12795 libnautilus-burn4 libneon27 libnm-glib0 libnm-util0 libopal-2.2
12796 libosp5 libparted1.8-10 libpoppler-glib3 libpoppler3 libpt-1.10.10
12797 libpt-1.10.10-plugins-alsa libpt-1.10.10-plugins-v4l libraw1394-8
12798 libsensors3 libslab0 libsmbios2 libsoup2.2-8 libssh2-1
12799 libsuitesparse-3.1.0 libswfdec-0.6-90 libtalloc1 libtotem-plparser10
12800 libtrackerclient0 libxalan2-java libxalan2-java-gcj libxcb-xlib0
12801 libxerces2-java libxerces2-java-gcj libxklavier12 libxtrap6
12802 libxxf86misc1 libzephyr3 mysql-common nautilus-cd-burner
12803 openoffice.org-writer2latex openssl-blacklist p7zip
12804 python-4suite-xml python-eggtrayicon python-gnome2-desktop
12805 python-gnome2-extras python-gtkhtml2 python-gtkmozembed
12806 python-numeric python-sexy serpentine svgalibg1 swfdec-gnome
12807 swfdec-mozilla totem-gstreamer update-manager wodim
12808 xserver-xorg-video-cyrix xserver-xorg-video-imstt
12809 xserver-xorg-video-nsc xserver-xorg-video-v4l xserver-xorg-video-vga
12810 zip</p>
12811
12812 <p><b>apt-get kde 82</b>
12813
12814 <br>cupsddk-drivers karm kaudiocreator kcoloredit kcontrol kde kde-core
12815 kdeaddons kdeartwork kdebase kdebase-bin kdebase-bin-kde3
12816 kdebase-kio-plugins kdesktop kdeutils khelpcenter kicker
12817 kicker-applets knewsticker kolourpaint konq-plugins konqueror korn
12818 kpersonalizer kscreensaver ksplash libavcodec51 libdatrie0 libkiten1
12819 libxcb-xlib0 quanta superkaramba texlive-base-bin xorg xserver-xorg
12820 xserver-xorg-core xserver-xorg-input-all xserver-xorg-input-evdev
12821 xserver-xorg-input-kbd xserver-xorg-input-mouse
12822 xserver-xorg-input-synaptics xserver-xorg-input-wacom
12823 xserver-xorg-video-all xserver-xorg-video-apm xserver-xorg-video-ark
12824 xserver-xorg-video-ati xserver-xorg-video-chips
12825 xserver-xorg-video-cirrus xserver-xorg-video-cyrix
12826 xserver-xorg-video-dummy xserver-xorg-video-fbdev
12827 xserver-xorg-video-glint xserver-xorg-video-i128
12828 xserver-xorg-video-i740 xserver-xorg-video-imstt
12829 xserver-xorg-video-intel xserver-xorg-video-mach64
12830 xserver-xorg-video-mga xserver-xorg-video-neomagic
12831 xserver-xorg-video-nsc xserver-xorg-video-nv
12832 xserver-xorg-video-openchrome xserver-xorg-video-r128
12833 xserver-xorg-video-radeon xserver-xorg-video-radeonhd
12834 xserver-xorg-video-rendition xserver-xorg-video-s3
12835 xserver-xorg-video-s3virge xserver-xorg-video-savage
12836 xserver-xorg-video-siliconmotion xserver-xorg-video-sis
12837 xserver-xorg-video-sisusb xserver-xorg-video-tdfx
12838 xserver-xorg-video-tga xserver-xorg-video-trident
12839 xserver-xorg-video-tseng xserver-xorg-video-v4l
12840 xserver-xorg-video-vesa xserver-xorg-video-vga
12841 xserver-xorg-video-vmware xserver-xorg-video-voodoo xulrunner-1.9</p>
12842
12843 <p><b>aptitude kde 192</b>
12844 <br>bluez-utils cpp-4.3 cupsddk-drivers cvs dcoprss dhcdbd
12845 djvulibre-desktop dosfstools eyesapplet fifteenapplet finger gettext
12846 ghostscript-x imlib-base imlib11 indi kandy karm kasteroids
12847 kaudiocreator kbackgammon kbstate kcoloredit kcontrol kcron kdat
12848 kdeadmin-kfile-plugins kdeartwork-misc kdeartwork-theme-window
12849 kdebase-bin-kde3 kdebase-kio-plugins kdeedu-data
12850 kdegraphics-kfile-plugins kdelirc kdemultimedia-kappfinder-data
12851 kdemultimedia-kfile-plugins kdenetwork-kfile-plugins
12852 kdepim-kfile-plugins kdepim-kio-plugins kdeprint kdesktop kdessh
12853 kdict kdnssd kdvi kedit keduca kenolaba kfax kfaxview kfouleggs
12854 kghostview khelpcenter khexedit kiconedit kitchensync klatin
12855 klickety kmailcvt kmenuedit kmid kmilo kmoon kmrml kodo kolourpaint
12856 kooka korn kpager kpdf kpercentage kpf kpilot kpoker kpovmodeler
12857 krec kregexpeditor ksayit ksim ksirc ksirtet ksmiletris ksmserver
12858 ksnake ksokoban ksplash ksvg ksysv ktip ktnef kuickshow kverbos
12859 kview kviewshell kvoctrain kwifimanager kwin kwin4 kworldclock
12860 kxsldbg libakode2 libao2 libarts1-akode libarts1-audiofile
12861 libarts1-mpeglib libarts1-xine libavahi-compat-libdnssd1
12862 libavahi-core5 libavc1394-0 libavcodec51 libbluetooth2
12863 libboost-python1.34.1 libcucul0 libcurl3 libcvsservice0 libdatrie0
12864 libdirectfb-1.0-0 libdjvulibre21 libdvdread3 libfaad0 libfreebob0
12865 libgail-common libgd2-noxpm libgraphviz4 libgsmme1c2a libgtkhtml2-0
12866 libicu38 libiec61883-0 libindex0 libiw29 libk3b3 libkcal2b libkcddb1
12867 libkdeedu3 libkdepim1a libkgantt0 libkiten1 libkleopatra1 libkmime2
12868 libkpathsea4 libkpimexchange1 libkpimidentities1 libkscan1
12869 libksieve0 libktnef1 liblockdev1 libltdl3 libmagick10 libmimelib1c2a
12870 libmozjs1d libmpcdec3 libneon27 libnm-util0 libopensync0 libpisock9
12871 libpoppler-glib3 libpoppler-qt2 libpoppler3 libraw1394-8 libsmbios2
12872 libssh2-1 libsuitesparse-3.1.0 libtalloc1 libtiff-tools
12873 libxalan2-java libxalan2-java-gcj libxcb-xlib0 libxerces2-java
12874 libxerces2-java-gcj libxtrap6 mpeglib networkstatus
12875 openoffice.org-writer2latex pmount poster psutils quanta quanta-data
12876 superkaramba svgalibg1 tex-common texlive-base texlive-base-bin
12877 texlive-common texlive-doc-base texlive-fonts-recommended
12878 xserver-xorg-video-cyrix xserver-xorg-video-imstt
12879 xserver-xorg-video-nsc xserver-xorg-video-v4l xserver-xorg-video-vga
12880 xulrunner-1.9</p>
12881
12882
12883 </div>
12884 <div class="tags">
12885
12886
12887 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
12888
12889
12890 </div>
12891 </div>
12892 <div class="padding"></div>
12893
12894 <div class="entry">
12895 <div class="title">
12896 <a href="http://people.skolelinux.org/pere/blog/Automatic_upgrade_testing_from_Lenny_to_Squeeze.html">Automatic upgrade testing from Lenny to Squeeze</a>
12897 </div>
12898 <div class="date">
12899 11th June 2010
12900 </div>
12901 <div class="body">
12902 <p>The last few days I have done some upgrade testing in Debian, to
12903 see if the upgrade from Lenny to Squeeze will go smoothly. A few bugs
12904 have been discovered and reported in the process
12905 (<a href="http://bugs.debian.org/585410">#585410</a> in nagios3-cgi,
12906 <a href="http://bugs.debian.org/584879">#584879</a> already fixed in
12907 enscript and <a href="http://bugs.debian.org/584861">#584861</a> in
12908 kdebase-workspace-data), and to get a more regular testing going on, I
12909 am working on a script to automate the test.</p>
12910
12911 <p>The idea is to create a Lenny chroot and use tasksel to install a
12912 Gnome or KDE desktop installation inside the chroot before upgrading
12913 it. To ensure no services are started in the chroot, a policy-rc.d
12914 script is inserted. To make sure tasksel believe it is to install a
12915 desktop on a laptop, the tasksel tests are replaced in the chroot
12916 (only acceptable because this is a throw-away chroot).</p>
12917
12918 <p>A naive upgrade from Lenny to Squeeze using aptitude dist-upgrade
12919 currently always fail because udev refuses to upgrade with the kernel
12920 in Lenny, so to avoid that problem the file /etc/udev/kernel-upgrade
12921 is created. The bug report
12922 <a href="http://bugs.debian.org/566000">#566000</a> make me suspect
12923 this problem do not trigger in a chroot, but I touch the file anyway
12924 to make sure the upgrade go well. Testing on virtual and real
12925 hardware have failed me because of udev so far, and creating this file
12926 do the trick in such settings anyway. This is a
12927 <a href="http://www.linuxquestions.org/questions/debian-26/failed-dist-upgrade-due-to-udev-config_sysfs_deprecated-nonsense-804130/">known
12928 issue</a> and the current udev behaviour is intended by the udev
12929 maintainer because he lack the resources to rewrite udev to keep
12930 working with old kernels or something like that. I really wish the
12931 udev upstream would keep udev backwards compatible, to avoid such
12932 upgrade problem, but given that they fail to do so, I guess
12933 documenting the way out of this mess is the best option we got for
12934 Debian Squeeze.</p>
12935
12936 <p>Anyway, back to the task at hand, testing upgrades. This test
12937 script, which I call <tt>upgrade-test</tt> for now, is doing the
12938 trick:</p>
12939
12940 <blockquote><pre>
12941 #!/bin/sh
12942 set -ex
12943
12944 if [ "$1" ] ; then
12945 desktop=$1
12946 else
12947 desktop=gnome
12948 fi
12949
12950 from=lenny
12951 to=squeeze
12952
12953 exec &lt; /dev/null
12954 unset LANG
12955 mirror=http://ftp.skolelinux.org/debian
12956 tmpdir=chroot-$from-upgrade-$to-$desktop
12957 fuser -mv .
12958 debootstrap $from $tmpdir $mirror
12959 chroot $tmpdir aptitude update
12960 cat > $tmpdir/usr/sbin/policy-rc.d &lt;&lt;EOF
12961 #!/bin/sh
12962 exit 101
12963 EOF
12964 chmod a+rx $tmpdir/usr/sbin/policy-rc.d
12965 exit_cleanup() {
12966 umount $tmpdir/proc
12967 }
12968 mount -t proc proc $tmpdir/proc
12969 # Make sure proc is unmounted also on failure
12970 trap exit_cleanup EXIT INT
12971
12972 chroot $tmpdir aptitude -y install debconf-utils
12973
12974 # Make sure tasksel autoselection trigger. It need the test scripts
12975 # to return the correct answers.
12976 echo tasksel tasksel/desktop multiselect $desktop | \
12977 chroot $tmpdir debconf-set-selections
12978
12979 # Include the desktop and laptop task
12980 for test in desktop laptop ; do
12981 echo > $tmpdir/usr/lib/tasksel/tests/$test &lt;&lt;EOF
12982 #!/bin/sh
12983 exit 2
12984 EOF
12985 chmod a+rx $tmpdir/usr/lib/tasksel/tests/$test
12986 done
12987
12988 DEBIAN_FRONTEND=noninteractive
12989 DEBIAN_PRIORITY=critical
12990 export DEBIAN_FRONTEND DEBIAN_PRIORITY
12991 chroot $tmpdir tasksel --new-install
12992
12993 echo deb $mirror $to main > $tmpdir/etc/apt/sources.list
12994 chroot $tmpdir aptitude update
12995 touch $tmpdir/etc/udev/kernel-upgrade
12996 chroot $tmpdir aptitude -y dist-upgrade
12997 fuser -mv
12998 </pre></blockquote>
12999
13000 <p>I suspect it would be useful to test upgrades with both apt-get and
13001 with aptitude, but I have not had time to look at how they behave
13002 differently so far. I hope to get a cron job running to do the test
13003 regularly and post the result on the web. The Gnome upgrade currently
13004 work, while the KDE upgrade fail because of the bug in
13005 kdebase-workspace-data</p>
13006
13007 <p>I am not quite sure what kind of extract from the huge upgrade logs
13008 (KDE 167 KiB, Gnome 516 KiB) it make sense to include in this blog
13009 post, so I will refrain from trying. I can report that for Gnome,
13010 aptitude report 760 packages upgraded, 448 newly installed, 129 to
13011 remove and 1 not upgraded and 1024MB need to be downloaded while for
13012 KDE the same numbers are 702 packages upgraded, 507 newly installed,
13013 193 to remove and 0 not upgraded and 1117MB need to be downloaded</p>
13014
13015 <p>I am very happy to notice that the Gnome desktop + laptop upgrade
13016 is able to migrate to dependency based boot sequencing and parallel
13017 booting without a hitch. Was unsure if there were still bugs with
13018 packages failing to clean up their obsolete init.d script during
13019 upgrades, and no such problem seem to affect the Gnome desktop+laptop
13020 packages.</p>
13021
13022 </div>
13023 <div class="tags">
13024
13025
13026 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
13027
13028
13029 </div>
13030 </div>
13031 <div class="padding"></div>
13032
13033 <div class="entry">
13034 <div class="title">
13035 <a href="http://people.skolelinux.org/pere/blog/Upstart_or_sysvinit___as_init_d_scripts_see_it.html">Upstart or sysvinit - as init.d scripts see it</a>
13036 </div>
13037 <div class="date">
13038 6th June 2010
13039 </div>
13040 <div class="body">
13041 <p>If Debian is to migrate to upstart on Linux, I expect some init.d
13042 scripts to migrate (some of) their operations to upstart job while
13043 keeping the init.d for hurd and kfreebsd. The packages with such
13044 needs will need a way to get their init.d scripts to behave
13045 differently when used with sysvinit and with upstart. Because of
13046 this, I had a look at the environment variables set when a init.d
13047 script is running under upstart, and when it is not.</p>
13048
13049 <p>With upstart, I notice these environment variables are set when a
13050 script is started from rcS.d/ (ignoring some irrelevant ones like
13051 COLUMNS):</p>
13052
13053 <blockquote><pre>
13054 DEFAULT_RUNLEVEL=2
13055 previous=N
13056 PREVLEVEL=
13057 RUNLEVEL=
13058 runlevel=S
13059 UPSTART_EVENTS=startup
13060 UPSTART_INSTANCE=
13061 UPSTART_JOB=rc-sysinit
13062 </pre></blockquote>
13063
13064 <p>With sysvinit, these environment variables are set for the same
13065 script.</p>
13066
13067 <blockquote><pre>
13068 INIT_VERSION=sysvinit-2.88
13069 previous=N
13070 PREVLEVEL=N
13071 RUNLEVEL=S
13072 runlevel=S
13073 </pre></blockquote>
13074
13075 <p>The RUNLEVEL and PREVLEVEL environment variables passed on from
13076 sysvinit are not set by upstart. Not sure if it is intentional or not
13077 to not be compatible with sysvinit in this regard.</p>
13078
13079 <p>For scripts needing to behave differently when upstart is used,
13080 looking for the UPSTART_JOB environment variable seem to be a good
13081 choice.</p>
13082
13083 </div>
13084 <div class="tags">
13085
13086
13087 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
13088
13089
13090 </div>
13091 </div>
13092 <div class="padding"></div>
13093
13094 <div class="entry">
13095 <div class="title">
13096 <a href="http://people.skolelinux.org/pere/blog/A_manual_for_standards_wars___.html">A manual for standards wars...</a>
13097 </div>
13098 <div class="date">
13099 6th June 2010
13100 </div>
13101 <div class="body">
13102 <p>Via the
13103 <a href="http://feedproxy.google.com/~r/robweir/antic-atom/~3/QzU4RgoAGMg/weekly-links-10.html">blog
13104 of Rob Weir</a> I came across the very interesting essay named
13105 <a href="http://faculty.haas.berkeley.edu/shapiro/wars.pdf">The Art of
13106 Standards Wars</a> (PDF 25 pages). I recommend it for everyone
13107 following the standards wars of today.</p>
13108
13109 </div>
13110 <div class="tags">
13111
13112
13113 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/standard">standard</a>.
13114
13115
13116 </div>
13117 </div>
13118 <div class="padding"></div>
13119
13120 <div class="entry">
13121 <div class="title">
13122 <a href="http://people.skolelinux.org/pere/blog/Sitesummary_tip__Listing_computer_hardware_models_used_at_site.html">Sitesummary tip: Listing computer hardware models used at site</a>
13123 </div>
13124 <div class="date">
13125 3rd June 2010
13126 </div>
13127 <div class="body">
13128 <p>When using sitesummary at a site to track machines, it is possible
13129 to get a list of the machine types in use thanks to the DMI
13130 information extracted from each machine. The script to do so is
13131 included in the sitesummary package, and here is example output from
13132 the Skolelinux build servers:</p>
13133
13134 <blockquote><pre>
13135 maintainer:~# /usr/lib/sitesummary/hardware-model-summary
13136 vendor count
13137 Dell Computer Corporation 1
13138 PowerEdge 1750 1
13139 IBM 1
13140 eserver xSeries 345 -[8670M1X]- 1
13141 Intel 2
13142 [no-dmi-info] 3
13143 maintainer:~#
13144 </pre></blockquote>
13145
13146 <p>The quality of the report depend on the quality of the DMI tables
13147 provided in each machine. Here there are Intel machines without model
13148 information listed with Intel as vendor and no model, and virtual Xen
13149 machines listed as [no-dmi-info]. One can add -l as a command line
13150 option to list the individual machines.</p>
13151
13152 <p>A larger list is
13153 <a href="http://narvikskolen.no/sitesummary/">available from the the
13154 city of Narvik</a>, which uses Skolelinux on all their shools and also
13155 provide the basic sitesummary report publicly. In their report there
13156 are ~1400 machines. I know they use both Ubuntu and Skolelinux on
13157 their machines, and as sitesummary is available in both distributions,
13158 it is trivial to get all of them to report to the same central
13159 collector.</p>
13160
13161 </div>
13162 <div class="tags">
13163
13164
13165 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary</a>.
13166
13167
13168 </div>
13169 </div>
13170 <div class="padding"></div>
13171
13172 <div class="entry">
13173 <div class="title">
13174 <a href="http://people.skolelinux.org/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>
13175 </div>
13176 <div class="date">
13177 1st June 2010
13178 </div>
13179 <div class="body">
13180 <p>It is strange to watch how a bug in Debian causing KDM to fail to
13181 start at boot when an NVidia video card is used is handled. The
13182 problem seem to be that the nvidia X.org driver uses a long time to
13183 initialize, and this duration is longer than kdm is configured to
13184 wait.</p>
13185
13186 <p>I came across two bugs related to this issue,
13187 <a href="http://bugs.debian.org/583312">#583312</a> initially filed
13188 against initscripts and passed on to nvidia-glx when it became obvious
13189 that the nvidia drivers were involved, and
13190 <a href="http://bugs.debian.org/524751">#524751</a> initially filed against
13191 kdm and passed on to src:nvidia-graphics-drivers for unknown reasons.</p>
13192
13193 <p>To me, it seem that no-one is interested in actually solving the
13194 problem nvidia video card owners experience and make sure the Debian
13195 distribution work out of the box for these users. The nvidia driver
13196 maintainers expect kdm to be set up to wait longer, while kdm expect
13197 the nvidia driver maintainers to fix the driver to start faster, and
13198 while they wait for each other I guess the users end up switching to a
13199 distribution that work for them. I have no idea what the solution is,
13200 but I am pretty sure that waiting for each other is not it.</p>
13201
13202 <p>I wonder why we end up handling bugs this way.</p>
13203
13204 </div>
13205 <div class="tags">
13206
13207
13208 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
13209
13210
13211 </div>
13212 </div>
13213 <div class="padding"></div>
13214
13215 <div class="entry">
13216 <div class="title">
13217 <a href="http://people.skolelinux.org/pere/blog/Parallellized_boot_seem_to_hold_up_well_in_Debian_testing.html">Parallellized boot seem to hold up well in Debian/testing</a>
13218 </div>
13219 <div class="date">
13220 27th May 2010
13221 </div>
13222 <div class="body">
13223 <p>A few days ago, parallel booting was enabled in Debian/testing.
13224 The feature seem to hold up pretty well, but three fairly serious
13225 issues are known and should be solved:
13226
13227 <p><ul>
13228
13229 <li>The wicd package seen to
13230 <a href="http://bugs.debian.org/508289">break NFS mounting</a> and
13231 <a href="http://bugs.debian.org/581586">network setup</a> when
13232 parallel booting is enabled. No idea why, but the wicd maintainer
13233 seem to be on the case.</li>
13234
13235 <li>The nvidia X driver seem to
13236 <a href="http://bugs.debian.org/583312">have a race condition</a>
13237 triggered more easily when parallel booting is in effect. The
13238 maintainer is on the case.</li>
13239
13240 <li>The sysv-rc package fail to properly enable dependency based boot
13241 sequencing (the shutdown is broken) when old file-rc users
13242 <a href="http://bugs.debian.org/575080">try to switch back</a> to
13243 sysv-rc. One way to solve it would be for file-rc to create
13244 /etc/init.d/.legacy-bootordering, and another is to try to make
13245 sysv-rc more robust. Will investigate some more and probably upload a
13246 workaround in sysv-rc to help those trying to move from file-rc to
13247 sysv-rc get a working shutdown.</li>
13248
13249 </ul></p>
13250
13251 <p>All in all not many surprising issues, and all of them seem
13252 solvable before Squeeze is released. In addition to these there are
13253 some packages with bugs in their dependencies and run level settings,
13254 which I expect will be fixed in a reasonable time span.</p>
13255
13256 <p>If you report any problems with dependencies in init.d scripts to
13257 the BTS, please usertag the report to get it to show up at
13258 <a href="http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=initscripts-ng-devel@lists.alioth.debian.org">the
13259 list of usertagged bugs related to this</a>.</p>
13260
13261 <p>Update: Correct bug number to file-rc issue.</p>
13262
13263 </div>
13264 <div class="tags">
13265
13266
13267 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
13268
13269
13270 </div>
13271 </div>
13272 <div class="padding"></div>
13273
13274 <div class="entry">
13275 <div class="title">
13276 <a href="http://people.skolelinux.org/pere/blog/More_flexible_firmware_handling_in_debian_installer.html">More flexible firmware handling in debian-installer</a>
13277 </div>
13278 <div class="date">
13279 22nd May 2010
13280 </div>
13281 <div class="body">
13282 <p>After a long break from debian-installer development, I finally
13283 found time today to return to the project. Having to spend less time
13284 working dependency based boot in debian, as it is almost complete now,
13285 definitely helped freeing some time.</p>
13286
13287 <p>A while back, I ran into a problem while working on Debian Edu. We
13288 include some firmware packages on the Debian Edu CDs, those needed to
13289 get disk and network controllers working. Without having these
13290 firmware packages available during installation, it is impossible to
13291 install Debian Edu on the given machine, and because our target group
13292 are non-technical people, asking them to provide firmware packages on
13293 an external medium is a support pain. Initially, I expected it to be
13294 enough to include the firmware packages on the CD to get
13295 debian-installer to find and use them. This proved to be wrong.
13296 Next, I hoped it was enough to symlink the relevant firmware packages
13297 to some useful location on the CD (tried /cdrom/ and
13298 /cdrom/firmware/). This also proved to not work, and at this point I
13299 found time to look at the debian-installer code to figure out what was
13300 going to work.</p>
13301
13302 <p>The firmware loading code is in the hw-detect package, and a closer
13303 look revealed that it would only look for firmware packages outside
13304 the installation media, so the CD was never checked for firmware
13305 packages. It would only check USB sticks, floppies and other
13306 "external" media devices. Today I changed it to also look in the
13307 /cdrom/firmware/ directory on the mounted CD or DVD, which should
13308 solve the problem I ran into with Debian edu. I also changed it to
13309 look in /firmware/, to make sure the installer also find firmware
13310 provided in the initrd when booting the installer via PXE, to allow us
13311 to provide the same feature in the PXE setup included in Debian
13312 Edu.</p>
13313
13314 <p>To make sure firmware deb packages with a license questions are not
13315 activated without asking if the license is accepted, I extended
13316 hw-detect to look for preinst scripts in the firmware packages, and
13317 run these before activating the firmware during installation. The
13318 license question is asked using debconf in the preinst, so this should
13319 solve the issue for the firmware packages I have looked at so far.</p>
13320
13321 <p>If you want to discuss the details of these features, please
13322 contact us on debian-boot@lists.debian.org.</p>
13323
13324 </div>
13325 <div class="tags">
13326
13327
13328 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
13329
13330
13331 </div>
13332 </div>
13333 <div class="padding"></div>
13334
13335 <div class="entry">
13336 <div class="title">
13337 <a href="http://people.skolelinux.org/pere/blog/Parallellized_boot_is_now_the_default_in_Debian_unstable.html">Parallellized boot is now the default in Debian/unstable</a>
13338 </div>
13339 <div class="date">
13340 14th May 2010
13341 </div>
13342 <div class="body">
13343 <p>Since this evening, parallel booting is the default in
13344 Debian/unstable for machines using dependency based boot sequencing.
13345 Apparently the testing of concurrent booting has been wider than
13346 expected, if I am to believe the
13347 <a href="http://lists.debian.org/debian-devel/2010/05/msg00122.html">input
13348 on debian-devel@</a>, and I concluded a few days ago to move forward
13349 with the feature this weekend, to give us some time to detect any
13350 remaining problems before Squeeze is frozen. If serious problems are
13351 detected, it is simple to change the default back to sequential boot.
13352 The upload of the new sysvinit package also activate a new upstream
13353 version.</p>
13354
13355 More information about
13356 <a href="http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot">dependency
13357 based boot sequencing</a> is available from the Debian wiki. It is
13358 currently possible to disable parallel booting when one run into
13359 problems caused by it, by adding this line to /etc/default/rcS:</p>
13360
13361 <blockquote><pre>
13362 CONCURRENCY=none
13363 </pre></blockquote>
13364
13365 <p>If you report any problems with dependencies in init.d scripts to
13366 the BTS, please usertag the report to get it to show up at
13367 <a href="http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=initscripts-ng-devel@lists.alioth.debian.org">the
13368 list of usertagged bugs related to this</a>.</p>
13369
13370 </div>
13371 <div class="tags">
13372
13373
13374 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
13375
13376
13377 </div>
13378 </div>
13379 <div class="padding"></div>
13380
13381 <div class="entry">
13382 <div class="title">
13383 <a href="http://people.skolelinux.org/pere/blog/Sitesummary_tip__Listing_MAC_address_of_all_clients.html">Sitesummary tip: Listing MAC address of all clients</a>
13384 </div>
13385 <div class="date">
13386 14th May 2010
13387 </div>
13388 <div class="body">
13389 <p>In the recent Debian Edu versions, the
13390 <a href="http://wiki.debian.org/DebianEdu/HowTo/SiteSummary">sitesummary
13391 system</a> is used to keep track of the machines in the school
13392 network. Each machine will automatically report its status to the
13393 central server after boot and once per night. The network setup is
13394 also reported, and using this information it is possible to get the
13395 MAC address of all network interfaces in the machines. This is useful
13396 to update the DHCP configuration.</p>
13397
13398 <p>To give some idea how to use sitesummary, here is a one-liner to
13399 ist all MAC addresses of all machines reporting to sitesummary. Run
13400 this on the collector host:</p>
13401
13402 <blockquote><pre>
13403 perl -MSiteSummary -e 'for_all_hosts(sub { print join(" ", get_macaddresses(shift)), "\n"; });'
13404 </pre></blockquote>
13405
13406 <p>This will list all MAC addresses assosiated with all machine, one
13407 line per machine and with space between the MAC addresses.</p>
13408
13409 <p>To allow system administrators easier job at adding static DHCP
13410 addresses for hosts, it would be possible to extend this to fetch
13411 machine information from sitesummary and update the DHCP and DNS
13412 tables in LDAP using this information. Such tool is unfortunately not
13413 written yet.</p>
13414
13415 </div>
13416 <div class="tags">
13417
13418
13419 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary</a>.
13420
13421
13422 </div>
13423 </div>
13424 <div class="padding"></div>
13425
13426 <div class="entry">
13427 <div class="title">
13428 <a href="http://people.skolelinux.org/pere/blog/systemd__an_interesting_alternative_to_upstart.html">systemd, an interesting alternative to upstart</a>
13429 </div>
13430 <div class="date">
13431 13th May 2010
13432 </div>
13433 <div class="body">
13434 <p>The last few days a new boot system called
13435 <a href="http://www.freedesktop.org/wiki/Software/systemd">systemd</a>
13436 has been
13437 <a href="http://0pointer.de/blog/projects/systemd.html">introduced</a>
13438
13439 to the free software world. I have not yet had time to play around
13440 with it, but it seem to be a very interesting alternative to
13441 <a href="http://upstart.ubuntu.com/">upstart</a>, and might prove to be
13442 a good alternative for Debian when we are able to switch to an event
13443 based boot system. Tollef is
13444 <a href="http://bugs.debian.org/580814">in the process</a> of getting
13445 systemd into Debian, and I look forward to seeing how well it work. I
13446 like the fact that systemd handles init.d scripts with dependency
13447 information natively, allowing them to run in parallel where upstart
13448 at the moment do not.</p>
13449
13450 <p>Unfortunately do systemd have the same problem as upstart regarding
13451 platform support. It only work on recent Linux kernels, and also need
13452 some new kernel features enabled to function properly. This means
13453 kFreeBSD and Hurd ports of Debian will need a port or a different boot
13454 system. Not sure how that will be handled if systemd proves to be the
13455 way forward.</p>
13456
13457 <p>In the mean time, based on the
13458 <a href="http://lists.debian.org/debian-devel/2010/05/msg00122.html">input
13459 on debian-devel@</a> regarding parallel booting in Debian, I have
13460 decided to enable full parallel booting as the default in Debian as
13461 soon as possible (probably this weekend or early next week), to see if
13462 there are any remaining serious bugs in the init.d dependencies. A
13463 new version of the sysvinit package implementing this change is
13464 already in experimental. If all go well, Squeeze will be released
13465 with parallel booting enabled by default.</p>
13466
13467 </div>
13468 <div class="tags">
13469
13470
13471 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
13472
13473
13474 </div>
13475 </div>
13476 <div class="padding"></div>
13477
13478 <div class="entry">
13479 <div class="title">
13480 <a href="http://people.skolelinux.org/pere/blog/Parallellizing_the_boot_in_Debian_Squeeze___ready_for_wider_testing.html">Parallellizing the boot in Debian Squeeze - ready for wider testing</a>
13481 </div>
13482 <div class="date">
13483 6th May 2010
13484 </div>
13485 <div class="body">
13486 <p>These days, the init.d script dependencies in Squeeze are quite
13487 complete, so complete that it is actually possible to run all the
13488 init.d scripts in parallell based on these dependencies. If you want
13489 to test your Squeeze system, make sure
13490 <a href="http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot">dependency
13491 based boot sequencing</a> is enabled, and add this line to
13492 /etc/default/rcS:</p>
13493
13494 <blockquote><pre>
13495 CONCURRENCY=makefile
13496 </pre></blockquote>
13497
13498 <p>That is it. It will cause sysv-rc to use the startpar tool to run
13499 scripts in parallel using the dependency information stored in
13500 /etc/init.d/.depend.boot, /etc/init.d/.depend.start and
13501 /etc/init.d/.depend.stop to order the scripts. Startpar is configured
13502 to try to start the kdm and gdm scripts as early as possible, and will
13503 start the facilities required by kdm or gdm as early as possible to
13504 make this happen.</p>
13505
13506 <p>Give it a try, and see if you like the result. If some services
13507 fail to start properly, it is most likely because they have incomplete
13508 init.d script dependencies in their startup script (or some of their
13509 dependent scripts have incomplete dependencies). Report bugs and get
13510 the package maintainers to fix it. :)</p>
13511
13512 <p>Running scripts in parallel could be the default in Debian when we
13513 manage to get the init.d script dependencies complete and correct. I
13514 expect we will get there in Squeeze+1, if we get manage to test and
13515 fix the remaining issues.</p>
13516
13517 <p>If you report any problems with dependencies in init.d scripts to
13518 the BTS, please usertag the report to get it to show up at
13519 <a href="http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=initscripts-ng-devel@lists.alioth.debian.org">the
13520 list of usertagged bugs related to this</a>.</p>
13521
13522 </div>
13523 <div class="tags">
13524
13525
13526 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
13527
13528
13529 </div>
13530 </div>
13531 <div class="padding"></div>
13532
13533 <div class="entry">
13534 <div class="title">
13535 <a href="http://people.skolelinux.org/pere/blog/Debian_has_switched_to_dependency_based_boot_sequencing.html">Debian has switched to dependency based boot sequencing</a>
13536 </div>
13537 <div class="date">
13538 27th July 2009
13539 </div>
13540 <div class="body">
13541 <p>Since this evening, with the upload of sysvinit version 2.87dsf-2,
13542 and the upload of insserv version 1.12.0-10 yesterday, Debian unstable
13543 have been migrated to using dependency based boot sequencing. This
13544 conclude work me and others have been doing for the last three days.
13545 It feels great to see this finally part of the default Debian
13546 installation. Now we just need to weed out the last few problems that
13547 are bound to show up, to get everything ready for Squeeze.</p>
13548
13549 <p>The next step is migrating /sbin/init from sysvinit to upstart, and
13550 fixing the more fundamental problem of handing the event based
13551 non-predictable kernel in the early boot.</p>
13552
13553 </div>
13554 <div class="tags">
13555
13556
13557 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
13558
13559
13560 </div>
13561 </div>
13562 <div class="padding"></div>
13563
13564 <div class="entry">
13565 <div class="title">
13566 <a href="http://people.skolelinux.org/pere/blog/Taking_over_sysvinit_development.html">Taking over sysvinit development</a>
13567 </div>
13568 <div class="date">
13569 22nd July 2009
13570 </div>
13571 <div class="body">
13572 <p>After several years of frustration with the lack of activity from
13573 the existing sysvinit upstream developer, I decided a few weeks ago to
13574 take over the package and become the new upstream. The number of
13575 patches to track for the Debian package was becoming a burden, and the
13576 lack of synchronization between the distribution made it hard to keep
13577 the package up to date.</p>
13578
13579 <p>On the new sysvinit team is the SuSe maintainer Dr. Werner Fink,
13580 and my Debian co-maintainer Kel Modderman. About 10 days ago, I made
13581 a new upstream tarball with version number 2.87dsf (for Debian, SuSe
13582 and Fedora), based on the patches currently in use in these
13583 distributions. We Debian maintainers plan to move to this tarball as
13584 the new upstream as soon as we find time to do the merge. Since the
13585 new tarball was created, we agreed with Werner at SuSe to make a new
13586 upstream project at <a href="http://savannah.nongnu.org/">Savannah</a>, and continue
13587 development there. The project is registered and currently waiting
13588 for approval by the Savannah administrators, and as soon as it is
13589 approved, we will import the old versions from svn and continue
13590 working on the future release.</p>
13591
13592 <p>It is a bit ironic that this is done now, when some of the involved
13593 distributions are moving to upstart as a syvinit replacement.</p>
13594
13595 </div>
13596 <div class="tags">
13597
13598
13599 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
13600
13601
13602 </div>
13603 </div>
13604 <div class="padding"></div>
13605
13606 <div class="entry">
13607 <div class="title">
13608 <a href="http://people.skolelinux.org/pere/blog/Debian_boots_quicker_and_quicker.html">Debian boots quicker and quicker</a>
13609 </div>
13610 <div class="date">
13611 24th June 2009
13612 </div>
13613 <div class="body">
13614 <p>I spent Monday and tuesday this week in London with a lot of the
13615 people involved in the boot system on Debian and Ubuntu, to see if we
13616 could find more ways to speed up the boot system. This was an Ubuntu
13617 funded
13618 <a href="https://wiki.ubuntu.com/FoundationsTeam/BootPerformance/DebianUbuntuSprint">developer
13619 gathering</a>. It was quite productive. We also discussed the future
13620 of boot systems, and ways to handle the increasing number of boot
13621 issues introduced by the Linux kernel becoming more and more
13622 asynchronous and event base. The Ubuntu approach using udev and
13623 upstart might be a good way forward. Time will show.</p>
13624
13625 <p>Anyway, there are a few ways at the moment to speed up the boot
13626 process in Debian. All of these should be applied to get a quick
13627 boot:</p>
13628
13629 <ul>
13630
13631 <li>Use dash as /bin/sh.</li>
13632
13633 <li>Disable the init.d/hwclock*.sh scripts and make sure the hardware
13634 clock is in UTC.</li>
13635
13636 <li>Install and activate the insserv package to enable
13637 <a href="http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot">dependency
13638 based boot sequencing</a>, and enable concurrent booting.</li>
13639
13640 </ul>
13641
13642 These points are based on the Google summer of code work done by
13643 <a href="http://initscripts-ng.alioth.debian.org/soc2006-bootsystem/">Carlos
13644 Villegas</a>.
13645
13646 <p>Support for makefile-style concurrency during boot was uploaded to
13647 unstable yesterday. When we tested it, we were able to cut 6 seconds
13648 from the boot sequence. It depend on very correct dependency
13649 declaration in all init.d scripts, so I expect us to find edge cases
13650 where the dependences in some scripts are slightly wrong when we start
13651 using this.</p>
13652
13653 <p>On our IRC channel for this effort, #pkg-sysvinit, a new idea was
13654 introduced by Raphael Geissert today, one that could affect the
13655 startup speed as well. Instead of starting some scripts concurrently
13656 from rcS.d/ and another set of scripts from rc2.d/, it would be
13657 possible to run a of them in the same process. A quick way to test
13658 this would be to enable insserv and run 'mv /etc/rc2.d/S* /etc/rcS.d/;
13659 insserv'. Will need to test if that work. :)</p>
13660
13661 </div>
13662 <div class="tags">
13663
13664
13665 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
13666
13667
13668 </div>
13669 </div>
13670 <div class="padding"></div>
13671
13672 <div class="entry">
13673 <div class="title">
13674 <a href="http://people.skolelinux.org/pere/blog/BSAs_p_stander_om_piratkopiering_m_ter_motstand.html">BSAs påstander om piratkopiering møter motstand</a>
13675 </div>
13676 <div class="date">
13677 17th May 2009
13678 </div>
13679 <div class="body">
13680 <p>Hvert år de siste årene har BSA, lobbyfronten til de store
13681 programvareselskapene som Microsoft og Apple, publisert en rapport der
13682 de gjetter på hvor mye piratkopiering påfører i tapte inntekter i
13683 ulike land rundt om i verden. Resultatene er tendensiøse. For noen
13684 dager siden kom
13685 <a href="http://global.bsa.org/globalpiracy2008/studies/globalpiracy2008.pdf">siste
13686 rapport</a>, og det er flere kritiske kommentarer publisert de siste
13687 dagene. Et spesielt interessant kommentar fra Sverige,
13688 <a href="http://www.idg.se/2.1085/1.229795/bsa-hoftade-sverigesiffror">BSA
13689 höftade Sverigesiffror</a>, oppsummeres slik:</p>
13690
13691 <blockquote>
13692 I sin senaste rapport slår BSA fast att 25 procent av all mjukvara i
13693 Sverige är piratkopierad. Det utan att ha pratat med ett enda svenskt
13694 företag. "Man bör nog kanske inte se de här siffrorna som helt
13695 exakta", säger BSAs Sverigechef John Hugosson.
13696 </blockquote>
13697
13698 <p>Mon tro om de er like metodiske når de gjetter på andelen piratkopiering i Norge? To andre kommentarer er <a
13699 href="http://www.vnunet.com/vnunet/comment/2242134/bsa-piracy-figures-shot-reality">BSA
13700 piracy figures need a shot of reality</a> og <a
13701 href="http://www.michaelgeist.ca/content/view/3958/125/">Does The WIPO
13702 Copyright Treaty Work?</a></p>
13703
13704 <p>Fant lenkene via <a
13705 href="http://tech.slashdot.org/article.pl?sid=09/05/17/1632242">oppslag
13706 på Slashdot</a>.</p>
13707
13708 </div>
13709 <div class="tags">
13710
13711
13712 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling</a>, <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>, <a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett</a>, <a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern</a>.
13713
13714
13715 </div>
13716 </div>
13717 <div class="padding"></div>
13718
13719 <div class="entry">
13720 <div class="title">
13721 <a href="http://people.skolelinux.org/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>
13722 </div>
13723 <div class="date">
13724 7th May 2009
13725 </div>
13726 <div class="body">
13727 <p>Kom over
13728 <a href="http://news.cnet.com/8301-13505_3-10216873-16.html">interessante
13729 tall</a> fra IDG om utviklingen av linuxservermarkedet. Fikk meg til
13730 å tenke på antall tjenermaskiner ved Universitetet i Oslo der jeg
13731 jobber til daglig. En rask opptelling forteller meg at vi har 490
13732 (61%) fysiske unix-tjener (mest linux men også noen solaris) og 196
13733 (25%) windowstjenere, samt 112 (14%) virtuelle unix-tjenere. Med den
13734 bakgrunnskunnskapen kan jeg godt tro at IDG er inne på noe.</p>
13735
13736 </div>
13737 <div class="tags">
13738
13739
13740 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
13741
13742
13743 </div>
13744 </div>
13745 <div class="padding"></div>
13746
13747 <div class="entry">
13748 <div class="title">
13749 <a href="http://people.skolelinux.org/pere/blog/Kryptert_harddisk___naturligvis.html">Kryptert harddisk - naturligvis</a>
13750 </div>
13751 <div class="date">
13752 2nd May 2009
13753 </div>
13754 <div class="body">
13755 <p><a href="http://www.dagensit.no/trender/article1658676.ece">Dagens
13756 IT melder</a> at Intel hevder at det er dyrt å miste en datamaskin,
13757 når en tar tap av arbeidstid, fortrolige dokumenter,
13758 personopplysninger og alt annet det innebærer. Det er ingen tvil om
13759 at det er en kostbar affære å miste sin datamaskin, og det er årsaken
13760 til at jeg har kryptert harddisken på både kontormaskinen og min
13761 bærbare. Begge inneholder personopplysninger jeg ikke ønsker skal
13762 komme på avveie, den første informasjon relatert til jobben min ved
13763 Universitetet i Oslo, og den andre relatert til blant annet
13764 foreningsarbeide. Kryptering av diskene gjør at det er lite
13765 sannsynlig at dophoder som kan finne på å rappe maskinene får noe ut
13766 av dem. Maskinene låses automatisk etter noen minutter uten bruk,
13767 og en reboot vil gjøre at de ber om passord før de vil starte opp.
13768 Jeg bruker Debian på begge maskinene, og installasjonssystemet der
13769 gjør det trivielt å sette opp krypterte disker. Jeg har LVM på toppen
13770 av krypterte partisjoner, slik at alt av datapartisjoner er kryptert.
13771 Jeg anbefaler alle å kryptere diskene på sine bærbare. Kostnaden når
13772 det er gjort slik jeg gjør det er minimale, og gevinstene er
13773 betydelige. En bør dog passe på passordet. Hvis det går tapt, må
13774 maskinen reinstalleres og alt er tapt.</p>
13775
13776 <p>Krypteringen vil ikke stoppe kompetente angripere som f.eks. kjøler
13777 ned minnebrikkene før maskinen rebootes med programvare for å hente ut
13778 krypteringsnøklene. Kostnaden med å forsvare seg mot slike angripere
13779 er for min del høyere enn gevinsten. Jeg tror oddsene for at
13780 f.eks. etteretningsorganisasjoner har glede av å titte på mine
13781 maskiner er minimale, og ulempene jeg ville oppnå ved å forsøke å
13782 gjøre det vanskeligere for angripere med kompetanse og ressurser er
13783 betydelige.</p>
13784
13785 </div>
13786 <div class="tags">
13787
13788
13789 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
13790
13791
13792 </div>
13793 </div>
13794 <div class="padding"></div>
13795
13796 <div class="entry">
13797 <div class="title">
13798 <a href="http://people.skolelinux.org/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>
13799 </div>
13800 <div class="date">
13801 2nd May 2009
13802 </div>
13803 <div class="body">
13804 <p>There are two software projects that have had huge influence on the
13805 quality of free software, and I wanted to mention both in case someone
13806 do not yet know them.</p>
13807
13808 <p>The first one is <a href="http://valgrind.org/">valgrind</a>, a
13809 tool to detect and expose errors in the memory handling of programs.
13810 It is easy to use, all one need to do is to run 'valgrind program',
13811 and it will report any problems on stdout. It is even better if the
13812 program include debug information. With debug information, it is able
13813 to report the source file name and line number where the problem
13814 occurs. It can report things like 'reading past memory block in file
13815 X line N, the memory block was allocated in file Y, line M', and
13816 'using uninitialised value in control logic'. This tool has made it
13817 trivial to investigate reproducible crash bugs in programs, and have
13818 reduced the number of this kind of bugs in free software a lot.
13819
13820 <p>The second one is
13821 <a href="http://en.wikipedia.org/wiki/Coverity">Coverity</a> which is
13822 a source code checker. It is able to process the source of a program
13823 and find problems in the logic without running the program. It
13824 started out as the Stanford Checker and became well known when it was
13825 used to find bugs in the Linux kernel. It is now a commercial tool
13826 and the company behind it is running
13827 <a href="http://www.scan.coverity.com/">a community service</a> for the
13828 free software community, where a lot of free software projects get
13829 their source checked for free. Several thousand defects have been
13830 found and fixed so far. It can find errors like 'lock L taken in file
13831 X line N is never released if exiting in line M', or 'the code in file
13832 Y lines O to P can never be executed'. The projects included in the
13833 community service project have managed to get rid of a lot of
13834 reliability problems thanks to Coverity.</p>
13835
13836 <p>I believe tools like this, that are able to automatically find
13837 errors in the source, are vital to improve the quality of software and
13838 make sure we can get rid of the crashing and failing software we are
13839 surrounded by today.</p>
13840
13841 </div>
13842 <div class="tags">
13843
13844
13845 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
13846
13847
13848 </div>
13849 </div>
13850 <div class="padding"></div>
13851
13852 <div class="entry">
13853 <div class="title">
13854 <a href="http://people.skolelinux.org/pere/blog/No_patch_is_not_better_than_a_useless_patch.html">No patch is not better than a useless patch</a>
13855 </div>
13856 <div class="date">
13857 28th April 2009
13858 </div>
13859 <div class="body">
13860 <p>Julien Blache
13861 <a href="http://blog.technologeek.org/2009/04/12/214">claim that no
13862 patch is better than a useless patch</a>. I completely disagree, as a
13863 patch allow one to discuss a concrete and proposed solution, and also
13864 prove that the issue at hand is important enough for someone to spent
13865 time on fixing it. No patch do not provide any of these positive
13866 properties.</p>
13867
13868 </div>
13869 <div class="tags">
13870
13871
13872 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
13873
13874
13875 </div>
13876 </div>
13877 <div class="padding"></div>
13878
13879 <div class="entry">
13880 <div class="title">
13881 <a href="http://people.skolelinux.org/pere/blog/Standardize_on_protocols_and_formats__not_vendors_and_applications.html">Standardize on protocols and formats, not vendors and applications</a>
13882 </div>
13883 <div class="date">
13884 30th March 2009
13885 </div>
13886 <div class="body">
13887 <p>Where I work at the University of Oslo, one decision stand out as a
13888 very good one to form a long lived computer infrastructure. It is the
13889 simple one, lost by many in todays computer industry: Standardize on
13890 open network protocols and open exchange/storage formats, not applications.
13891 Applications come and go, while protocols and files tend to stay, and
13892 thus one want to make it easy to change application and vendor, while
13893 avoiding conversion costs and locking users to a specific platform or
13894 application.</p>
13895
13896 <p>This approach make it possible to replace the client applications
13897 independently of the server applications. One can even allow users to
13898 use several different applications as long as they handle the selected
13899 protocol and format. In the normal case, only one client application
13900 is recommended and users only get help if they choose to use this
13901 application, but those that want to deviate from the easy path are not
13902 blocked from doing so.</p>
13903
13904 <p>It also allow us to replace the server side without forcing the
13905 users to replace their applications, and thus allow us to select the
13906 best server implementation at any moment, when scale and resouce
13907 requirements change.</p>
13908
13909 <p>I strongly recommend standardizing - on open network protocols and
13910 open formats, but I would never recommend standardizing on a single
13911 application that do not use open network protocol or open formats.</p>
13912
13913 </div>
13914 <div class="tags">
13915
13916
13917 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>, <a href="http://people.skolelinux.org/pere/blog/tags/standard">standard</a>.
13918
13919
13920 </div>
13921 </div>
13922 <div class="padding"></div>
13923
13924 <div class="entry">
13925 <div class="title">
13926 <a href="http://people.skolelinux.org/pere/blog/Returning_from_Skolelinux_developer_gathering.html">Returning from Skolelinux developer gathering</a>
13927 </div>
13928 <div class="date">
13929 29th March 2009
13930 </div>
13931 <div class="body">
13932 <p>I'm sitting on the train going home from this weekends Debian
13933 Edu/Skolelinux development gathering. I got a bit done tuning the
13934 desktop, and looked into the dynamic service location protocol
13935 implementation avahi. It look like it could be useful for us. Almost
13936 30 people participated, and I believe it was a great environment to
13937 get to know the Skolelinux system. Walter Bender, involved in the
13938 development of the Sugar educational platform, presented his stuff and
13939 also helped me improve my OLPC installation. He also showed me that
13940 his Turtle Art application can be used in standalone mode, and we
13941 agreed that I would help getting it packaged for Debian. As a
13942 standalone application it would be great for Debian Edu. We also
13943 tried to get the video conferencing working with two OLPCs, but that
13944 proved to be too hard for us. The application seem to need more work
13945 before it is ready for me. I look forward to getting home and relax
13946 now. :)</p>
13947
13948 </div>
13949 <div class="tags">
13950
13951
13952 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
13953
13954
13955 </div>
13956 </div>
13957 <div class="padding"></div>
13958
13959 <div class="entry">
13960 <div class="title">
13961 <a href="http://people.skolelinux.org/pere/blog/Time_for_new__LDAP_schemas_replacing_RFC_2307_.html">Time for new LDAP schemas replacing RFC 2307?</a>
13962 </div>
13963 <div class="date">
13964 29th March 2009
13965 </div>
13966 <div class="body">
13967 <p>The state of standardized LDAP schemas on Linux is far from
13968 optimal. There is RFC 2307 documenting one way to store NIS maps in
13969 LDAP, and a modified version of this normally called RFC 2307bis, with
13970 some modifications to be compatible with Active Directory. The RFC
13971 specification handle the content of a lot of system databases, but do
13972 not handle DNS zones and DHCP configuration.</p>
13973
13974 <p>In <a href="http://www.skolelinux.org/">Debian Edu/Skolelinux</a>,
13975 we would like to store information about users, SMB clients/hosts,
13976 filegroups, netgroups (users and hosts), DHCP and DNS configuration,
13977 and LTSP configuration in LDAP. These objects have a lot in common,
13978 but with the current LDAP schemas it is not possible to have one
13979 object per entity. For example, one need to have at least three LDAP
13980 objects for a given computer, one with the SMB related stuff, one with
13981 DNS information and another with DHCP information. The schemas
13982 provided for DNS and DHCP are impossible to combine into one LDAP
13983 object. In addition, it is impossible to implement quick queries for
13984 netgroup membership, because of the way NIS triples are implemented.
13985 It just do not scale. I believe it is time for a few RFC
13986 specifications to cleam up this mess.</p>
13987
13988 <p>I would like to have one LDAP object representing each computer in
13989 the network, and this object can then keep the SMB (ie host key), DHCP
13990 (mac address/name) and DNS (name/IP address) settings in one place.
13991 It need to be efficently stored to make sure it scale well.</p>
13992
13993 <p>I would also like to have a quick way to map from a user or
13994 computer and to the net group this user or computer is a member.</p>
13995
13996 <p>Active Directory have done a better job than unix heads like myself
13997 in this regard, and the unix side need to catch up. Time to start a
13998 new IETF work group?</p>
13999
14000 </div>
14001 <div class="tags">
14002
14003
14004 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.
14005
14006
14007 </div>
14008 </div>
14009 <div class="padding"></div>
14010
14011 <div class="entry">
14012 <div class="title">
14013 <a href="http://people.skolelinux.org/pere/blog/Endelig_er_Debian_Lenny_gitt_ut.html">Endelig er Debian Lenny gitt ut</a>
14014 </div>
14015 <div class="date">
14016 15th February 2009
14017 </div>
14018 <div class="body">
14019 <p>Endelig er <a href="http://www.debian.org/">Debian</a>
14020 <a href="http://www.debian.org/News/2009/20090214">Lenny</a> gitt ut.
14021 Et langt steg videre for Debian-prosjektet, og en rekke nye
14022 programpakker blir nå tilgjengelig for de av oss som bruker den
14023 stabile utgaven av Debian. Neste steg er nå å få
14024 <a href="http://www.skolelinux.org/">Skolelinux</a> /
14025 <a href="http://wiki.debian.org/DebianEdu/">Debian Edu</a> ferdig
14026 oppdatert for den nye utgaven, slik at en oppdatert versjon kan
14027 slippes løs på skolene. Takk til alle debian-utviklerne som har
14028 gjort dette mulig. Endelig er f.eks. fungerende avhengighetsstyrt
14029 bootsekvens tilgjengelig i stabil utgave, vha pakken
14030 <tt>insserv</tt>.</p>
14031
14032 </div>
14033 <div class="tags">
14034
14035
14036 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>.
14037
14038
14039 </div>
14040 </div>
14041 <div class="padding"></div>
14042
14043 <div class="entry">
14044 <div class="title">
14045 <a href="http://people.skolelinux.org/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>
14046 </div>
14047 <div class="date">
14048 7th December 2008
14049 </div>
14050 <div class="body">
14051 <p>This weekend we had a small developer gathering for Debian Edu in
14052 Oslo. Most of Saturday was used for the general assemly for the
14053 member organization, but the rest of the weekend I used to tune the
14054 LTSP installation. LTSP now work out of the box on the 10-network.
14055 Acer Aspire One proved to be a very nice thin client, with both
14056 screen, mouse and keybard in a small box. Was working on getting the
14057 diskless workstation setup configured out of the box, but did not
14058 finish it before the weekend was up.</p>
14059
14060 <p>Did not find time to look at the 4 VGA cards in one box we got from
14061 the Brazilian group, so that will have to wait for the next
14062 development gathering. Would love to have the Debian Edu installer
14063 automatically detect and configure a multiseat setup when it find one
14064 of these cards.</p>
14065
14066 </div>
14067 <div class="tags">
14068
14069
14070 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp</a>.
14071
14072
14073 </div>
14074 </div>
14075 <div class="padding"></div>
14076
14077 <div class="entry">
14078 <div class="title">
14079 <a href="http://people.skolelinux.org/pere/blog/The_sorry_state_of_multimedia_browser_plugins_in_Debian.html">The sorry state of multimedia browser plugins in Debian</a>
14080 </div>
14081 <div class="date">
14082 25th November 2008
14083 </div>
14084 <div class="body">
14085 <p>Recently I have spent some time evaluating the multimedia browser
14086 plugins available in Debian Lenny, to see which one we should use by
14087 default in Debian Edu. We need an embedded video playing plugin with
14088 control buttons to pause or stop the video, and capable of streaming
14089 all the multimedia content available on the web. The test results and
14090 notes are available on
14091 <a href="http://wiki.debian.org/DebianEdu/BrowserMultimedia">the
14092 Debian wiki</a>. I was surprised how few of the plugins are able to
14093 fill this need. My personal video player favorite, VLC, has a really
14094 bad plugin which fail on a lot of the test pages. A lot of the MIME
14095 types I would expect to work with any free software player (like
14096 video/ogg), just do not work. And simple formats like the
14097 audio/x-mplegurl format (m3u playlists), just isn't supported by the
14098 totem and vlc plugins. I hope the situation will improve soon. No
14099 wonder sites use the proprietary Adobe flash to play video.</p>
14100
14101 <p>For Lenny, we seem to end up with the mplayer plugin. It seem to
14102 be the only one fitting our needs. :/</p>
14103
14104 </div>
14105 <div class="tags">
14106
14107
14108 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>.
14109
14110
14111 </div>
14112 </div>
14113 <div class="padding"></div>
14114
14115 <p style="text-align: right;"><a href="debian.rss"><img src="http://people.skolelinux.org/pere/blog/xml.gif" alt="RSS Feed" width="36" height="14" /></a></p>
14116 <div id="sidebar">
14117
14118
14119
14120 <h2>Archive</h2>
14121 <ul>
14122
14123 <li>2020
14124 <ul>
14125
14126 <li><a href="http://people.skolelinux.org/pere/blog/archive/2020/02/">February (2)</a></li>
14127
14128 <li><a href="http://people.skolelinux.org/pere/blog/archive/2020/03/">March (2)</a></li>
14129
14130 <li><a href="http://people.skolelinux.org/pere/blog/archive/2020/04/">April (2)</a></li>
14131
14132 <li><a href="http://people.skolelinux.org/pere/blog/archive/2020/05/">May (3)</a></li>
14133
14134 <li><a href="http://people.skolelinux.org/pere/blog/archive/2020/06/">June (2)</a></li>
14135
14136 <li><a href="http://people.skolelinux.org/pere/blog/archive/2020/07/">July (1)</a></li>
14137
14138 <li><a href="http://people.skolelinux.org/pere/blog/archive/2020/09/">September (1)</a></li>
14139
14140 </ul></li>
14141
14142 <li>2019
14143 <ul>
14144
14145 <li><a href="http://people.skolelinux.org/pere/blog/archive/2019/01/">January (4)</a></li>
14146
14147 <li><a href="http://people.skolelinux.org/pere/blog/archive/2019/02/">February (3)</a></li>
14148
14149 <li><a href="http://people.skolelinux.org/pere/blog/archive/2019/03/">March (3)</a></li>
14150
14151 <li><a href="http://people.skolelinux.org/pere/blog/archive/2019/05/">May (2)</a></li>
14152
14153 <li><a href="http://people.skolelinux.org/pere/blog/archive/2019/06/">June (5)</a></li>
14154
14155 <li><a href="http://people.skolelinux.org/pere/blog/archive/2019/07/">July (2)</a></li>
14156
14157 <li><a href="http://people.skolelinux.org/pere/blog/archive/2019/08/">August (1)</a></li>
14158
14159 <li><a href="http://people.skolelinux.org/pere/blog/archive/2019/09/">September (1)</a></li>
14160
14161 <li><a href="http://people.skolelinux.org/pere/blog/archive/2019/11/">November (1)</a></li>
14162
14163 <li><a href="http://people.skolelinux.org/pere/blog/archive/2019/12/">December (4)</a></li>
14164
14165 </ul></li>
14166
14167 <li>2018
14168 <ul>
14169
14170 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/01/">January (1)</a></li>
14171
14172 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/02/">February (5)</a></li>
14173
14174 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/03/">March (5)</a></li>
14175
14176 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/04/">April (3)</a></li>
14177
14178 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/06/">June (2)</a></li>
14179
14180 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/07/">July (5)</a></li>
14181
14182 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/08/">August (3)</a></li>
14183
14184 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/09/">September (3)</a></li>
14185
14186 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/10/">October (5)</a></li>
14187
14188 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/11/">November (2)</a></li>
14189
14190 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/12/">December (4)</a></li>
14191
14192 </ul></li>
14193
14194 <li>2017
14195 <ul>
14196
14197 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/01/">January (4)</a></li>
14198
14199 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/02/">February (3)</a></li>
14200
14201 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/03/">March (5)</a></li>
14202
14203 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/04/">April (2)</a></li>
14204
14205 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/06/">June (5)</a></li>
14206
14207 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/07/">July (1)</a></li>
14208
14209 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/08/">August (1)</a></li>
14210
14211 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/09/">September (3)</a></li>
14212
14213 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/10/">October (5)</a></li>
14214
14215 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/11/">November (3)</a></li>
14216
14217 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/12/">December (4)</a></li>
14218
14219 </ul></li>
14220
14221 <li>2016
14222 <ul>
14223
14224 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/01/">January (3)</a></li>
14225
14226 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/02/">February (2)</a></li>
14227
14228 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/03/">March (3)</a></li>
14229
14230 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/04/">April (8)</a></li>
14231
14232 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/05/">May (8)</a></li>
14233
14234 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/06/">June (2)</a></li>
14235
14236 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/07/">July (2)</a></li>
14237
14238 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/08/">August (5)</a></li>
14239
14240 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/09/">September (2)</a></li>
14241
14242 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/10/">October (3)</a></li>
14243
14244 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/11/">November (8)</a></li>
14245
14246 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/12/">December (5)</a></li>
14247
14248 </ul></li>
14249
14250 <li>2015
14251 <ul>
14252
14253 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/01/">January (7)</a></li>
14254
14255 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/02/">February (6)</a></li>
14256
14257 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/03/">March (1)</a></li>
14258
14259 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/04/">April (4)</a></li>
14260
14261 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/05/">May (3)</a></li>
14262
14263 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/06/">June (4)</a></li>
14264
14265 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/07/">July (6)</a></li>
14266
14267 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/08/">August (2)</a></li>
14268
14269 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/09/">September (2)</a></li>
14270
14271 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/10/">October (9)</a></li>
14272
14273 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/11/">November (6)</a></li>
14274
14275 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/12/">December (3)</a></li>
14276
14277 </ul></li>
14278
14279 <li>2014
14280 <ul>
14281
14282 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/01/">January (2)</a></li>
14283
14284 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/02/">February (3)</a></li>
14285
14286 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
14287
14288 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/04/">April (7)</a></li>
14289
14290 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/05/">May (1)</a></li>
14291
14292 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/06/">June (2)</a></li>
14293
14294 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/07/">July (2)</a></li>
14295
14296 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/08/">August (2)</a></li>
14297
14298 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/09/">September (5)</a></li>
14299
14300 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/10/">October (6)</a></li>
14301
14302 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/11/">November (3)</a></li>
14303
14304 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/12/">December (5)</a></li>
14305
14306 </ul></li>
14307
14308 <li>2013
14309 <ul>
14310
14311 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
14312
14313 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
14314
14315 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
14316
14317 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
14318
14319 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
14320
14321 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
14322
14323 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
14324
14325 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
14326
14327 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
14328
14329 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/10/">October (7)</a></li>
14330
14331 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/11/">November (9)</a></li>
14332
14333 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/12/">December (3)</a></li>
14334
14335 </ul></li>
14336
14337 <li>2012
14338 <ul>
14339
14340 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
14341
14342 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
14343
14344 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
14345
14346 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
14347
14348 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
14349
14350 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
14351
14352 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
14353
14354 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
14355
14356 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
14357
14358 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
14359
14360 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
14361
14362 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
14363
14364 </ul></li>
14365
14366 <li>2011
14367 <ul>
14368
14369 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
14370
14371 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
14372
14373 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
14374
14375 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
14376
14377 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
14378
14379 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
14380
14381 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
14382
14383 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
14384
14385 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
14386
14387 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
14388
14389 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
14390
14391 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
14392
14393 </ul></li>
14394
14395 <li>2010
14396 <ul>
14397
14398 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
14399
14400 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
14401
14402 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
14403
14404 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
14405
14406 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
14407
14408 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
14409
14410 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
14411
14412 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
14413
14414 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
14415
14416 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
14417
14418 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
14419
14420 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
14421
14422 </ul></li>
14423
14424 <li>2009
14425 <ul>
14426
14427 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
14428
14429 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
14430
14431 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
14432
14433 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
14434
14435 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
14436
14437 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
14438
14439 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
14440
14441 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
14442
14443 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
14444
14445 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
14446
14447 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
14448
14449 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
14450
14451 </ul></li>
14452
14453 <li>2008
14454 <ul>
14455
14456 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
14457
14458 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
14459
14460 </ul></li>
14461
14462 </ul>
14463
14464
14465
14466 <h2>Tags</h2>
14467 <ul>
14468
14469 <li><a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (16)</a></li>
14470
14471 <li><a href="http://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
14472
14473 <li><a href="http://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
14474
14475 <li><a href="http://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
14476
14477 <li><a href="http://people.skolelinux.org/pere/blog/tags/betalkontant">betalkontant (9)</a></li>
14478
14479 <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (11)</a></li>
14480
14481 <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (17)</a></li>
14482
14483 <li><a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
14484
14485 <li><a href="http://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
14486
14487 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (173)</a></li>
14488
14489 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (159)</a></li>
14490
14491 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (6)</a></li>
14492
14493 <li><a href="http://people.skolelinux.org/pere/blog/tags/digistan">digistan (11)</a></li>
14494
14495 <li><a href="http://people.skolelinux.org/pere/blog/tags/dld">dld (17)</a></li>
14496
14497 <li><a href="http://people.skolelinux.org/pere/blog/tags/docbook">docbook (26)</a></li>
14498
14499 <li><a href="http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
14500
14501 <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (420)</a></li>
14502
14503 <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
14504
14505 <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (14)</a></li>
14506
14507 <li><a href="http://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (34)</a></li>
14508
14509 <li><a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (9)</a></li>
14510
14511 <li><a href="http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (20)</a></li>
14512
14513 <li><a href="http://people.skolelinux.org/pere/blog/tags/h264">h264 (20)</a></li>
14514
14515 <li><a href="http://people.skolelinux.org/pere/blog/tags/intervju">intervju (43)</a></li>
14516
14517 <li><a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (16)</a></li>
14518
14519 <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (22)</a></li>
14520
14521 <li><a href="http://people.skolelinux.org/pere/blog/tags/kodi">kodi (4)</a></li>
14522
14523 <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
14524
14525 <li><a href="http://people.skolelinux.org/pere/blog/tags/lego">lego (4)</a></li>
14526
14527 <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (8)</a></li>
14528
14529 <li><a href="http://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (2)</a></li>
14530
14531 <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
14532
14533 <li><a href="http://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
14534
14535 <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (42)</a></li>
14536
14537 <li><a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (13)</a></li>
14538
14539 <li><a href="http://people.skolelinux.org/pere/blog/tags/noark5">noark5 (22)</a></li>
14540
14541 <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (314)</a></li>
14542
14543 <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (197)</a></li>
14544
14545 <li><a href="http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (38)</a></li>
14546
14547 <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
14548
14549 <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (75)</a></li>
14550
14551 <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (111)</a></li>
14552
14553 <li><a href="http://people.skolelinux.org/pere/blog/tags/raid">raid (2)</a></li>
14554
14555 <li><a href="http://people.skolelinux.org/pere/blog/tags/reactos">reactos (1)</a></li>
14556
14557 <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
14558
14559 <li><a href="http://people.skolelinux.org/pere/blog/tags/rfid">rfid (3)</a></li>
14560
14561 <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (12)</a></li>
14562
14563 <li><a href="http://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
14564
14565 <li><a href="http://people.skolelinux.org/pere/blog/tags/ruter">ruter (7)</a></li>
14566
14567 <li><a href="http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
14568
14569 <li><a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (58)</a></li>
14570
14571 <li><a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
14572
14573 <li><a href="http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (5)</a></li>
14574
14575 <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (70)</a></li>
14576
14577 <li><a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (7)</a></li>
14578
14579 <li><a href="http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (12)</a></li>
14580
14581 <li><a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (60)</a></li>
14582
14583 <li><a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (5)</a></li>
14584
14585 <li><a href="http://people.skolelinux.org/pere/blog/tags/usenix">usenix (2)</a></li>
14586
14587 <li><a href="http://people.skolelinux.org/pere/blog/tags/valg">valg (9)</a></li>
14588
14589 <li><a href="http://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (18)</a></li>
14590
14591 <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (74)</a></li>
14592
14593 <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
14594
14595 <li><a href="http://people.skolelinux.org/pere/blog/tags/web">web (42)</a></li>
14596
14597 </ul>
14598
14599
14600 </div>
14601 <p style="text-align: right">
14602 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
14603 </p>
14604
14605 </body>
14606 </html>