]> pere.pagekite.me Git - homepage.git/blob - blog/archive/2014/09/index.html
Generated.
[homepage.git] / blog / archive / 2014 / 09 / 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 from September 2014</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="09.rss" type="application/rss+xml" />
10 </head>
11 <body>
12 <!-- XML FEED -->
13 <div class="title">
14 <h1>
15 <a href="http://people.skolelinux.org/pere/blog/">Petter Reinholdtsen</a>
16
17 </h1>
18
19 </div>
20
21
22 <h3>Entries from September 2014.</h3>
23
24 <div class="entry">
25 <div class="title">
26 <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>
27 </div>
28 <div class="date">
29 16th September 2014
30 </div>
31 <div class="body">
32 <p>The <a href="https://www.debian.org/">Debian</a> installer could be
33 a lot quicker. When we install more than 2000 packages in
34 <a href="http://www.skolelinux.org/">Skolelinux / Debian Edu</a> using
35 tasksel in the installer, unpacking the binary packages take forever.
36 A part of the slow I/O issue was discussed in
37 <a href="https://bugs.debian.org/613428">bug #613428</a> about too
38 much file system sync-ing done by dpkg, which is the package
39 responsible for unpacking the binary packages. Other parts (like code
40 executed by postinst scripts) might also sync to disk during
41 installation. All this sync-ing to disk do not really make sense to
42 me. If the machine crash half-way through, I start over, I do not try
43 to salvage the half installed system. So the failure sync-ing is
44 supposed to protect against, hardware or system crash, is not really
45 relevant while the installer is running.</p>
46
47 <p>A few days ago, I thought of a way to get rid of all the file
48 system sync()-ing in a fairly non-intrusive way, without the need to
49 change the code in several packages. The idea is not new, but I have
50 not heard anyone propose the approach using dpkg-divert before. It
51 depend on the small and clever package
52 <a href="https://packages.qa.debian.org/eatmydata">eatmydata</a>, which
53 uses LD_PRELOAD to replace the system functions for syncing data to
54 disk with functions doing nothing, thus allowing programs to live
55 dangerous while speeding up disk I/O significantly. Instead of
56 modifying the implementation of dpkg, apt and tasksel (which are the
57 packages responsible for selecting, fetching and installing packages),
58 it occurred to me that we could just divert the programs away, replace
59 them with a simple shell wrapper calling
60 "eatmydata&nbsp;$program&nbsp;$@", to get the same effect.
61 Yesterday I decided to test the idea, and wrapped up a simple
62 implementation for the Debian Edu udeb.</p>
63
64 <p>The effect was stunning. In my first test it reduced the running
65 time of the pkgsel step (installing tasks) from 64 to less than 44
66 minutes (20 minutes shaved off the installation) on an old Dell
67 Latitude D505 machine. I am not quite sure what the optimised time
68 would have been, as I messed up the testing a bit, causing the debconf
69 priority to get low enough for two questions to pop up during
70 installation. As soon as I saw the questions I moved the installation
71 along, but do not know how long the question were holding up the
72 installation. I did some more measurements using Debian Edu Jessie,
73 and got these results. The time measured is the time stamp in
74 /var/log/syslog between the "pkgsel: starting tasksel" and the
75 "pkgsel: finishing up" lines, if you want to do the same measurement
76 yourself. In Debian Edu, the tasksel dialog do not show up, and the
77 timing thus do not depend on how quickly the user handle the tasksel
78 dialog.</p>
79
80 <p><table>
81
82 <tr>
83 <th>Machine/setup</th>
84 <th>Original tasksel</th>
85 <th>Optimised tasksel</th>
86 <th>Reduction</th>
87 </tr>
88
89 <tr>
90 <td>Latitude D505 Main+LTSP LXDE</td>
91 <td>64 min (07:46-08:50)</td>
92 <td><44 min (11:27-12:11)</td>
93 <td>>20 min 18%</td>
94 </tr>
95
96 <tr>
97 <td>Latitude D505 Roaming LXDE</td>
98 <td>57 min (08:48-09:45)</td>
99 <td>34 min (07:43-08:17)</td>
100 <td>23 min 40%</td>
101 </tr>
102
103 <tr>
104 <td>Latitude D505 Minimal</td>
105 <td>22 min (10:37-10:59)</td>
106 <td>11 min (11:16-11:27)</td>
107 <td>11 min 50%</td>
108 </tr>
109
110 <tr>
111 <td>Thinkpad X200 Minimal</td>
112 <td>6 min (08:19-08:25)</td>
113 <td>4 min (08:04-08:08)</td>
114 <td>2 min 33%</td>
115 </tr>
116
117 <tr>
118 <td>Thinkpad X200 Roaming KDE</td>
119 <td>19 min (09:21-09:40)</td>
120 <td>15 min (10:25-10:40)</td>
121 <td>4 min 21%</td>
122 </tr>
123
124 </table></p>
125
126 <p>The test is done using a netinst ISO on a USB stick, so some of the
127 time is spent downloading packages. The connection to the Internet
128 was 100Mbit/s during testing, so downloading should not be a
129 significant factor in the measurement. Download typically took a few
130 seconds to a few minutes, depending on the amount of packages being
131 installed.</p>
132
133 <p>The speedup is implemented by using two hooks in
134 <a href="https://www.debian.org/devel/debian-installer/">Debian
135 Installer</a>, the pre-pkgsel.d hook to set up the diverts, and the
136 finish-install.d hook to remove the divert at the end of the
137 installation. I picked the pre-pkgsel.d hook instead of the
138 post-base-installer.d hook because I test using an ISO without the
139 eatmydata package included, and the post-base-installer.d hook in
140 Debian Edu can only operate on packages included in the ISO. The
141 negative effect of this is that I am unable to activate this
142 optimization for the kernel installation step in d-i. If the code is
143 moved to the post-base-installer.d hook, the speedup would be larger
144 for the entire installation.</p>
145
146 <p>I've implemented this in the
147 <a href="https://packages.qa.debian.org/debian-edu-install">debian-edu-install</a>
148 git repository, and plan to provide the optimization as part of the
149 Debian Edu installation. If you want to test this yourself, you can
150 create two files in the installer (or in an udeb). One shell script
151 need do go into /usr/lib/pre-pkgsel.d/, with content like this:</p>
152
153 <p><blockquote><pre>
154 #!/bin/sh
155 set -e
156 . /usr/share/debconf/confmodule
157 info() {
158 logger -t my-pkgsel "info: $*"
159 }
160 error() {
161 logger -t my-pkgsel "error: $*"
162 }
163 override_install() {
164 apt-install eatmydata || true
165 if [ -x /target/usr/bin/eatmydata ] ; then
166 for bin in dpkg apt-get aptitude tasksel ; do
167 file=/usr/bin/$bin
168 # Test that the file exist and have not been diverted already.
169 if [ -f /target$file ] ; then
170 info "diverting $file using eatmydata"
171 printf "#!/bin/sh\neatmydata $bin.distrib \"\$@\"\n" \
172 > /target$file.edu
173 chmod 755 /target$file.edu
174 in-target dpkg-divert --package debian-edu-config \
175 --rename --quiet --add $file
176 ln -sf ./$bin.edu /target$file
177 else
178 error "unable to divert $file, as it is missing."
179 fi
180 done
181 else
182 error "unable to find /usr/bin/eatmydata after installing the eatmydata pacage"
183 fi
184 }
185
186 override_install
187 </pre></blockquote></p>
188
189 <p>To clean up, another shell script should go into
190 /usr/lib/finish-install.d/ with code like this:
191
192 <p><blockquote><pre>
193 #! /bin/sh -e
194 . /usr/share/debconf/confmodule
195 error() {
196 logger -t my-finish-install "error: $@"
197 }
198 remove_install_override() {
199 for bin in dpkg apt-get aptitude tasksel ; do
200 file=/usr/bin/$bin
201 if [ -x /target$file.edu ] ; then
202 rm /target$file
203 in-target dpkg-divert --package debian-edu-config \
204 --rename --quiet --remove $file
205 rm /target$file.edu
206 else
207 error "Missing divert for $file."
208 fi
209 done
210 sync # Flush file buffers before continuing
211 }
212
213 remove_install_override
214 </pre></blockquote></p>
215
216 <p>In Debian Edu, I placed both code fragments in a separate script
217 edu-eatmydata-install and call it from the pre-pkgsel.d and
218 finish-install.d scripts.</p>
219
220 <p>By now you might ask if this change should get into the normal
221 Debian installer too? I suspect it should, but am not sure the
222 current debian-installer coordinators find it useful enough. It also
223 depend on the side effects of the change. I'm not aware of any, but I
224 guess we will see if the change is safe after some more testing.
225 Perhaps there is some package in Debian depending on sync() and
226 fsync() having effect? Perhaps it should go into its own udeb, to
227 allow those of us wanting to enable it to do so without affecting
228 everyone.</p>
229
230 </div>
231 <div class="tags">
232
233
234 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>.
235
236
237 </div>
238 </div>
239 <div class="padding"></div>
240
241 <div class="entry">
242 <div class="title">
243 <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>
244 </div>
245 <div class="date">
246 10th September 2014
247 </div>
248 <div class="body">
249 <p>Yesterday, I had the pleasure of attending a talk with the
250 <a href="http://www.nuug.no/">Norwegian Unix User Group</a> about
251 <a href="http://www.nuug.no/aktiviteter/20140909-sks-keyservers/">the
252 OpenPGP keyserver pool sks-keyservers.net</a>, and was very happy to
253 learn that there is a large set of publicly available key servers to
254 use when looking for peoples public key. So far I have used
255 subkeys.pgp.net, and some times wwwkeys.nl.pgp.net when the former
256 were misbehaving, but those days are ended. The servers I have used
257 up until yesterday have been slow and some times unavailable. I hope
258 those problems are gone now.</p>
259
260 <p>Behind the round robin DNS entry of the
261 <a href="https://sks-keyservers.net/">sks-keyservers.net</a> service
262 there is a pool of more than 100 keyservers which are checked every
263 day to ensure they are well connected and up to date. It must be
264 better than what I have used so far. :)</p>
265
266 <p>Yesterdays speaker told me that the service is the default
267 keyserver provided by the default configuration in GnuPG, but this do
268 not seem to be used in Debian. Perhaps it should?</p>
269
270 <p>Anyway, I've updated my ~/.gnupg/options file to now include this
271 line:</p>
272
273 <p><blockquote><pre>
274 keyserver pool.sks-keyservers.net
275 </pre></blockquote></p>
276
277 <p>With GnuPG version 2 one can also locate the keyserver using SRV
278 entries in DNS. Just for fun, I did just that at work, so now every
279 user of GnuPG at the University of Oslo should find a OpenGPG
280 keyserver automatically should their need it:</p>
281
282 <p><blockquote><pre>
283 % host -t srv _pgpkey-http._tcp.uio.no
284 _pgpkey-http._tcp.uio.no has SRV record 0 100 11371 pool.sks-keyservers.net.
285 %
286 </pre></blockquote></p>
287
288 <p>Now if only
289 <a href="http://ietfreport.isoc.org/idref/draft-shaw-openpgp-hkp/">the
290 HKP lookup protocol</a> supported finding signature paths, I would be
291 very happy. It can look up a given key or search for a user ID, but I
292 normally do not want that, but to find a trust path from my key to
293 another key. Given a user ID or key ID, I would like to find (and
294 download) the keys representing a signature path from my key to the
295 key in question, to be able to get a trust path between the two keys.
296 This is as far as I can tell not possible today. Perhaps something
297 for a future version of the protocol?</p>
298
299 </div>
300 <div class="tags">
301
302
303 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>.
304
305
306 </div>
307 </div>
308 <div class="padding"></div>
309
310 <p style="text-align: right;"><a href="09.rss"><img src="http://people.skolelinux.org/pere/blog/xml.gif" alt="RSS Feed" width="36" height="14" /></a></p>
311 <div id="sidebar">
312
313
314
315 <h2>Archive</h2>
316 <ul>
317
318 <li>2014
319 <ul>
320
321 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/01/">January (2)</a></li>
322
323 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/02/">February (3)</a></li>
324
325 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
326
327 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/04/">April (7)</a></li>
328
329 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/05/">May (1)</a></li>
330
331 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/06/">June (2)</a></li>
332
333 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/07/">July (2)</a></li>
334
335 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/08/">August (2)</a></li>
336
337 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/09/">September (2)</a></li>
338
339 </ul></li>
340
341 <li>2013
342 <ul>
343
344 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
345
346 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
347
348 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
349
350 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
351
352 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
353
354 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
355
356 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
357
358 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
359
360 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
361
362 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/10/">October (7)</a></li>
363
364 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/11/">November (9)</a></li>
365
366 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/12/">December (3)</a></li>
367
368 </ul></li>
369
370 <li>2012
371 <ul>
372
373 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
374
375 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
376
377 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
378
379 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
380
381 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
382
383 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
384
385 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
386
387 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
388
389 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
390
391 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
392
393 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
394
395 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
396
397 </ul></li>
398
399 <li>2011
400 <ul>
401
402 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
403
404 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
405
406 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
407
408 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
409
410 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
411
412 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
413
414 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
415
416 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
417
418 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
419
420 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
421
422 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
423
424 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
425
426 </ul></li>
427
428 <li>2010
429 <ul>
430
431 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
432
433 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
434
435 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
436
437 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
438
439 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
440
441 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
442
443 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
444
445 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
446
447 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
448
449 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
450
451 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
452
453 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
454
455 </ul></li>
456
457 <li>2009
458 <ul>
459
460 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
461
462 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
463
464 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
465
466 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
467
468 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
469
470 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
471
472 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
473
474 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
475
476 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
477
478 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
479
480 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
481
482 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
483
484 </ul></li>
485
486 <li>2008
487 <ul>
488
489 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
490
491 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
492
493 </ul></li>
494
495 </ul>
496
497
498
499 <h2>Tags</h2>
500 <ul>
501
502 <li><a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (13)</a></li>
503
504 <li><a href="http://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
505
506 <li><a href="http://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
507
508 <li><a href="http://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
509
510 <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (8)</a></li>
511
512 <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (14)</a></li>
513
514 <li><a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
515
516 <li><a href="http://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
517
518 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (101)</a></li>
519
520 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (149)</a></li>
521
522 <li><a href="http://people.skolelinux.org/pere/blog/tags/digistan">digistan (10)</a></li>
523
524 <li><a href="http://people.skolelinux.org/pere/blog/tags/dld">dld (15)</a></li>
525
526 <li><a href="http://people.skolelinux.org/pere/blog/tags/docbook">docbook (12)</a></li>
527
528 <li><a href="http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
529
530 <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (253)</a></li>
531
532 <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (21)</a></li>
533
534 <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (12)</a></li>
535
536 <li><a href="http://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (13)</a></li>
537
538 <li><a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (8)</a></li>
539
540 <li><a href="http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (11)</a></li>
541
542 <li><a href="http://people.skolelinux.org/pere/blog/tags/intervju">intervju (41)</a></li>
543
544 <li><a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (9)</a></li>
545
546 <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (18)</a></li>
547
548 <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
549
550 <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (8)</a></li>
551
552 <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
553
554 <li><a href="http://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
555
556 <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (29)</a></li>
557
558 <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (247)</a></li>
559
560 <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (162)</a></li>
561
562 <li><a href="http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (11)</a></li>
563
564 <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
565
566 <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (48)</a></li>
567
568 <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (74)</a></li>
569
570 <li><a href="http://people.skolelinux.org/pere/blog/tags/raid">raid (1)</a></li>
571
572 <li><a href="http://people.skolelinux.org/pere/blog/tags/reactos">reactos (1)</a></li>
573
574 <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
575
576 <li><a href="http://people.skolelinux.org/pere/blog/tags/rfid">rfid (2)</a></li>
577
578 <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (9)</a></li>
579
580 <li><a href="http://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
581
582 <li><a href="http://people.skolelinux.org/pere/blog/tags/ruter">ruter (4)</a></li>
583
584 <li><a href="http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
585
586 <li><a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (41)</a></li>
587
588 <li><a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
589
590 <li><a href="http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (4)</a></li>
591
592 <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (45)</a></li>
593
594 <li><a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (3)</a></li>
595
596 <li><a href="http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (9)</a></li>
597
598 <li><a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (25)</a></li>
599
600 <li><a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (1)</a></li>
601
602 <li><a href="http://people.skolelinux.org/pere/blog/tags/valg">valg (8)</a></li>
603
604 <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (43)</a></li>
605
606 <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
607
608 <li><a href="http://people.skolelinux.org/pere/blog/tags/web">web (33)</a></li>
609
610 </ul>
611
612
613 </div>
614 <p style="text-align: right">
615 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
616 </p>
617
618 </body>
619 </html>