]> 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>2018
266 <ul>
267
268 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/01/">January (1)</a></li>
269
270 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/02/">February (5)</a></li>
271
272 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/03/">March (5)</a></li>
273
274 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/04/">April (3)</a></li>
275
276 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/06/">June (2)</a></li>
277
278 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/07/">July (3)</a></li>
279
280 </ul></li>
281
282 <li>2017
283 <ul>
284
285 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/01/">January (4)</a></li>
286
287 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/02/">February (3)</a></li>
288
289 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/03/">March (5)</a></li>
290
291 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/04/">April (2)</a></li>
292
293 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/06/">June (5)</a></li>
294
295 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/07/">July (1)</a></li>
296
297 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/08/">August (1)</a></li>
298
299 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/09/">September (3)</a></li>
300
301 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/10/">October (5)</a></li>
302
303 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/11/">November (3)</a></li>
304
305 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/12/">December (4)</a></li>
306
307 </ul></li>
308
309 <li>2016
310 <ul>
311
312 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/01/">January (3)</a></li>
313
314 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/02/">February (2)</a></li>
315
316 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/03/">March (3)</a></li>
317
318 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/04/">April (8)</a></li>
319
320 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/05/">May (8)</a></li>
321
322 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/06/">June (2)</a></li>
323
324 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/07/">July (2)</a></li>
325
326 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/08/">August (5)</a></li>
327
328 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/09/">September (2)</a></li>
329
330 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/10/">October (3)</a></li>
331
332 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/11/">November (8)</a></li>
333
334 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/12/">December (5)</a></li>
335
336 </ul></li>
337
338 <li>2015
339 <ul>
340
341 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/01/">January (7)</a></li>
342
343 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/02/">February (6)</a></li>
344
345 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/03/">March (1)</a></li>
346
347 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/04/">April (4)</a></li>
348
349 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/05/">May (3)</a></li>
350
351 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/06/">June (4)</a></li>
352
353 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/07/">July (6)</a></li>
354
355 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/08/">August (2)</a></li>
356
357 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/09/">September (2)</a></li>
358
359 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/10/">October (9)</a></li>
360
361 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/11/">November (6)</a></li>
362
363 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/12/">December (3)</a></li>
364
365 </ul></li>
366
367 <li>2014
368 <ul>
369
370 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/01/">January (2)</a></li>
371
372 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/02/">February (3)</a></li>
373
374 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
375
376 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/04/">April (7)</a></li>
377
378 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/05/">May (1)</a></li>
379
380 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/06/">June (2)</a></li>
381
382 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/07/">July (2)</a></li>
383
384 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/08/">August (2)</a></li>
385
386 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/09/">September (5)</a></li>
387
388 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/10/">October (6)</a></li>
389
390 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/11/">November (3)</a></li>
391
392 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/12/">December (5)</a></li>
393
394 </ul></li>
395
396 <li>2013
397 <ul>
398
399 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
400
401 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
402
403 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
404
405 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
406
407 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
408
409 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
410
411 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
412
413 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
414
415 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
416
417 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/10/">October (7)</a></li>
418
419 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/11/">November (9)</a></li>
420
421 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/12/">December (3)</a></li>
422
423 </ul></li>
424
425 <li>2012
426 <ul>
427
428 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
429
430 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
431
432 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
433
434 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
435
436 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
437
438 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
439
440 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
441
442 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
443
444 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
445
446 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
447
448 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
449
450 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
451
452 </ul></li>
453
454 <li>2011
455 <ul>
456
457 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
458
459 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
460
461 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
462
463 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
464
465 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
466
467 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
468
469 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
470
471 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
472
473 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
474
475 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
476
477 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
478
479 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
480
481 </ul></li>
482
483 <li>2010
484 <ul>
485
486 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
487
488 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
489
490 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
491
492 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
493
494 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
495
496 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
497
498 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
499
500 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
501
502 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
503
504 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
505
506 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
507
508 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
509
510 </ul></li>
511
512 <li>2009
513 <ul>
514
515 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
516
517 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
518
519 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
520
521 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
522
523 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
524
525 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
526
527 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
528
529 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
530
531 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
532
533 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
534
535 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
536
537 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
538
539 </ul></li>
540
541 <li>2008
542 <ul>
543
544 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
545
546 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
547
548 </ul></li>
549
550 </ul>
551
552
553
554 <h2>Tags</h2>
555 <ul>
556
557 <li><a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (16)</a></li>
558
559 <li><a href="http://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
560
561 <li><a href="http://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
562
563 <li><a href="http://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
564
565 <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (9)</a></li>
566
567 <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (17)</a></li>
568
569 <li><a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
570
571 <li><a href="http://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
572
573 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (159)</a></li>
574
575 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (158)</a></li>
576
577 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (4)</a></li>
578
579 <li><a href="http://people.skolelinux.org/pere/blog/tags/digistan">digistan (10)</a></li>
580
581 <li><a href="http://people.skolelinux.org/pere/blog/tags/dld">dld (17)</a></li>
582
583 <li><a href="http://people.skolelinux.org/pere/blog/tags/docbook">docbook (25)</a></li>
584
585 <li><a href="http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
586
587 <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (377)</a></li>
588
589 <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
590
591 <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (13)</a></li>
592
593 <li><a href="http://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (32)</a></li>
594
595 <li><a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (9)</a></li>
596
597 <li><a href="http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (18)</a></li>
598
599 <li><a href="http://people.skolelinux.org/pere/blog/tags/h264">h264 (20)</a></li>
600
601 <li><a href="http://people.skolelinux.org/pere/blog/tags/intervju">intervju (42)</a></li>
602
603 <li><a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (16)</a></li>
604
605 <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (20)</a></li>
606
607 <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
608
609 <li><a href="http://people.skolelinux.org/pere/blog/tags/lego">lego (4)</a></li>
610
611 <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (8)</a></li>
612
613 <li><a href="http://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (2)</a></li>
614
615 <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
616
617 <li><a href="http://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
618
619 <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (41)</a></li>
620
621 <li><a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (10)</a></li>
622
623 <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (299)</a></li>
624
625 <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (190)</a></li>
626
627 <li><a href="http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (33)</a></li>
628
629 <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
630
631 <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (71)</a></li>
632
633 <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (107)</a></li>
634
635 <li><a href="http://people.skolelinux.org/pere/blog/tags/raid">raid (2)</a></li>
636
637 <li><a href="http://people.skolelinux.org/pere/blog/tags/reactos">reactos (1)</a></li>
638
639 <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
640
641 <li><a href="http://people.skolelinux.org/pere/blog/tags/rfid">rfid (3)</a></li>
642
643 <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (10)</a></li>
644
645 <li><a href="http://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
646
647 <li><a href="http://people.skolelinux.org/pere/blog/tags/ruter">ruter (6)</a></li>
648
649 <li><a href="http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
650
651 <li><a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (54)</a></li>
652
653 <li><a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
654
655 <li><a href="http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (5)</a></li>
656
657 <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (55)</a></li>
658
659 <li><a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (6)</a></li>
660
661 <li><a href="http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (12)</a></li>
662
663 <li><a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (55)</a></li>
664
665 <li><a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (4)</a></li>
666
667 <li><a href="http://people.skolelinux.org/pere/blog/tags/usenix">usenix (2)</a></li>
668
669 <li><a href="http://people.skolelinux.org/pere/blog/tags/valg">valg (9)</a></li>
670
671 <li><a href="http://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (11)</a></li>
672
673 <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (65)</a></li>
674
675 <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
676
677 <li><a href="http://people.skolelinux.org/pere/blog/tags/web">web (41)</a></li>
678
679 </ul>
680
681
682 </div>
683 <p style="text-align: right">
684 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
685 </p>
686
687 </body>
688 </html>