]> pere.pagekite.me Git - homepage.git/blob - blog/Testing_if_a_file_system_can_be_used_for_home_directories___.html
Generated.
[homepage.git] / blog / Testing_if_a_file_system_can_be_used_for_home_directories___.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: Testing if a file system can be used for home directories...</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
10
11 </head>
12 <body>
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 <div class="entry">
23 <div class="title">Testing if a file system can be used for home directories...</div>
24 <div class="date"> 8th August 2010</div>
25 <div class="body"><p>A few years ago, I was involved in a project planning to use
26 Windows file servers as home directory servers for Debian
27 Edu/Skolelinux machines. This was thought to be no problem, as the
28 access would be through the SMB network file system protocol, and we
29 knew other sites used SMB with unix and samba as the file server to
30 mount home directories without any problems. But, after months of
31 struggling, we had to conclude that our goal was impossible.</p>
32
33 <p>The reason is simply that while SMB can be used for home
34 directories when the file server is Samba running on Unix, this only
35 work because of Samba have some extensions and the fact that the
36 underlying file system is a unix file system. When using a Windows
37 file server, the underlying file system do not have POSIX semantics,
38 and several programs will fail if the users home directory where they
39 want to store their configuration lack POSIX semantics.</p>
40
41 <p>As part of this work, I wrote a small C program I want to share
42 with you all, to replicate a few of the problematic applications (like
43 OpenOffice.org and GCompris) and see if the file system was working as
44 it should. If you find yourself in spooky file system land, it might
45 help you find your way out again. This is the fs-test.c source:</p>
46
47 <pre>
48 /*
49 * Some tests to check the file system sematics. Used to verify that
50 * CIFS from a windows server do not work properly as a linux home
51 * directory.
52 * License: GPL v2 or later
53 *
54 * needs libsqlite3-dev and build-essential installed
55 * compile with: gcc -Wall -lsqlite3 -DTEST_SQLITE fs-test.c -o fs-test
56 */
57
58 #define _FILE_OFFSET_BITS 64
59 #define _LARGEFILE_SOURCE 1
60 #define _LARGEFILE64_SOURCE 1
61
62 #define _GNU_SOURCE /* for asprintf() */
63
64 #include &lt;errno.h>
65 #include &lt;fcntl.h>
66 #include &lt;stdio.h>
67 #include &lt;string.h>
68 #include &lt;stdlib.h>
69 #include &lt;sys/file.h>
70 #include &lt;sys/stat.h>
71 #include &lt;sys/types.h>
72 #include &lt;unistd.h>
73
74 #ifdef TEST_SQLITE
75 /*
76 * Test sqlite open, as done by gcompris require the libsqlite3-dev
77 * package and linking with -lsqlite3. A more low level test is
78 * below.
79 * See also &lt;URL: http://www.sqlite.org./faq.html#q5 >.
80 */
81 #include &lt;sqlite3.h>
82 #define CREATE_TABLE_USERS \
83 "CREATE TABLE users (user_id INT UNIQUE, login TEXT, lastname TEXT, firstname TEXT, birthdate TEXT, class_id INT ); "
84 int test_sqlite_open(void) {
85 char *zErrMsg;
86 char *name = "testsqlite.db";
87 sqlite3 *db=NULL;
88 unlink(name);
89 int rc = sqlite3_open(name, &db);
90 if( rc ){
91 printf("error: sqlite open of %s failed: %s\n", name, sqlite3_errmsg(db));
92 sqlite3_close(db);
93 return -1;
94 }
95
96 /* create tables */
97 rc = sqlite3_exec(db,CREATE_TABLE_USERS, NULL, 0, &zErrMsg);
98 if( rc != SQLITE_OK ){
99 printf("error: sqlite table create failed: %s\n", zErrMsg);
100 sqlite3_close(db);
101 return -1;
102 }
103 printf("info: sqlite worked\n");
104 sqlite3_close(db);
105 return 0;
106 }
107 #endif /* TEST_SQLITE */
108
109 /*
110 * Demonstrate locking issue found in gcompris using sqlite3. This
111 * work with ext3, but not with cifs server on Windows 2003. This is
112 * done in the sqlite3 library.
113 * See also
114 * &lt;URL:http://www.cygwin.com/ml/cygwin/2001-08/msg00854.html> and the
115 * POSIX specification
116 * &lt;URL:http://www.opengroup.org/onlinepubs/009695399/functions/fcntl.html>.
117 */
118 int test_gcompris_locking(void) {
119 struct flock fl;
120 char *name = "testsqlite.db";
121 unlink(name);
122 int fd = open(name, O_RDWR|O_CREAT|O_LARGEFILE, 0644);
123 printf("info: testing fcntl locking\n");
124
125 fl.l_whence = SEEK_SET;
126 fl.l_pid = getpid();
127 printf(" Read-locking 1 byte from 1073741824");
128 fl.l_start = 1073741824;
129 fl.l_len = 1;
130 fl.l_type = F_RDLCK;
131 if (0 != fcntl(fd, F_SETLK, &fl) ) printf(" - error!\n"); else printf("\n");
132
133 printf(" Read-locking 510 byte from 1073741826");
134 fl.l_start = 1073741826;
135 fl.l_len = 510;
136 fl.l_type = F_RDLCK;
137 if (0 != fcntl(fd, F_SETLK, &fl) ) printf(" - error!\n"); else printf("\n");
138
139 printf(" Unlocking 1 byte from 1073741824");
140 fl.l_start = 1073741824;
141 fl.l_len = 1;
142 fl.l_type = F_UNLCK;
143 if (0 != fcntl(fd, F_SETLK, &fl) ) printf(" - error!\n"); else printf("\n");
144
145 printf(" Write-locking 1 byte from 1073741824");
146 fl.l_start = 1073741824;
147 fl.l_len = 1;
148 fl.l_type = F_WRLCK;
149 if (0 != fcntl(fd, F_SETLK, &fl) ) printf(" - error!\n"); else printf("\n");
150
151 printf(" Write-locking 510 byte from 1073741826");
152 fl.l_start = 1073741826;
153 fl.l_len = 510;
154 if (0 != fcntl(fd, F_SETLK, &fl) ) printf(" - error!\n"); else printf("\n");
155
156 printf(" Unlocking 2 byte from 1073741824");
157 fl.l_start = 1073741824;
158 fl.l_len = 2;
159 fl.l_type = F_UNLCK;
160 if (0 != fcntl(fd, F_SETLK, &fl) ) printf(" - error!\n"); else printf("\n");
161
162 close(fd);
163 return 0;
164 }
165
166 /*
167 * Test if permissions of freshly created directories allow entries
168 * below them. This was a problem with OpenOffice.org and gcompris.
169 * Mounting with option 'sync' seem to solve this problem while
170 * slowing down file operations.
171 */
172 int test_subdirectory_creation(void) {
173 #define LEVELS 5
174 char *path = strdup("test");
175 char *dirs[LEVELS];
176 int level;
177 printf("info: testing subdirectory creation\n");
178 for (level = 0; level &lt; LEVELS; level++) {
179 char *newpath = NULL;
180 if (-1 == mkdir(path, 0777)) {
181 printf(" error: Unable to create directory '%s': %s\n",
182 path, strerror(errno));
183 break;
184 }
185 asprintf(&newpath, "%s/%s", path, "test");
186 free(path);
187 path = newpath;
188 }
189 return 0;
190 }
191
192 /*
193 * Test if symlinks can be created. This was a problem detected with
194 * KDE.
195 */
196 int test_symlinks(void) {
197 printf("info: testing symlink creation\n");
198 unlink("symlink");
199 if (-1 == symlink("file", "symlink"))
200 printf(" error: Unable to create symlink\n");
201 return 0;
202 }
203
204 int main(int argc, char **argv) {
205 printf("Testing POSIX/Unix sematics on file system\n");
206 test_symlinks();
207 test_subdirectory_creation();
208 #ifdef TEST_SQLITE
209 test_sqlite_open();
210 #endif /* TEST_SQLITE */
211 test_gcompris_locking();
212 return 0;
213 }
214 </pre>
215
216 <p>When everything is working, it should print something like
217 this:</p>
218
219 <pre>
220 Testing POSIX/Unix sematics on file system
221 info: testing symlink creation
222 info: testing subdirectory creation
223 info: sqlite worked
224 info: testing fcntl locking
225 Read-locking 1 byte from 1073741824
226 Read-locking 510 byte from 1073741826
227 Unlocking 1 byte from 1073741824
228 Write-locking 1 byte from 1073741824
229 Write-locking 510 byte from 1073741826
230 Unlocking 2 byte from 1073741824
231 </pre>
232
233 <p>I do not remember the exact details of the problems we saw, but one
234 of them was with locking, where if I remember correctly, POSIX allow a
235 read-only lock to be upgraded to a read-write lock without unlocking
236 the read-only lock (while Windows do not). Another was a bug in the
237 CIFS/SMB client implementation in the Linux kernel where directory
238 meta information would be wrong for a fraction of a second, making
239 OpenOffice.org fail to create its deep directory tree because it was
240 not allowed to create files in its freshly created directory.</p>
241
242 <p>Anyway, here is a nice tool for your tool box, might you never need
243 it. :)</p>
244
245 <p>Update 2010-08-27: Michael Gebetsroither report that he found the
246 script so useful that he created a GIT repository and stored it in
247 <a href="http://github.com/gebi/fs-test">http://github.com/gebi/fs-test</a>.</p>
248 </div>
249
250 <div class="tags">Tags: <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>.</div>
251
252
253 </div>
254
255
256
257
258 <div id="sidebar">
259
260
261
262 <h2>Archive</h2>
263 <ul>
264
265 <li>2017
266 <ul>
267
268 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/01/">January (4)</a></li>
269
270 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/02/">February (3)</a></li>
271
272 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/03/">March (5)</a></li>
273
274 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/04/">April (2)</a></li>
275
276 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/06/">June (5)</a></li>
277
278 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/07/">July (1)</a></li>
279
280 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/08/">August (1)</a></li>
281
282 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/09/">September (3)</a></li>
283
284 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/10/">October (5)</a></li>
285
286 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/11/">November (2)</a></li>
287
288 </ul></li>
289
290 <li>2016
291 <ul>
292
293 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/01/">January (3)</a></li>
294
295 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/02/">February (2)</a></li>
296
297 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/03/">March (3)</a></li>
298
299 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/04/">April (8)</a></li>
300
301 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/05/">May (8)</a></li>
302
303 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/06/">June (2)</a></li>
304
305 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/07/">July (2)</a></li>
306
307 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/08/">August (5)</a></li>
308
309 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/09/">September (2)</a></li>
310
311 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/10/">October (3)</a></li>
312
313 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/11/">November (8)</a></li>
314
315 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/12/">December (5)</a></li>
316
317 </ul></li>
318
319 <li>2015
320 <ul>
321
322 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/01/">January (7)</a></li>
323
324 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/02/">February (6)</a></li>
325
326 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/03/">March (1)</a></li>
327
328 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/04/">April (4)</a></li>
329
330 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/05/">May (3)</a></li>
331
332 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/06/">June (4)</a></li>
333
334 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/07/">July (6)</a></li>
335
336 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/08/">August (2)</a></li>
337
338 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/09/">September (2)</a></li>
339
340 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/10/">October (9)</a></li>
341
342 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/11/">November (6)</a></li>
343
344 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/12/">December (3)</a></li>
345
346 </ul></li>
347
348 <li>2014
349 <ul>
350
351 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/01/">January (2)</a></li>
352
353 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/02/">February (3)</a></li>
354
355 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
356
357 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/04/">April (7)</a></li>
358
359 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/05/">May (1)</a></li>
360
361 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/06/">June (2)</a></li>
362
363 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/07/">July (2)</a></li>
364
365 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/08/">August (2)</a></li>
366
367 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/09/">September (5)</a></li>
368
369 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/10/">October (6)</a></li>
370
371 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/11/">November (3)</a></li>
372
373 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/12/">December (5)</a></li>
374
375 </ul></li>
376
377 <li>2013
378 <ul>
379
380 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
381
382 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
383
384 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
385
386 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
387
388 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
389
390 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
391
392 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
393
394 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
395
396 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
397
398 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/10/">October (7)</a></li>
399
400 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/11/">November (9)</a></li>
401
402 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/12/">December (3)</a></li>
403
404 </ul></li>
405
406 <li>2012
407 <ul>
408
409 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
410
411 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
412
413 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
414
415 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
416
417 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
418
419 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
420
421 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
422
423 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
424
425 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
426
427 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
428
429 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
430
431 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
432
433 </ul></li>
434
435 <li>2011
436 <ul>
437
438 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
439
440 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
441
442 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
443
444 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
445
446 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
447
448 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
449
450 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
451
452 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
453
454 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
455
456 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
457
458 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
459
460 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
461
462 </ul></li>
463
464 <li>2010
465 <ul>
466
467 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
468
469 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
470
471 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
472
473 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
474
475 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
476
477 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
478
479 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
480
481 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
482
483 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
484
485 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
486
487 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
488
489 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
490
491 </ul></li>
492
493 <li>2009
494 <ul>
495
496 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
497
498 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
499
500 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
501
502 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
503
504 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
505
506 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
507
508 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
509
510 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
511
512 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
513
514 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
515
516 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
517
518 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
519
520 </ul></li>
521
522 <li>2008
523 <ul>
524
525 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
526
527 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
528
529 </ul></li>
530
531 </ul>
532
533
534
535 <h2>Tags</h2>
536 <ul>
537
538 <li><a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (14)</a></li>
539
540 <li><a href="http://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
541
542 <li><a href="http://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
543
544 <li><a href="http://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
545
546 <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (9)</a></li>
547
548 <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (16)</a></li>
549
550 <li><a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
551
552 <li><a href="http://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
553
554 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (154)</a></li>
555
556 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (158)</a></li>
557
558 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (4)</a></li>
559
560 <li><a href="http://people.skolelinux.org/pere/blog/tags/digistan">digistan (10)</a></li>
561
562 <li><a href="http://people.skolelinux.org/pere/blog/tags/dld">dld (17)</a></li>
563
564 <li><a href="http://people.skolelinux.org/pere/blog/tags/docbook">docbook (24)</a></li>
565
566 <li><a href="http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
567
568 <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (359)</a></li>
569
570 <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
571
572 <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (12)</a></li>
573
574 <li><a href="http://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (30)</a></li>
575
576 <li><a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (9)</a></li>
577
578 <li><a href="http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (18)</a></li>
579
580 <li><a href="http://people.skolelinux.org/pere/blog/tags/h264">h264 (20)</a></li>
581
582 <li><a href="http://people.skolelinux.org/pere/blog/tags/intervju">intervju (42)</a></li>
583
584 <li><a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (15)</a></li>
585
586 <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (20)</a></li>
587
588 <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
589
590 <li><a href="http://people.skolelinux.org/pere/blog/tags/lego">lego (4)</a></li>
591
592 <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (8)</a></li>
593
594 <li><a href="http://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (2)</a></li>
595
596 <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
597
598 <li><a href="http://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
599
600 <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (39)</a></li>
601
602 <li><a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (9)</a></li>
603
604 <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (293)</a></li>
605
606 <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (189)</a></li>
607
608 <li><a href="http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (33)</a></li>
609
610 <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
611
612 <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (66)</a></li>
613
614 <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (104)</a></li>
615
616 <li><a href="http://people.skolelinux.org/pere/blog/tags/raid">raid (2)</a></li>
617
618 <li><a href="http://people.skolelinux.org/pere/blog/tags/reactos">reactos (1)</a></li>
619
620 <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
621
622 <li><a href="http://people.skolelinux.org/pere/blog/tags/rfid">rfid (3)</a></li>
623
624 <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (10)</a></li>
625
626 <li><a href="http://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
627
628 <li><a href="http://people.skolelinux.org/pere/blog/tags/ruter">ruter (5)</a></li>
629
630 <li><a href="http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
631
632 <li><a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (53)</a></li>
633
634 <li><a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
635
636 <li><a href="http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (5)</a></li>
637
638 <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (55)</a></li>
639
640 <li><a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (6)</a></li>
641
642 <li><a href="http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (12)</a></li>
643
644 <li><a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (52)</a></li>
645
646 <li><a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (4)</a></li>
647
648 <li><a href="http://people.skolelinux.org/pere/blog/tags/usenix">usenix (2)</a></li>
649
650 <li><a href="http://people.skolelinux.org/pere/blog/tags/valg">valg (9)</a></li>
651
652 <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (59)</a></li>
653
654 <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
655
656 <li><a href="http://people.skolelinux.org/pere/blog/tags/web">web (40)</a></li>
657
658 </ul>
659
660
661 </div>
662 <p style="text-align: right">
663 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
664 </p>
665
666 </body>
667 </html>