]> pere.pagekite.me Git - homepage.git/blob - blog/index.html
Generated.
[homepage.git] / blog / 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>
4 <head>
5 <title>Petter Reinholdtsen</title>
6 <link rel="stylesheet" type="text/css" media="screen" href="http://people.skolelinux.org/pere/blog/style.css">
7 <link rel="alternate" title="RSS Feed" href="http://people.skolelinux.org/pere/blog/index.rss" type="application/rss+xml">
8
9 </head>
10 <body>
11
12 <div class="title">
13 <h1>
14 <a href="http://people.skolelinux.org/pere/blog/">Petter Reinholdtsen</a>
15
16 </h1>
17
18 </div>
19
20
21
22 <div class="entry">
23 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Skolelinux_i_Osloskolen.html">Skolelinux i Osloskolen</a></div>
24 <div class="date">2010-08-26 22:25</div>
25 <div class="body">
26 <p>Denne høsten skal endelig alle Osloskolene få mulighet til å bruke
27 <a href="http://www.skolelinux.org/">Skolelinux</a>. Ny IT-løsning
28 har vært rullet ut i noen måneder nå, og så vidt jeg fikk vite før
29 sommeren skulle alle skoler ha nytt opplegg på plass før oppstart nå i
30 høst. På alle skolene skal en kunne velge ved installasjon om en skal
31 ha Windows eller Skolelinux på maskinene, og en kan i tillegg
32 PXE-boote maskinene over nett som tynne klienter eller diskløse
33 arbeidsstasjoner. Jeg er spent på hvor mange skoler som velger å ta i
34 bruk Skolelinux, og gleder meg til å se hvordan dette utvikler seg.
35 Løsningen leveres av
36 <a href="http://www.logica.no/">Logica</a> med
37 <a href="http://www.slxdrift.no/">Skolelinux Drift AS</a> som
38 underleverandør, og jeg har vært involvert i utviklingen av løsningen
39 via Skolelinux Drift AS siden prosjektet starter. Jeg synes det er
40 fantastisk at Skolelinux er kommet så langt siden vi startet i 2001 at
41 alle elevene i Osloskolene nå skal få mulighet til å bruke
42 løsningen. Jeg håper de vil sette pris på alle de
43 <a href="http://www.skolelinux.no/linux-signpost/">fantastiske
44 brukerprogrammene</a> som er tilgjengelig i Skolelinux.</p>
45 </div>
46 <div class="tags">
47
48
49
50 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>.
51
52 </div>
53 </div>
54 <div class="padding"></div>
55
56 <div class="entry">
57 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Broken_umask_handling_with_sshfs.html">Broken umask handling with sshfs</a></div>
58 <div class="date">2010-08-26 13:30</div>
59 <div class="body">
60 <p>My file system sematics program
61 <a href="http://people.skolelinux.org/pere/blog/Testing_if_a_file_system_can_be_used_for_home_directories___.html">presented
62 a few days ago</a> is very useful to verify that a file system can
63 work as a unix home directory,and today I had to extend it a bit. I'm
64 looking into alternatives for home directory access here at the
65 University of Oslo, and one of the options is sshfs. My friend
66 Finn-Arne mentioned a while back that they had used sshfs with Debian
67 Edu, but stopped because of problems. I asked today what the problems
68 where, and he mentioned that sshfs failed to handle umask properly.
69 Trying to detect the problem I wrote this addition to my fs testing
70 script:</p>
71
72 <pre>
73 mode_t touch_get_mode(const char *name, mode_t mode) {
74 mode_t retval = 0;
75 int fd = open(name, O_RDWR|O_CREAT|O_LARGEFILE, mode);
76 if (-1 != fd) {
77 unlink(name);
78 struct stat statbuf;
79 if (-1 != fstat(fd, &statbuf)) {
80 retval = statbuf.st_mode & 0x1ff;
81 }
82 close(fd);
83 }
84 return retval;
85 }
86
87 /* Try to detect problem discovered using sshfs */
88 int test_umask(void) {
89 printf("info: testing umask effect on file creation\n");
90
91 mode_t orig_umask = umask(000);
92 mode_t newmode;
93 if (0666 != (newmode = touch_get_mode("foobar", 0666))) {
94 printf(" error: Wrong file mode %o when creating using mode 666 and umask 000\n",
95 newmode);
96 }
97 umask(007);
98 if (0660 != (newmode = touch_get_mode("foobar", 0666))) {
99 printf(" error: Wrong file mode %o when creating using mode 666 and umask 007\n",
100 newmode);
101 }
102
103 umask (orig_umask);
104 return 0;
105 }
106
107 int main(int argc, char **argv) {
108 [...]
109 test_umask();
110 return 0;
111 }
112 </pre>
113
114 <p>Sure enough. On NFS to a netapp, I get this result:</p>
115
116 <pre>
117 Testing POSIX/Unix sematics on file system
118 info: testing symlink creation
119 info: testing subdirectory creation
120 info: testing fcntl locking
121 Read-locking 1 byte from 1073741824
122 Read-locking 510 byte from 1073741826
123 Unlocking 1 byte from 1073741824
124 Write-locking 1 byte from 1073741824
125 Write-locking 510 byte from 1073741826
126 Unlocking 2 byte from 1073741824
127 info: testing umask effect on file creation
128 </pre>
129
130 <p>When mounting the same directory using sshfs, I get this
131 result:</p>
132
133 <pre>
134 Testing POSIX/Unix sematics on file system
135 info: testing symlink creation
136 info: testing subdirectory creation
137 info: testing fcntl locking
138 Read-locking 1 byte from 1073741824
139 Read-locking 510 byte from 1073741826
140 Unlocking 1 byte from 1073741824
141 Write-locking 1 byte from 1073741824
142 Write-locking 510 byte from 1073741826
143 Unlocking 2 byte from 1073741824
144 info: testing umask effect on file creation
145 error: Wrong file mode 644 when creating using mode 666 and umask 000
146 error: Wrong file mode 640 when creating using mode 666 and umask 007
147 </pre>
148
149 <p>So, I can conclude that sshfs is better than smb to a Netapp or a
150 Windows server, but not good enough to be used as a home
151 directory.</p>
152
153 <p>Update 2010-08-26: Reported the issue in
154 <a href="http://bugs.debian.org/594498">BTS report #594498</a></p>
155 </div>
156 <div class="tags">
157
158
159
160 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>.
161
162 </div>
163 </div>
164 <div class="padding"></div>
165
166 <div class="entry">
167 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Elektronisk_stemmegiving_er_ikke_til____stole_p_____heller_ikke_i_Norge.html">Elektronisk stemmegiving er ikke til å stole på - heller ikke i Norge</a></div>
168 <div class="date">2010-08-23 19:30</div>
169 <div class="body">
170 <p>I Norge pågår en prosess for å
171 <a href="http://www.e-valg.dep.no/">innføre elektronisk
172 stemmegiving</a> ved kommune- og stortingsvalg. Dette skal
173 introduseres i 2011. Det er all grunn til å tro at valg i Norge ikke
174 vil være til å stole på hvis dette blir gjennomført. Da det hele var
175 oppe til høring i 2006 forfattet jeg
176 <a href="http://www.nuug.no/dokumenter/valg-horing-2006-09.pdf">en
177 høringsuttalelse fra NUUG</a> (og EFN som hengte seg på) som skisserte
178 hvilke punkter som må oppfylles for at en skal kunne stole på et valg,
179 og elektronisk stemmegiving mangler flere av disse. Elektronisk
180 stemmegiving er for alle praktiske formål å putte ens stemme i en sort
181 boks under andres kontroll, og satse på at de som har kontroll med
182 boksen er til å stole på - uten at en har mulighet til å verifisere
183 dette selv. Det er ikke slik en gjennomfører demokratiske valg.</p>
184
185 <p>Da problemet er fundamentalt med hvordan elektronisk stemmegiving
186 må fungere for at også ikke-krypografer skal kunne delta, har det vært
187 mange rapporter om hvordan elektronisk stemmegiving har sviktet i land
188 etter land. En
189 <a href="http://wiki.nuug.no/uttalelser/2006-elektronisk-stemmegiving">liten
190 samling referanser</a> finnes på NUUGs wiki. Den siste er fra India,
191 der valgkomisjonen har valgt
192 <a href="http://www.freedom-to-tinker.com/blog/jhalderm/electronic-voting-researcher-arrested-over-anonymous-source">å
193 pusse politiet på en forsker</a> som har dokumentert svakheter i
194 valgsystemet.</p>
195
196 <p>Her i Norge har en valgt en annen tilnærming, der en forsøker seg
197 med teknobabbel for å få befolkningen til å tro at dette skal bli
198 sikkert. Husk, elektronisk stemmegiving underminerer de demokratiske
199 valgene i Norge, og bør ikke innføres.</p>
200
201 <p>Den offentlige diskusjonen blir litt vanskelig av at media har
202 valgt å kalle dette "evalg", som kan sies å både gjelde elektronisk
203 opptelling av valget som Norge har gjort siden 60-tallet og som er en
204 svært god ide, og elektronisk opptelling som er en svært dårlig ide.
205 Diskusjonen gir ikke mening hvis en skal diskutere om en er for eller
206 mot "evalg", og jeg forsøker derfor å være klar på at jeg snakker om
207 elektronisk stemmegiving og unngå begrepet "evalg".</p>
208 </div>
209 <div class="tags">
210
211
212
213 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
214
215 </div>
216 </div>
217 <div class="padding"></div>
218
219 <div class="entry">
220 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Robot__reis_deg___.html">Robot, reis deg...</a></div>
221 <div class="date">2010-08-21 22:10</div>
222 <div class="body">
223 <p>I dag fikk jeg endelig tittet litt på mine nyinnkjøpte roboter, og
224 har brukt noen timer til å google etter interessante referanser og
225 aktuell kildekode for bruk på Linux. Det mest lovende så langt er
226 <a href="http://ispykee.toyz.org/">ispykee</a>, som har en
227 BSD-lisensiert linux-daemon som står som mellomledd mellom roboter på
228 lokalnettet og en sentral tjeneste der en iPhone kan koble seg opp for
229 å fjernstyre roboten. Linux-daemonen implementerer deler av
230 protokollen som roboten forstår. Etter å ha knotet litt med å oppnå
231 kontakt med roboten (den oppretter et eget ad-hoc wifi-nett, så jeg
232 måtte gå av mitt vanlige nett for å få kontakt), og kommet frem til at
233 den lytter på IP-port 9000 og 9001, gikk jeg i gang med å finne ut
234 hvordan jeg kunne snakke med roboten vha. disse portene. Robotbiten
235 av protokollen er publisert av produsenten med GPL-lisens, slik at det
236 er mulig å se hvordan protokollen fungerer. Det finnes en java-klient
237 for Android som så ganske snasen ut, men fant ingen kildekode for
238 denne. Derimot hadde iphone-løsningen kildekode, så jeg tok
239 utgangspunkt i den.</p>
240
241 <p>Daemonen ville i utgangspunktet forsøke å kontakte den sentrale
242 tjenesten som iphone-programmet kobler seg til. Jeg skrev dette om
243 til i stedet å sette opp en nettverkstjeneste på min lokale maskin,
244 som jeg kan koble meg opp til med telnet og gi kommandoer til roboten
245 (act, forward, right, left, etc). Det involverte i praksis å bytte ut
246 socket()/connect() med socket()/bind()/listen()/accept() for å gjøre
247 klienten om til en tjener.</p>
248
249 <p>Mens jeg har forsøkt å få roboten til å bevege seg har min samboer
250 skrudd sammen resten av roboten for å få montert kamera og plastpynten
251 (armer, plastfiber for lys). Nå er det hele montert, og roboten er
252 klar til bruk. Må få flyttet den over til mitt vanlige trådløsnett
253 før det blir praktisk, men de bitene av protokollen er ikke
254 implementert i ispykee-daemonen, så der må jeg enten få tak i en mac
255 eller en windows-maskin, eller implementere det selv.</p>
256
257 <p>Vi var tre som kjøpte slike roboter, og vi har blitt enige om å
258 samle notater og referanser på <a
259 href="http://wiki.nuug.no/grupper/robot/">NUUGs wiki</a>. Ta en titt
260 der hvis du er nysgjerrig.</p>
261 </div>
262 <div class="tags">
263
264
265
266 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>, <a href="http://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
267
268 </div>
269 </div>
270 <div class="padding"></div>
271
272 <div class="entry">
273 <div class="title"><a href="http://people.skolelinux.org/pere/blog/2_Spykee_roboter_i_hus__n___skal_det_lekes.html">2 Spykee-roboter i hus, nå skal det lekes</a></div>
274 <div class="date">2010-08-18 13:30</div>
275 <div class="body">
276 <p>Jeg kjøpte nettopp to
277 <a href="http://www.spykee-robot.com/">Spykee</a>-roboter, for test og
278 leking. Kjøpte to da det var så billige, og gir meg mulighet til å
279 eksperimentere uten å være veldig redd for å ødelegge alt ved å bytte
280 ut firmware og slikt. Oppdaget at lekebutikken på Bryn senter hadde
281 en liten stabel på lager som de ikke hadde klart å selge ut etter
282 fjorårets juleinnkjøp, og var villig til å selge for en femtedel av
283 vanlig pris. Jeg, Ronny og Jarle har skaffet oss restbeholdningen, og
284 det blir morsomt å se hva vi får ut av dette.</p>
285
286 <p>Roboten har belter styrt av to motorer, kamera, høytaler, mikrofon
287 og wifi-tilkobling. Det hele styrt av en GPL-lisensiert databoks som
288 jeg mistenker kjører linux. Firmware-kildekoden ble visst publisert i
289 mai. Eneste utfordringen er at kontroller-programvaren kun finnes til
290 Windows, men det må en kunne jobbe seg rundt når vi har kildekoden til
291 firmwaren. :)</p>
292
293 <ul>
294 <li><a href="http://en.wikipedia.org/wiki/Spykee">Wikipedia-oppføring</a></li>
295 <li><a href=http://www.spykeeworld.com/spykee/US/freeSoftware.html">Nedlasting av firmware-kilden</a></li>
296 <li><a href="http://wiki.nuug.no/grupper/robot">prosjektwiki hos NUUG</a></li>
297 </ul>
298 </div>
299 <div class="tags">
300
301
302
303 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>, <a href="http://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
304
305 </div>
306 </div>
307 <div class="padding"></div>
308
309 <div class="entry">
310 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Rob_Weir__How_to_Crush_Dissent.html">Rob Weir: How to Crush Dissent</a></div>
311 <div class="date">2010-08-15 22:20</div>
312 <div class="body">
313 <p>I found the notes from Rob Weir on
314 <a href="http://feedproxy.google.com/~r/robweir/antic-atom/~3/VGb23-kta8c/how-to-crush-dissent.html">how
315 to crush dissent</a> matching my own thoughts on the matter quite
316 well. Highly recommended for those wondering which road our society
317 should go down. In my view we have been heading the wrong way for a
318 long time.</p>
319 </div>
320 <div class="tags">
321
322
323
324 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>, <a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
325
326 </div>
327 </div>
328 <div class="padding"></div>
329
330 <div class="entry">
331 <div class="title"><a href="http://people.skolelinux.org/pere/blog/No_hardcoded_config_on_Debian_Edu_clients.html">No hardcoded config on Debian Edu clients</a></div>
332 <div class="date">2010-08-09 20:15</div>
333 <div class="body">
334 <p>As reported earlier, the last few days I have looked at how Debian
335 Edu clients are configured, and tried to get rid of all hardcoded
336 configuration settings on the clients. I believe the work to be
337 mostly done, and the clients seem to work just fine with dynamically
338 generated configuration.</p>
339
340 <p>What is the point, you might ask? The point is to allow a Debian
341 Edu desktop to integrate into an existing network infrastructure
342 without any manual configuration.</p>
343
344 <p>This is what happens when installing a Debian Edu client here at
345 the University of Oslo using PXE. With the PXE installation, I am
346 asked for language (Norwegian Bokmål), locality (Norway) and keyboard
347 layout (no-latin1), Debian Edu profile (Roaming Workstation), if I
348 accept to reformat the hard drive (yes), if I want to submit info to
349 popcon.debian.org (no) and root password (secret). After answering
350 these questions, the installer goes ahead and does its thing, and
351 after around 50 minutes it is done. I press enter to finish the
352 installation, and the machine reboots into KDE. When the machine is
353 ready and kdm asks for login information, I enter my university
354 username and password, am told by kdm that a local home directory has
355 been created and that I must log in again, and finally log in with the
356 same username and password to the KDE 4.4 desktop. At no point during
357 this process did it ask for university specific settings, and all the
358 required configuration was dynamically detected using information
359 fetched via DHCP and DNS. The roaming workstation is now ready for
360 use.</p>
361
362 <p>How was this done, you might wonder? First of all, here is the
363 list of things that need to be configured on the client to get it
364 working properly out of the box:</p>
365
366 <ul>
367 <li>IP address/netmask and DNS server.</li>
368 <li>Web proxy URL.</li>
369 <li>LDAP server for NSS directory information (user, group, etc).</li>
370 <li>Kerberos server for PAM password checking.</li>
371 <li>SMB mount point to access the network home directory. (*)</li>
372 <li>Central syslog server to send syslog messages to. (*)</li>
373 <li>Sitesummary collector URL to submit info to central server. (*)</li>
374 </ul>
375
376 <p>(Hm, did I forget anything? Let me knew if I did.)</p>
377
378 <p>The points marked (*) are not required to be able to use the
379 machine, but needed to provide central storage and allowing system
380 administrators to track their machines. Since yesterday, everything
381 but the sitesummary collector URL is dynamically discovered at boot
382 and installation time in the svn version of Debian Edu.</p>
383
384 <p>The IP and DNS setup is fetched during boot using DHCP as usual.
385 When a DHCP update arrives, the proxy setup is updated by looking for
386 http://wpat/wpad.dat and using the content of this WPAD file to
387 configure the http and ftp proxy in /etc/environment and
388 /etc/apt/apt.conf. I decided to update the proxy setup using a DHCP
389 hook to ensure that the client stops using the Debian Edu proxy when
390 it is moved outside the Debian Edu network, and instead uses any local
391 proxy present on the new network when it moves around.</p>
392
393 <p>The DNS names of the LDAP, Kerberos and syslog server and related
394 configuration are generated using DNS information at boot. First the
395 installer looks for a host named ldap in the current DNS domain. If
396 not found, it looks for _ldap._tcp SRV records in DNS instead. If an
397 LDAP server is found, its root DSE entry is requested and the
398 attributes namingContexts and defaultNamingContext are used to
399 determine which LDAP base to use for NSS. If there are several
400 namingContexts attibutes and the defaultNamingContext is present, that
401 LDAP subtree is used as the base. If defaultNamingContext is missing,
402 the subtrees listed as namingContexts are searched in sequence for any
403 object with class posixAccount or posixGroup, and the first one with
404 such an object is used as the LDAP base. For Kerberos, a similar
405 search is done by first looking for a host named kerberos, and then
406 for the _kerberos._tcp SRV record. I've been unable to find a way to
407 look up the Kerberos realm, so for this the upper case string of the
408 current DNS domain is used.</p>
409
410 <p>For the syslog server, the hosts syslog and loghost are searched
411 for, and the _syslog._udp SRV record is consulted if no such host is
412 found. This algorithm works for both Debian Edu and the University of
413 Oslo. A similar strategy would work for locating the sitesummary
414 server, but have not been implemented yet. I decided to fetch and
415 save these settings during installation, to make sure moving to a
416 different network does not change the set of users being allowed to
417 log in nor the passwords required to log in. Usernames and passwords
418 will be cached by sssd when the user logs in on the Debian Edu
419 network, and will not change as the laptop move around. For a
420 non-roaming machine, there is no caching, but given that it is
421 supposed to stay in place it should not matter much. Perhaps we
422 should switch those to use sssd too?</p>
423
424 <p>The user's SMB mount point for the network home directory is
425 located when the user logs in for the first time. The LDAP server is
426 consulted to look for the user's LDAP object and the sambaHomePath
427 attribute is used if found. If it isn't found, the home directory
428 path fetched from NSS is used instead. Assuming the path is of the
429 form /site/server/directory/username, the second part is looked up in
430 DNS and used to generate a SMB URL of the form
431 smb://server.domain/username. This algorithm works for both Debian
432 edu and the University of Oslo. Perhaps there are better attributes
433 to use or a better algorithm that works for more sites, but this will
434 do for now. :)</p>
435
436 <p>This work should make it easier to integrate the Debian Edu clients
437 into any LDAP/Kerberos infrastructure, and make the current setup even
438 more flexible than before. I suspect it will also work for thin
439 client servers, allowing one to easily set up LTSP and hook it into a
440 existing network infrastructure, but I have not had time to test this
441 yet.</p>
442
443 <p>If you want to help out with implementing these things for Debian
444 Edu, please contact us on debian-edu@lists.debian.org.</p>
445
446 <p>Update 2010-08-09: Simon Farnsworth gave me a heads-up on how to
447 detect Kerberos realm from DNS, by looking for _kerberos TXT entries
448 before falling back to the upper case DNS domain name. Will have to
449 implement it for Debian Edu. :)</p>
450 </div>
451 <div class="tags">
452
453
454
455 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>.
456
457 </div>
458 </div>
459 <div class="padding"></div>
460
461 <div class="entry">
462 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Testing_if_a_file_system_can_be_used_for_home_directories___.html">Testing if a file system can be used for home directories...</a></div>
463 <div class="date">2010-08-08 21:20</div>
464 <div class="body">
465 <p>A few years ago, I was involved in a project planning to use
466 Windows file servers as home directory servers for Debian
467 Edu/Skolelinux machines. This was thought to be no problem, as the
468 access would be through the SMB network file system protocol, and we
469 knew other sites used SMB with unix and samba as the file server to
470 mount home directories without any problems. But, after months of
471 struggling, we had to conclude that our goal was impossible.</p>
472
473 <p>The reason is simply that while SMB can be used for home
474 directories when the file server is Samba running on Unix, this only
475 work because of Samba have some extensions and the fact that the
476 underlying file system is a unix file system. When using a Windows
477 file server, the underlying file system do not have POSIX semantics,
478 and several programs will fail if the users home directory where they
479 want to store their configuration lack POSIX semantics.</p>
480
481 <p>As part of this work, I wrote a small C program I want to share
482 with you all, to replicate a few of the problematic applications (like
483 OpenOffice.org and GCompris) and see if the file system was working as
484 it should. If you find yourself in spooky file system land, it might
485 help you find your way out again. This is the fs-test.c source:</p>
486
487 <pre>
488 /*
489 * Some tests to check the file system sematics. Used to verify that
490 * CIFS from a windows server do not work properly as a linux home
491 * directory.
492 * License: GPL v2 or later
493 *
494 * needs libsqlite3-dev and build-essential installed
495 * compile with: gcc -Wall -lsqlite3 -DTEST_SQLITE fs-test.c -o fs-test
496 */
497
498 #define _FILE_OFFSET_BITS 64
499 #define _LARGEFILE_SOURCE 1
500 #define _LARGEFILE64_SOURCE 1
501
502 #define _GNU_SOURCE /* for asprintf() */
503
504 #include &lt;errno.h>
505 #include &lt;fcntl.h>
506 #include &lt;stdio.h>
507 #include &lt;string.h>
508 #include &lt;stdlib.h>
509 #include &lt;sys/file.h>
510 #include &lt;sys/stat.h>
511 #include &lt;sys/types.h>
512 #include &lt;unistd.h>
513
514 #ifdef TEST_SQLITE
515 /*
516 * Test sqlite open, as done by gcompris require the libsqlite3-dev
517 * package and linking with -lsqlite3. A more low level test is
518 * below.
519 * See also &lt;URL: http://www.sqlite.org./faq.html#q5 >.
520 */
521 #include &lt;sqlite3.h>
522 #define CREATE_TABLE_USERS \
523 "CREATE TABLE users (user_id INT UNIQUE, login TEXT, lastname TEXT, firstname TEXT, birthdate TEXT, class_id INT ); "
524 int test_sqlite_open(void) {
525 char *zErrMsg;
526 char *name = "testsqlite.db";
527 sqlite3 *db=NULL;
528 unlink(name);
529 int rc = sqlite3_open(name, &db);
530 if( rc ){
531 printf("error: sqlite open of %s failed: %s\n", name, sqlite3_errmsg(db));
532 sqlite3_close(db);
533 return -1;
534 }
535
536 /* create tables */
537 rc = sqlite3_exec(db,CREATE_TABLE_USERS, NULL, 0, &zErrMsg);
538 if( rc != SQLITE_OK ){
539 printf("error: sqlite table create failed: %s\n", zErrMsg);
540 sqlite3_close(db);
541 return -1;
542 }
543 printf("info: sqlite worked\n");
544 sqlite3_close(db);
545 return 0;
546 }
547 #endif /* TEST_SQLITE */
548
549 /*
550 * Demonstrate locking issue found in gcompris using sqlite3. This
551 * work with ext3, but not with cifs server on Windows 2003. This is
552 * done in the sqlite3 library.
553 * See also
554 * &lt;URL:http://www.cygwin.com/ml/cygwin/2001-08/msg00854.html> and the
555 * POSIX specification
556 * &lt;URL:http://www.opengroup.org/onlinepubs/009695399/functions/fcntl.html>.
557 */
558 int test_gcompris_locking(void) {
559 struct flock fl;
560 char *name = "testsqlite.db";
561 unlink(name);
562 int fd = open(name, O_RDWR|O_CREAT|O_LARGEFILE, 0644);
563 printf("info: testing fcntl locking\n");
564
565 fl.l_whence = SEEK_SET;
566 fl.l_pid = getpid();
567 printf(" Read-locking 1 byte from 1073741824");
568 fl.l_start = 1073741824;
569 fl.l_len = 1;
570 fl.l_type = F_RDLCK;
571 if (0 != fcntl(fd, F_SETLK, &fl) ) printf(" - error!\n"); else printf("\n");
572
573 printf(" Read-locking 510 byte from 1073741826");
574 fl.l_start = 1073741826;
575 fl.l_len = 510;
576 fl.l_type = F_RDLCK;
577 if (0 != fcntl(fd, F_SETLK, &fl) ) printf(" - error!\n"); else printf("\n");
578
579 printf(" Unlocking 1 byte from 1073741824");
580 fl.l_start = 1073741824;
581 fl.l_len = 1;
582 fl.l_type = F_UNLCK;
583 if (0 != fcntl(fd, F_SETLK, &fl) ) printf(" - error!\n"); else printf("\n");
584
585 printf(" Write-locking 1 byte from 1073741824");
586 fl.l_start = 1073741824;
587 fl.l_len = 1;
588 fl.l_type = F_WRLCK;
589 if (0 != fcntl(fd, F_SETLK, &fl) ) printf(" - error!\n"); else printf("\n");
590
591 printf(" Write-locking 510 byte from 1073741826");
592 fl.l_start = 1073741826;
593 fl.l_len = 510;
594 if (0 != fcntl(fd, F_SETLK, &fl) ) printf(" - error!\n"); else printf("\n");
595
596 printf(" Unlocking 2 byte from 1073741824");
597 fl.l_start = 1073741824;
598 fl.l_len = 2;
599 fl.l_type = F_UNLCK;
600 if (0 != fcntl(fd, F_SETLK, &fl) ) printf(" - error!\n"); else printf("\n");
601
602 close(fd);
603 return 0;
604 }
605
606 /*
607 * Test if permissions of freshly created directories allow entries
608 * below them. This was a problem with OpenOffice.org and gcompris.
609 * Mounting with option 'sync' seem to solve this problem while
610 * slowing down file operations.
611 */
612 int test_subdirectory_creation(void) {
613 #define LEVELS 5
614 char *path = strdup("test");
615 char *dirs[LEVELS];
616 int level;
617 printf("info: testing subdirectory creation\n");
618 for (level = 0; level &lt; LEVELS; level++) {
619 char *newpath = NULL;
620 if (-1 == mkdir(path, 0777)) {
621 printf(" error: Unable to create directory '%s': %s\n",
622 path, strerror(errno));
623 break;
624 }
625 asprintf(&newpath, "%s/%s", path, "test");
626 free(path);
627 path = newpath;
628 }
629 return 0;
630 }
631
632 /*
633 * Test if symlinks can be created. This was a problem detected with
634 * KDE.
635 */
636 int test_symlinks(void) {
637 printf("info: testing symlink creation\n");
638 unlink("symlink");
639 if (-1 == symlink("file", "symlink"))
640 printf(" error: Unable to create symlink\n");
641 return 0;
642 }
643
644 int main(int argc, char **argv) {
645 printf("Testing POSIX/Unix sematics on file system\n");
646 test_symlinks();
647 test_subdirectory_creation();
648 #ifdef TEST_SQLITE
649 test_sqlite_open();
650 #endif /* TEST_SQLITE */
651 test_gcompris_locking();
652 return 0;
653 }
654 </pre>
655
656 <p>When everything is working, it should print something like
657 this:</p>
658
659 <pre>
660 Testing POSIX/Unix sematics on file system
661 info: testing symlink creation
662 info: testing subdirectory creation
663 info: sqlite worked
664 info: testing fcntl locking
665 Read-locking 1 byte from 1073741824
666 Read-locking 510 byte from 1073741826
667 Unlocking 1 byte from 1073741824
668 Write-locking 1 byte from 1073741824
669 Write-locking 510 byte from 1073741826
670 Unlocking 2 byte from 1073741824
671 </pre>
672
673 <p>I do not remember the exact details of the problems we saw, but one
674 of them was with locking, where if I remember correctly, POSIX allow a
675 read-only lock to be upgraded to a read-write lock without unlocking
676 the read-only lock (while Windows do not). Another was a bug in the
677 CIFS/SMB client implementation in the Linux kernel where directory
678 meta information would be wrong for a fraction of a second, making
679 OpenOffice.org fail to create its deep directory tree because it was
680 not allowed to create files in its freshly created directory.</p>
681
682 <p>Anyway, here is a nice tool for your tool box, might you never need
683 it. :)</p>
684 </div>
685 <div class="tags">
686
687
688
689 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>.
690
691 </div>
692 </div>
693 <div class="padding"></div>
694
695 <div class="entry">
696 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Autodetecting_Client_setup_for_roaming_workstations_in_Debian_Edu.html">Autodetecting Client setup for roaming workstations in Debian Edu</a></div>
697 <div class="date">2010-08-07 14:45</div>
698 <div class="body">
699 <p>A few days ago, I
700 <a href="http://people.skolelinux.org/pere/blog/Debian_Edu_roaming_workstation___at_the_university_of_Oslo.html">tried
701 to install</a> a Roaming workation profile from Debian Edu/Squeeze
702 while on the university network here at the University of Oslo, and
703 noticed how much had to change to get it operational using the
704 university infrastructure. It was fairly easy, but it occured to me
705 that Debian Edu would improve a lot if I could get the client to
706 connect without any changes at all, and thus let the client configure
707 itself during installation and first boot to use the infrastructure
708 around it. Now I am a huge step further along that road.</p>
709
710 <p>With our current squeeze-test packages, I can select the roaming
711 workstation profile and get a working laptop connecting to the
712 university LDAP server for user and group and our active directory
713 servers for Kerberos authentication. All this without any
714 configuration at all during installation. My users home directory got
715 a bookmark in the KDE menu to mount it via SMB, with the correct URL.
716 In short, openldap and sssd is correctly configured. In addition to
717 this, the client look for http://wpad/wpad.dat to configure a web
718 proxy, and when it fail to find it no proxy settings are stored in
719 /etc/environment and /etc/apt/apt.conf. Iceweasel and KDE is
720 configured to look for the same wpad configuration and also do not use
721 a proxy when at the university network. If the machine is moved to a
722 network with such wpad setup, it would automatically use it when DHCP
723 gave it a IP address.</p>
724
725 <p>The LDAP server is located using DNS, by first looking for the DNS
726 entry ldap.$domain. If this do not exist, it look for the
727 _ldap._tcp.$domain SRV records and use the first one as the LDAP
728 server. Next, it connects to the LDAP server and search all
729 namingContexts entries for posixAccount or posixGroup objects, and
730 pick the first one as the LDAP base. For Kerberos, a similar
731 algorithm is used to locate the LDAP server, and the realm is the
732 uppercase version of $domain.</p>
733
734 <p>So, what is not working, you might ask. SMB mounting my home
735 directory do not work. No idea why, but suspected the incorrect
736 Kerberos settings in /etc/krb5.conf and /etc/samba/smb.conf might be
737 the cause. These are not properly configured during installation, and
738 had to be hand-edited to get the correct Kerberos realm and server,
739 but SMB mounting still do not work. :(</p>
740
741 <p>With this automatic configuration in place, I expect a Debian Edu
742 roaming profile installation would be able to automatically detect and
743 connect to any site using LDAP and Kerberos for NSS directory and PAM
744 authentication. It should also work out of the box in a Active
745 Directory environment providing posixAccount and posixGroup objects
746 with UID and GID values.</p>
747
748 <p>If you want to help out with implementing these things for Debian
749 Edu, please contact us on debian-edu@lists.debian.org.</p>
750 </div>
751 <div class="tags">
752
753
754
755 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>.
756
757 </div>
758 </div>
759 <div class="padding"></div>
760
761 <div class="entry">
762 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Debian_Edu_roaming_workstation___at_the_university_of_Oslo.html">Debian Edu roaming workstation - at the university of Oslo</a></div>
763 <div class="date">2010-08-03 23:30</div>
764 <div class="body">
765 <p>The new roaming workstation profile in Debian Edu/Squeeze is fairly
766 similar to the laptop setup am I working on using Ubuntu for the
767 University of Oslo, and just for the heck of it, I tested today how
768 hard it would be to integrate that profile into the university
769 infrastructure. In this case, it is the university LDAP server,
770 Active Directory Kerberos server and SMB mounting from the Netapp file
771 servers.</p>
772
773 <p>I was pleasantly surprised that the only three files needed to be
774 changed (/etc/sssd/sssd.conf, /etc/ldap.conf and
775 /etc/mklocaluser.d/20-debian-edu-config) and one file had to be added
776 (/usr/share/perl5/Debian/Edu_Local.pm), to get the client working.
777 Most of the changes were to get the client to use the university LDAP
778 for NSS and Kerberos server for PAM, but one was to change a hard
779 coded DNS domain name in the mklocaluser hook from .intern to
780 .uio.no.</p>
781
782 <p>This testing was so encouraging, that I went ahead and adjusted the
783 Debian Edu scripts and setup in subversion to centralise the roaming
784 workstation setup a bit more and avoid the hardcoded DNS domain name,
785 so that when I test this tomorrow, I expect to get away with modifying
786 only /etc/sssd/sssd.conf and /etc/ldap.conf to get it to use the
787 university servers.</p>
788
789 <p>My goal is to get the clients to have no hardcoded settings and
790 fetch all their initial setup during installation and first boot, to
791 allow them to be inserted also into environments where the default
792 setup in Debian Edu has been changed or as with the university, where
793 the environment is different but provides the protocols Debian Edu
794 uses.</p>
795 </div>
796 <div class="tags">
797
798
799
800 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>.
801
802 </div>
803 </div>
804 <div class="padding"></div>
805
806 <p style="text-align: right;"><a href="index.rss"><img src="http://people.skolelinux.org/pere/blog/xml.gif" alt="RSS feed" width="36" height="14"></a></p>
807
808 <div id="sidebar">
809
810
811
812
813
814 <h2>Archive</h2>
815 <ul>
816
817 <li>2010
818 <ul>
819
820 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
821
822 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
823
824 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
825
826 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
827
828 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
829
830 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
831
832 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
833
834 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/08/">August (10)</a></li>
835
836 </ul></li>
837
838 <li>2009
839 <ul>
840
841 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
842
843 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
844
845 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
846
847 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
848
849 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
850
851 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
852
853 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
854
855 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
856
857 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
858
859 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
860
861 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
862
863 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
864
865 </ul></li>
866
867 <li>2008
868 <ul>
869
870 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
871
872 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
873
874 </ul></li>
875
876 </ul>
877
878
879
880 <h2>Tags</h2>
881 <ul>
882
883 <li><a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (11)</a></li>
884
885 <li><a href="http://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
886
887 <li><a href="http://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
888
889 <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (10)</a></li>
890
891 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (35)</a></li>
892
893 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (42)</a></li>
894
895 <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (57)</a></li>
896
897 <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (1)</a></li>
898
899 <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (8)</a></li>
900
901 <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (3)</a></li>
902
903 <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (8)</a></li>
904
905 <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (2)</a></li>
906
907 <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
908
909 <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (5)</a></li>
910
911 <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (75)</a></li>
912
913 <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (97)</a></li>
914
915 <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (14)</a></li>
916
917 <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (15)</a></li>
918
919 <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (10)</a></li>
920
921 <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (2)</a></li>
922
923 <li><a href="http://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
924
925 <li><a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (12)</a></li>
926
927 <li><a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (3)</a></li>
928
929 <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (13)</a></li>
930
931 <li><a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (1)</a></li>
932
933 <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (10)</a></li>
934
935 <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (1)</a></li>
936
937 <li><a href="http://people.skolelinux.org/pere/blog/tags/web">web (7)</a></li>
938
939 </ul>
940
941 </div>
942
943 <p style="text-align: right">
944 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v3.7</a>
945 </p>
946 </body>
947 </html>