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