]> 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="https://people.skolelinux.org/pere/blog/style.css" />
8 <link rel="stylesheet" type="text/css" media="screen" href="https://people.skolelinux.org/pere/blog/vim.css" />
9
10
11 </head>
12 <body>
13 <div class="title">
14 <h1>
15 <a href="https://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="https://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://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>2023
266 <ul>
267
268 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/01/">January (3)</a></li>
269
270 </ul></li>
271
272 <li>2022
273 <ul>
274
275 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/02/">February (1)</a></li>
276
277 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/03/">March (3)</a></li>
278
279 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/04/">April (2)</a></li>
280
281 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/06/">June (2)</a></li>
282
283 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/07/">July (1)</a></li>
284
285 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/09/">September (1)</a></li>
286
287 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/10/">October (1)</a></li>
288
289 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/12/">December (1)</a></li>
290
291 </ul></li>
292
293 <li>2021
294 <ul>
295
296 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/01/">January (2)</a></li>
297
298 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/02/">February (1)</a></li>
299
300 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/05/">May (1)</a></li>
301
302 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/06/">June (1)</a></li>
303
304 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/07/">July (3)</a></li>
305
306 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/08/">August (1)</a></li>
307
308 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/09/">September (1)</a></li>
309
310 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/10/">October (1)</a></li>
311
312 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/12/">December (1)</a></li>
313
314 </ul></li>
315
316 <li>2020
317 <ul>
318
319 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/02/">February (2)</a></li>
320
321 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/03/">March (2)</a></li>
322
323 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/04/">April (2)</a></li>
324
325 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/05/">May (3)</a></li>
326
327 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/06/">June (2)</a></li>
328
329 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/07/">July (1)</a></li>
330
331 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/09/">September (1)</a></li>
332
333 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/10/">October (1)</a></li>
334
335 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/11/">November (1)</a></li>
336
337 </ul></li>
338
339 <li>2019
340 <ul>
341
342 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/01/">January (4)</a></li>
343
344 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/02/">February (3)</a></li>
345
346 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/03/">March (3)</a></li>
347
348 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/05/">May (2)</a></li>
349
350 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/06/">June (5)</a></li>
351
352 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/07/">July (2)</a></li>
353
354 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/08/">August (1)</a></li>
355
356 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/09/">September (1)</a></li>
357
358 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/11/">November (1)</a></li>
359
360 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/12/">December (4)</a></li>
361
362 </ul></li>
363
364 <li>2018
365 <ul>
366
367 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/01/">January (1)</a></li>
368
369 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/02/">February (5)</a></li>
370
371 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/03/">March (5)</a></li>
372
373 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/04/">April (3)</a></li>
374
375 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/06/">June (2)</a></li>
376
377 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/07/">July (5)</a></li>
378
379 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/08/">August (3)</a></li>
380
381 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/09/">September (3)</a></li>
382
383 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/10/">October (5)</a></li>
384
385 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/11/">November (2)</a></li>
386
387 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/12/">December (4)</a></li>
388
389 </ul></li>
390
391 <li>2017
392 <ul>
393
394 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/01/">January (4)</a></li>
395
396 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/02/">February (3)</a></li>
397
398 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/03/">March (5)</a></li>
399
400 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/04/">April (2)</a></li>
401
402 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/06/">June (5)</a></li>
403
404 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/07/">July (1)</a></li>
405
406 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/08/">August (1)</a></li>
407
408 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/09/">September (3)</a></li>
409
410 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/10/">October (5)</a></li>
411
412 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/11/">November (3)</a></li>
413
414 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/12/">December (4)</a></li>
415
416 </ul></li>
417
418 <li>2016
419 <ul>
420
421 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/01/">January (3)</a></li>
422
423 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/02/">February (2)</a></li>
424
425 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/03/">March (3)</a></li>
426
427 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/04/">April (8)</a></li>
428
429 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/05/">May (8)</a></li>
430
431 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/06/">June (2)</a></li>
432
433 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/07/">July (2)</a></li>
434
435 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/08/">August (5)</a></li>
436
437 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/09/">September (2)</a></li>
438
439 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/10/">October (3)</a></li>
440
441 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/11/">November (8)</a></li>
442
443 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/12/">December (5)</a></li>
444
445 </ul></li>
446
447 <li>2015
448 <ul>
449
450 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/01/">January (7)</a></li>
451
452 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/02/">February (6)</a></li>
453
454 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/03/">March (1)</a></li>
455
456 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/04/">April (4)</a></li>
457
458 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/05/">May (3)</a></li>
459
460 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/06/">June (4)</a></li>
461
462 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/07/">July (6)</a></li>
463
464 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/08/">August (2)</a></li>
465
466 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/09/">September (2)</a></li>
467
468 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/10/">October (9)</a></li>
469
470 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/11/">November (6)</a></li>
471
472 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/12/">December (3)</a></li>
473
474 </ul></li>
475
476 <li>2014
477 <ul>
478
479 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/01/">January (2)</a></li>
480
481 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/02/">February (3)</a></li>
482
483 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
484
485 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/04/">April (7)</a></li>
486
487 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/05/">May (1)</a></li>
488
489 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/06/">June (2)</a></li>
490
491 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/07/">July (2)</a></li>
492
493 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/08/">August (2)</a></li>
494
495 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/09/">September (5)</a></li>
496
497 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/10/">October (6)</a></li>
498
499 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/11/">November (3)</a></li>
500
501 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/12/">December (5)</a></li>
502
503 </ul></li>
504
505 <li>2013
506 <ul>
507
508 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
509
510 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
511
512 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
513
514 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
515
516 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
517
518 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
519
520 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
521
522 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
523
524 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
525
526 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/10/">October (7)</a></li>
527
528 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/11/">November (9)</a></li>
529
530 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/12/">December (3)</a></li>
531
532 </ul></li>
533
534 <li>2012
535 <ul>
536
537 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
538
539 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
540
541 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
542
543 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
544
545 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
546
547 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
548
549 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
550
551 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
552
553 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
554
555 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
556
557 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
558
559 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
560
561 </ul></li>
562
563 <li>2011
564 <ul>
565
566 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
567
568 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
569
570 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
571
572 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
573
574 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
575
576 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
577
578 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
579
580 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
581
582 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
583
584 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
585
586 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
587
588 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
589
590 </ul></li>
591
592 <li>2010
593 <ul>
594
595 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
596
597 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
598
599 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
600
601 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
602
603 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
604
605 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
606
607 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
608
609 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
610
611 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
612
613 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
614
615 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
616
617 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
618
619 </ul></li>
620
621 <li>2009
622 <ul>
623
624 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
625
626 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
627
628 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
629
630 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
631
632 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
633
634 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
635
636 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
637
638 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
639
640 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
641
642 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
643
644 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
645
646 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
647
648 </ul></li>
649
650 <li>2008
651 <ul>
652
653 <li><a href="https://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
654
655 <li><a href="https://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
656
657 </ul></li>
658
659 </ul>
660
661
662
663 <h2>Tags</h2>
664 <ul>
665
666 <li><a href="https://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (19)</a></li>
667
668 <li><a href="https://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
669
670 <li><a href="https://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
671
672 <li><a href="https://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
673
674 <li><a href="https://people.skolelinux.org/pere/blog/tags/betalkontant">betalkontant (9)</a></li>
675
676 <li><a href="https://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (12)</a></li>
677
678 <li><a href="https://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (17)</a></li>
679
680 <li><a href="https://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
681
682 <li><a href="https://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
683
684 <li><a href="https://people.skolelinux.org/pere/blog/tags/debian">debian (187)</a></li>
685
686 <li><a href="https://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (159)</a></li>
687
688 <li><a href="https://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (9)</a></li>
689
690 <li><a href="https://people.skolelinux.org/pere/blog/tags/digistan">digistan (11)</a></li>
691
692 <li><a href="https://people.skolelinux.org/pere/blog/tags/dld">dld (18)</a></li>
693
694 <li><a href="https://people.skolelinux.org/pere/blog/tags/docbook">docbook (30)</a></li>
695
696 <li><a href="https://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
697
698 <li><a href="https://people.skolelinux.org/pere/blog/tags/english">english (443)</a></li>
699
700 <li><a href="https://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
701
702 <li><a href="https://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (14)</a></li>
703
704 <li><a href="https://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (34)</a></li>
705
706 <li><a href="https://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (9)</a></li>
707
708 <li><a href="https://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (20)</a></li>
709
710 <li><a href="https://people.skolelinux.org/pere/blog/tags/h264">h264 (20)</a></li>
711
712 <li><a href="https://people.skolelinux.org/pere/blog/tags/intervju">intervju (43)</a></li>
713
714 <li><a href="https://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (16)</a></li>
715
716 <li><a href="https://people.skolelinux.org/pere/blog/tags/kart">kart (23)</a></li>
717
718 <li><a href="https://people.skolelinux.org/pere/blog/tags/kodi">kodi (4)</a></li>
719
720 <li><a href="https://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
721
722 <li><a href="https://people.skolelinux.org/pere/blog/tags/lego">lego (5)</a></li>
723
724 <li><a href="https://people.skolelinux.org/pere/blog/tags/lenker">lenker (8)</a></li>
725
726 <li><a href="https://people.skolelinux.org/pere/blog/tags/linuxcnc">linuxcnc (4)</a></li>
727
728 <li><a href="https://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (2)</a></li>
729
730 <li><a href="https://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
731
732 <li><a href="https://people.skolelinux.org/pere/blog/tags/madewithcc">madewithcc (3)</a></li>
733
734 <li><a href="https://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
735
736 <li><a href="https://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (44)</a></li>
737
738 <li><a href="https://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (13)</a></li>
739
740 <li><a href="https://people.skolelinux.org/pere/blog/tags/noark5">noark5 (23)</a></li>
741
742 <li><a href="https://people.skolelinux.org/pere/blog/tags/norsk">norsk (320)</a></li>
743
744 <li><a href="https://people.skolelinux.org/pere/blog/tags/nuug">nuug (198)</a></li>
745
746 <li><a href="https://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (40)</a></li>
747
748 <li><a href="https://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
749
750 <li><a href="https://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (75)</a></li>
751
752 <li><a href="https://people.skolelinux.org/pere/blog/tags/personvern">personvern (114)</a></li>
753
754 <li><a href="https://people.skolelinux.org/pere/blog/tags/raid">raid (2)</a></li>
755
756 <li><a href="https://people.skolelinux.org/pere/blog/tags/reactos">reactos (1)</a></li>
757
758 <li><a href="https://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
759
760 <li><a href="https://people.skolelinux.org/pere/blog/tags/rfid">rfid (3)</a></li>
761
762 <li><a href="https://people.skolelinux.org/pere/blog/tags/robot">robot (17)</a></li>
763
764 <li><a href="https://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
765
766 <li><a href="https://people.skolelinux.org/pere/blog/tags/ruter">ruter (7)</a></li>
767
768 <li><a href="https://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
769
770 <li><a href="https://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (59)</a></li>
771
772 <li><a href="https://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
773
774 <li><a href="https://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (5)</a></li>
775
776 <li><a href="https://people.skolelinux.org/pere/blog/tags/standard">standard (74)</a></li>
777
778 <li><a href="https://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (7)</a></li>
779
780 <li><a href="https://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (14)</a></li>
781
782 <li><a href="https://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (64)</a></li>
783
784 <li><a href="https://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (5)</a></li>
785
786 <li><a href="https://people.skolelinux.org/pere/blog/tags/usenix">usenix (2)</a></li>
787
788 <li><a href="https://people.skolelinux.org/pere/blog/tags/valg">valg (9)</a></li>
789
790 <li><a href="https://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (20)</a></li>
791
792 <li><a href="https://people.skolelinux.org/pere/blog/tags/video">video (77)</a></li>
793
794 <li><a href="https://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
795
796 <li><a href="https://people.skolelinux.org/pere/blog/tags/web">web (42)</a></li>
797
798 </ul>
799
800
801 </div>
802 <p style="text-align: right">
803 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
804 </p>
805
806 </body>
807 </html>