]> pere.pagekite.me Git - homepage.git/blob - blog/tags/bootsystem/index.html
206a1a1ab5adeae8c48c8892f03c320d21a9136d
[homepage.git] / blog / tags / bootsystem / 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 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: Entries Tagged bootsystem</title>
7 <link rel="stylesheet" type="text/css" media="screen" href="http://people.skolelinux.org/pere/blog/style.css" />
8 <link rel="stylesheet" type="text/css" media="screen" href="http://people.skolelinux.org/pere/blog/vim.css" />
9 <link rel="alternate" title="RSS Feed" href="bootsystem.rss" type="application/rss+xml" />
10 </head>
11 <body>
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 <h3>Entries tagged "bootsystem".</h3>
22
23 <div class="entry">
24 <div class="title">
25 <a href="http://people.skolelinux.org/pere/blog/Debian_init_d_boot_script_example_for_rsyslog.html">Debian init.d boot script example for rsyslog</a>
26 </div>
27 <div class="date">
28 2nd November 2013
29 </div>
30 <div class="body">
31 <p>If one of the points of switching to a new init system in Debian is
32 <a href="http://thomas.goirand.fr/blog/?p=147">to get rid of huge
33 init.d scripts</a>, I doubt we need to switch away from sysvinit and
34 init.d scripts at all. Here is an example init.d script, ie a rewrite
35 of /etc/init.d/rsyslog:</p>
36
37 <p><pre>
38 #!/lib/init/init-d-script
39 ### BEGIN INIT INFO
40 # Provides: rsyslog
41 # Required-Start: $remote_fs $time
42 # Required-Stop: umountnfs $time
43 # X-Stop-After: sendsigs
44 # Default-Start: 2 3 4 5
45 # Default-Stop: 0 1 6
46 # Short-Description: enhanced syslogd
47 # Description: Rsyslog is an enhanced multi-threaded syslogd.
48 # It is quite compatible to stock sysklogd and can be
49 # used as a drop-in replacement.
50 ### END INIT INFO
51 DESC="enhanced syslogd"
52 DAEMON=/usr/sbin/rsyslogd
53 </pre></p>
54
55 <p>Pretty minimalistic to me... For the record, the original sysv-rc
56 script was 137 lines, and the above is just 15 lines, most of it meta
57 info/comments.</p>
58
59 <p>How to do this, you ask? Well, one create a new script
60 /lib/init/init-d-script looking something like this:
61
62 <p><pre>
63 #!/bin/sh
64
65 # Define LSB log_* functions.
66 # Depend on lsb-base (>= 3.2-14) to ensure that this file is present
67 # and status_of_proc is working.
68 . /lib/lsb/init-functions
69
70 #
71 # Function that starts the daemon/service
72
73 #
74 do_start()
75 {
76 # Return
77 # 0 if daemon has been started
78 # 1 if daemon was already running
79 # 2 if daemon could not be started
80 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
81 || return 1
82 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
83 $DAEMON_ARGS \
84 || return 2
85 # Add code here, if necessary, that waits for the process to be ready
86 # to handle requests from services started subsequently which depend
87 # on this one. As a last resort, sleep for some time.
88 }
89
90 #
91 # Function that stops the daemon/service
92 #
93 do_stop()
94 {
95 # Return
96 # 0 if daemon has been stopped
97 # 1 if daemon was already stopped
98 # 2 if daemon could not be stopped
99 # other if a failure occurred
100 start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
101 RETVAL="$?"
102 [ "$RETVAL" = 2 ] && return 2
103 # Wait for children to finish too if this is a daemon that forks
104 # and if the daemon is only ever run from this initscript.
105 # If the above conditions are not satisfied then add some other code
106 # that waits for the process to drop all resources that could be
107 # needed by services started subsequently. A last resort is to
108 # sleep for some time.
109 start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
110 [ "$?" = 2 ] && return 2
111 # Many daemons don't delete their pidfiles when they exit.
112 rm -f $PIDFILE
113 return "$RETVAL"
114 }
115
116 #
117 # Function that sends a SIGHUP to the daemon/service
118 #
119 do_reload() {
120 #
121 # If the daemon can reload its configuration without
122 # restarting (for example, when it is sent a SIGHUP),
123 # then implement that here.
124 #
125 start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
126 return 0
127 }
128
129 SCRIPTNAME=$1
130 scriptbasename="$(basename $1)"
131 echo "SN: $scriptbasename"
132 if [ "$scriptbasename" != "init-d-library" ] ; then
133 script="$1"
134 shift
135 . $script
136 else
137 exit 0
138 fi
139
140 NAME=$(basename $DAEMON)
141 PIDFILE=/var/run/$NAME.pid
142
143 # Exit if the package is not installed
144 #[ -x "$DAEMON" ] || exit 0
145
146 # Read configuration variable file if it is present
147 [ -r /etc/default/$NAME ] && . /etc/default/$NAME
148
149 # Load the VERBOSE setting and other rcS variables
150 . /lib/init/vars.sh
151
152 case "$1" in
153 start)
154 [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
155 do_start
156 case "$?" in
157 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
158 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
159 esac
160 ;;
161 stop)
162 [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
163 do_stop
164 case "$?" in
165 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
166 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
167 esac
168 ;;
169 status)
170 status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
171 ;;
172 #reload|force-reload)
173 #
174 # If do_reload() is not implemented then leave this commented out
175 # and leave 'force-reload' as an alias for 'restart'.
176 #
177 #log_daemon_msg "Reloading $DESC" "$NAME"
178 #do_reload
179 #log_end_msg $?
180 #;;
181 restart|force-reload)
182 #
183 # If the "reload" option is implemented then remove the
184 # 'force-reload' alias
185 #
186 log_daemon_msg "Restarting $DESC" "$NAME"
187 do_stop
188 case "$?" in
189 0|1)
190 do_start
191 case "$?" in
192 0) log_end_msg 0 ;;
193 1) log_end_msg 1 ;; # Old process is still running
194 *) log_end_msg 1 ;; # Failed to start
195 esac
196 ;;
197 *)
198 # Failed to stop
199 log_end_msg 1
200 ;;
201 esac
202 ;;
203 *)
204 echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
205 exit 3
206 ;;
207 esac
208
209 :
210 </pre></p>
211
212 <p>It is based on /etc/init.d/skeleton, and could be improved quite a
213 lot. I did not really polish the approach, so it might not always
214 work out of the box, but you get the idea. I did not try very hard to
215 optimize it nor make it more robust either.</p>
216
217 <p>A better argument for switching init system in Debian than reducing
218 the size of init scripts (which is a good thing to do anyway), is to
219 get boot system that is able to handle the kernel events sensibly and
220 robustly, and do not depend on the boot to run sequentially. The boot
221 and the kernel have not behaved sequentially in years.</p>
222
223 </div>
224 <div class="tags">
225
226
227 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
228
229
230 </div>
231 </div>
232 <div class="padding"></div>
233
234 <div class="entry">
235 <div class="title">
236 <a href="http://people.skolelinux.org/pere/blog/How_is_booting_into_runlevel_1_different_from_single_user_boots_.html">How is booting into runlevel 1 different from single user boots?</a>
237 </div>
238 <div class="date">
239 4th August 2011
240 </div>
241 <div class="body">
242 <p>Wouter Verhelst have some
243 <a href="http://grep.be/blog/en/retorts/pere_kubuntu_boot">interesting
244 comments and opinions</a> on my blog post on
245 <a href="http://people.skolelinux.org/pere/blog/What_should_start_from__etc_rcS_d__in_Debian____almost_nothing.html">the
246 need to clean up /etc/rcS.d/ in Debian</a> and my blog post about
247 <a href="http://people.skolelinux.org/pere/blog/What_is_missing_in_the_Debian_desktop__or_why_my_parents_use_Kubuntu.html">the
248 default KDE desktop in Debian</a>. I only have time to address one
249 small piece of his comment now, and though it best to address the
250 misunderstanding he bring forward:</p>
251
252 <p><blockquote>
253 Currently, a system admin has four options: [...] boot to a
254 single-user system (by adding 'single' to the kernel command line;
255 this runs rcS and rc1 scripts)
256 </blockquote></p>
257
258 <p>This make me believe Wouter believe booting into single user mode
259 and booting into runlevel 1 is the same. I am not surprised he
260 believe this, because it would make sense and is a quite sensible
261 thing to believe. But because the boot in Debian is slightly broken,
262 runlevel 1 do not work properly and it isn't the same as single user
263 mode. I'll try to explain what is actually happing, but it is a bit
264 hard to explain.</p>
265
266 <p>Single user mode is defined like this in /etc/inittab:
267 "<tt>~~:S:wait:/sbin/sulogin</tt>". This means the only thing that is
268 executed in single user mode is sulogin. Single user mode is a boot
269 state "between" the runlevels, and when booting into single user mode,
270 only the scripts in /etc/rcS.d/ are executed before the init process
271 enters the single user state. When switching to runlevel 1, the state
272 is in fact not ending in runlevel 1, but it passes through runlevel 1
273 and end up in the single user mode (see /etc/rc1.d/S03single, which
274 runs "init -t1 S" to switch to single user mode at the end of runlevel
275 1. It is confusing that the 'S' (single user) init mode is not the
276 mode enabled by /etc/rcS.d/ (which is more like the initial boot
277 mode).</p>
278
279 <p>This summary might make it clearer. When booting for the first
280 time into single user mode, the following commands are executed:
281 "<tt>/etc/init.d/rc S; /sbin/sulogin</tt>". When booting into
282 runlevel 1, the following commands are executed: "<tt>/etc/init.d/rc
283 S; /etc/init.d/rc 1; /sbin/sulogin</tt>". A problem show up when
284 trying to continue after visiting single user mode. Not all services
285 are started again as they should, causing the machine to end up in an
286 unpredicatble state. This is why Debian admins recommend rebooting
287 after visiting single user mode.</p>
288
289 <p>A similar problem with runlevel 1 is caused by the amount of
290 scripts executed from /etc/rcS.d/. When switching from say runlevel 2
291 to runlevel 1, the services started from /etc/rcS.d/ are not properly
292 stopped when passing through the scripts in /etc/rc1.d/, and not
293 started again when switching away from runlevel 1 to the runlevels
294 2-5. I believe the problem is best fixed by moving all the scripts
295 out of /etc/rcS.d/ that are not <strong>required</strong> to get a
296 functioning single user mode during boot.</p>
297
298 <p>I have spent several years investigating the Debian boot system,
299 and discovered this problem a few years ago. I suspect it originates
300 from when sysvinit was introduced into Debian, a long time ago.</p>
301
302 </div>
303 <div class="tags">
304
305
306 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
307
308
309 </div>
310 </div>
311 <div class="padding"></div>
312
313 <div class="entry">
314 <div class="title">
315 <a href="http://people.skolelinux.org/pere/blog/What_should_start_from__etc_rcS_d__in_Debian____almost_nothing.html">What should start from /etc/rcS.d/ in Debian? - almost nothing</a>
316 </div>
317 <div class="date">
318 30th July 2011
319 </div>
320 <div class="body">
321 <p>In the Debian boot system, several packages include scripts that
322 are started from /etc/rcS.d/. In fact, there is a bite more of them
323 than make sense, and this causes a few problems. What kind of
324 problems, you might ask. There are at least two problems. The first
325 is that it is not possible to recover a machine after switching to
326 runlevel 1. One need to actually reboot to get the machine back to
327 the expected state. The other is that single user boot will sometimes
328 run into problems because some of the subsystems are activated before
329 the root login is presented, causing problems when trying to recover a
330 machine from a problem in that subsystem. A minor additional point is
331 that moving more scripts out of rcS.d/ and into the other rc#.d/
332 directories will increase the amount of scripts that can run in
333 parallel during boot, and thus decrease the boot time.</p>
334
335 <p>So, which scripts should start from rcS.d/. In short, only the
336 scripts that _have_ to execute before the root login prompt is
337 presented during a single user boot should go there. Everything else
338 should go into the numeric runlevels. This means things like
339 lm-sensors, fuse and x11-common should not run from rcS.d, but from
340 the numeric runlevels. Today in Debian, there are around 115 init.d
341 scripts that are started from rcS.d/, and most of them should be moved
342 out. Do your package have one of them? Please help us make single
343 user and runlevel 1 better by moving it.</p>
344
345 <p>Scripts setting up the screen, keyboard, system partitions
346 etc. should still be started from rcS.d/, but there is for example no
347 need to have the network enabled before the single user login prompt
348 is presented.</p>
349
350 <p>As always, things are not so easy to fix as they sound. To keep
351 Debian systems working while scripts migrate and during upgrades, the
352 scripts need to be moved from rcS.d/ to rc2.d/ in reverse dependency
353 order, ie the scripts that nothing in rcS.d/ depend on can be moved,
354 and the next ones can only be moved when their dependencies have been
355 moved first. This migration must be done sequentially while we ensure
356 that the package system upgrade packages in the right order to keep
357 the system state correct. This will require some coordination when it
358 comes to network related packages, but most of the packages with
359 scripts that should migrate do not have anything in rcS.d/ depending
360 on them. Some packages have already been updated, like the sudo
361 package, while others are still left to do. I wish I had time to work
362 on this myself, but real live constrains make it unlikely that I will
363 find time to push this forward.</p>
364
365 </div>
366 <div class="tags">
367
368
369 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
370
371
372 </div>
373 </div>
374 <div class="padding"></div>
375
376 <div class="entry">
377 <div class="title">
378 <a href="http://people.skolelinux.org/pere/blog/Automatic_upgrade_testing_from_Lenny_to_Squeeze.html">Automatic upgrade testing from Lenny to Squeeze</a>
379 </div>
380 <div class="date">
381 11th June 2010
382 </div>
383 <div class="body">
384 <p>The last few days I have done some upgrade testing in Debian, to
385 see if the upgrade from Lenny to Squeeze will go smoothly. A few bugs
386 have been discovered and reported in the process
387 (<a href="http://bugs.debian.org/585410">#585410</a> in nagios3-cgi,
388 <a href="http://bugs.debian.org/584879">#584879</a> already fixed in
389 enscript and <a href="http://bugs.debian.org/584861">#584861</a> in
390 kdebase-workspace-data), and to get a more regular testing going on, I
391 am working on a script to automate the test.</p>
392
393 <p>The idea is to create a Lenny chroot and use tasksel to install a
394 Gnome or KDE desktop installation inside the chroot before upgrading
395 it. To ensure no services are started in the chroot, a policy-rc.d
396 script is inserted. To make sure tasksel believe it is to install a
397 desktop on a laptop, the tasksel tests are replaced in the chroot
398 (only acceptable because this is a throw-away chroot).</p>
399
400 <p>A naive upgrade from Lenny to Squeeze using aptitude dist-upgrade
401 currently always fail because udev refuses to upgrade with the kernel
402 in Lenny, so to avoid that problem the file /etc/udev/kernel-upgrade
403 is created. The bug report
404 <a href="http://bugs.debian.org/566000">#566000</a> make me suspect
405 this problem do not trigger in a chroot, but I touch the file anyway
406 to make sure the upgrade go well. Testing on virtual and real
407 hardware have failed me because of udev so far, and creating this file
408 do the trick in such settings anyway. This is a
409 <a href="http://www.linuxquestions.org/questions/debian-26/failed-dist-upgrade-due-to-udev-config_sysfs_deprecated-nonsense-804130/">known
410 issue</a> and the current udev behaviour is intended by the udev
411 maintainer because he lack the resources to rewrite udev to keep
412 working with old kernels or something like that. I really wish the
413 udev upstream would keep udev backwards compatible, to avoid such
414 upgrade problem, but given that they fail to do so, I guess
415 documenting the way out of this mess is the best option we got for
416 Debian Squeeze.</p>
417
418 <p>Anyway, back to the task at hand, testing upgrades. This test
419 script, which I call <tt>upgrade-test</tt> for now, is doing the
420 trick:</p>
421
422 <blockquote><pre>
423 #!/bin/sh
424 set -ex
425
426 if [ "$1" ] ; then
427 desktop=$1
428 else
429 desktop=gnome
430 fi
431
432 from=lenny
433 to=squeeze
434
435 exec &lt; /dev/null
436 unset LANG
437 mirror=http://ftp.skolelinux.org/debian
438 tmpdir=chroot-$from-upgrade-$to-$desktop
439 fuser -mv .
440 debootstrap $from $tmpdir $mirror
441 chroot $tmpdir aptitude update
442 cat > $tmpdir/usr/sbin/policy-rc.d &lt;&lt;EOF
443 #!/bin/sh
444 exit 101
445 EOF
446 chmod a+rx $tmpdir/usr/sbin/policy-rc.d
447 exit_cleanup() {
448 umount $tmpdir/proc
449 }
450 mount -t proc proc $tmpdir/proc
451 # Make sure proc is unmounted also on failure
452 trap exit_cleanup EXIT INT
453
454 chroot $tmpdir aptitude -y install debconf-utils
455
456 # Make sure tasksel autoselection trigger. It need the test scripts
457 # to return the correct answers.
458 echo tasksel tasksel/desktop multiselect $desktop | \
459 chroot $tmpdir debconf-set-selections
460
461 # Include the desktop and laptop task
462 for test in desktop laptop ; do
463 echo > $tmpdir/usr/lib/tasksel/tests/$test &lt;&lt;EOF
464 #!/bin/sh
465 exit 2
466 EOF
467 chmod a+rx $tmpdir/usr/lib/tasksel/tests/$test
468 done
469
470 DEBIAN_FRONTEND=noninteractive
471 DEBIAN_PRIORITY=critical
472 export DEBIAN_FRONTEND DEBIAN_PRIORITY
473 chroot $tmpdir tasksel --new-install
474
475 echo deb $mirror $to main > $tmpdir/etc/apt/sources.list
476 chroot $tmpdir aptitude update
477 touch $tmpdir/etc/udev/kernel-upgrade
478 chroot $tmpdir aptitude -y dist-upgrade
479 fuser -mv
480 </pre></blockquote>
481
482 <p>I suspect it would be useful to test upgrades with both apt-get and
483 with aptitude, but I have not had time to look at how they behave
484 differently so far. I hope to get a cron job running to do the test
485 regularly and post the result on the web. The Gnome upgrade currently
486 work, while the KDE upgrade fail because of the bug in
487 kdebase-workspace-data</p>
488
489 <p>I am not quite sure what kind of extract from the huge upgrade logs
490 (KDE 167 KiB, Gnome 516 KiB) it make sense to include in this blog
491 post, so I will refrain from trying. I can report that for Gnome,
492 aptitude report 760 packages upgraded, 448 newly installed, 129 to
493 remove and 1 not upgraded and 1024MB need to be downloaded while for
494 KDE the same numbers are 702 packages upgraded, 507 newly installed,
495 193 to remove and 0 not upgraded and 1117MB need to be downloaded</p>
496
497 <p>I am very happy to notice that the Gnome desktop + laptop upgrade
498 is able to migrate to dependency based boot sequencing and parallel
499 booting without a hitch. Was unsure if there were still bugs with
500 packages failing to clean up their obsolete init.d script during
501 upgrades, and no such problem seem to affect the Gnome desktop+laptop
502 packages.</p>
503
504 </div>
505 <div class="tags">
506
507
508 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <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>.
509
510
511 </div>
512 </div>
513 <div class="padding"></div>
514
515 <div class="entry">
516 <div class="title">
517 <a href="http://people.skolelinux.org/pere/blog/Upstart_or_sysvinit___as_init_d_scripts_see_it.html">Upstart or sysvinit - as init.d scripts see it</a>
518 </div>
519 <div class="date">
520 6th June 2010
521 </div>
522 <div class="body">
523 <p>If Debian is to migrate to upstart on Linux, I expect some init.d
524 scripts to migrate (some of) their operations to upstart job while
525 keeping the init.d for hurd and kfreebsd. The packages with such
526 needs will need a way to get their init.d scripts to behave
527 differently when used with sysvinit and with upstart. Because of
528 this, I had a look at the environment variables set when a init.d
529 script is running under upstart, and when it is not.</p>
530
531 <p>With upstart, I notice these environment variables are set when a
532 script is started from rcS.d/ (ignoring some irrelevant ones like
533 COLUMNS):</p>
534
535 <blockquote><pre>
536 DEFAULT_RUNLEVEL=2
537 previous=N
538 PREVLEVEL=
539 RUNLEVEL=
540 runlevel=S
541 UPSTART_EVENTS=startup
542 UPSTART_INSTANCE=
543 UPSTART_JOB=rc-sysinit
544 </pre></blockquote>
545
546 <p>With sysvinit, these environment variables are set for the same
547 script.</p>
548
549 <blockquote><pre>
550 INIT_VERSION=sysvinit-2.88
551 previous=N
552 PREVLEVEL=N
553 RUNLEVEL=S
554 runlevel=S
555 </pre></blockquote>
556
557 <p>The RUNLEVEL and PREVLEVEL environment variables passed on from
558 sysvinit are not set by upstart. Not sure if it is intentional or not
559 to not be compatible with sysvinit in this regard.</p>
560
561 <p>For scripts needing to behave differently when upstart is used,
562 looking for the UPSTART_JOB environment variable seem to be a good
563 choice.</p>
564
565 </div>
566 <div class="tags">
567
568
569 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
570
571
572 </div>
573 </div>
574 <div class="padding"></div>
575
576 <div class="entry">
577 <div class="title">
578 <a href="http://people.skolelinux.org/pere/blog/KDM_fail_at_boot_with_NVidia_cards___and_no_one_try_to_fix_it_.html">KDM fail at boot with NVidia cards - and no one try to fix it?</a>
579 </div>
580 <div class="date">
581 1st June 2010
582 </div>
583 <div class="body">
584 <p>It is strange to watch how a bug in Debian causing KDM to fail to
585 start at boot when an NVidia video card is used is handled. The
586 problem seem to be that the nvidia X.org driver uses a long time to
587 initialize, and this duration is longer than kdm is configured to
588 wait.</p>
589
590 <p>I came across two bugs related to this issue,
591 <a href="http://bugs.debian.org/583312">#583312</a> initially filed
592 against initscripts and passed on to nvidia-glx when it became obvious
593 that the nvidia drivers were involved, and
594 <a href="http://bugs.debian.org/524751">#524751</a> initially filed against
595 kdm and passed on to src:nvidia-graphics-drivers for unknown reasons.</p>
596
597 <p>To me, it seem that no-one is interested in actually solving the
598 problem nvidia video card owners experience and make sure the Debian
599 distribution work out of the box for these users. The nvidia driver
600 maintainers expect kdm to be set up to wait longer, while kdm expect
601 the nvidia driver maintainers to fix the driver to start faster, and
602 while they wait for each other I guess the users end up switching to a
603 distribution that work for them. I have no idea what the solution is,
604 but I am pretty sure that waiting for each other is not it.</p>
605
606 <p>I wonder why we end up handling bugs this way.</p>
607
608 </div>
609 <div class="tags">
610
611
612 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <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>.
613
614
615 </div>
616 </div>
617 <div class="padding"></div>
618
619 <div class="entry">
620 <div class="title">
621 <a href="http://people.skolelinux.org/pere/blog/Parallellized_boot_seem_to_hold_up_well_in_Debian_testing.html">Parallellized boot seem to hold up well in Debian/testing</a>
622 </div>
623 <div class="date">
624 27th May 2010
625 </div>
626 <div class="body">
627 <p>A few days ago, parallel booting was enabled in Debian/testing.
628 The feature seem to hold up pretty well, but three fairly serious
629 issues are known and should be solved:
630
631 <p><ul>
632
633 <li>The wicd package seen to
634 <a href="http://bugs.debian.org/508289">break NFS mounting</a> and
635 <a href="http://bugs.debian.org/581586">network setup</a> when
636 parallel booting is enabled. No idea why, but the wicd maintainer
637 seem to be on the case.</li>
638
639 <li>The nvidia X driver seem to
640 <a href="http://bugs.debian.org/583312">have a race condition</a>
641 triggered more easily when parallel booting is in effect. The
642 maintainer is on the case.</li>
643
644 <li>The sysv-rc package fail to properly enable dependency based boot
645 sequencing (the shutdown is broken) when old file-rc users
646 <a href="http://bugs.debian.org/575080">try to switch back</a> to
647 sysv-rc. One way to solve it would be for file-rc to create
648 /etc/init.d/.legacy-bootordering, and another is to try to make
649 sysv-rc more robust. Will investigate some more and probably upload a
650 workaround in sysv-rc to help those trying to move from file-rc to
651 sysv-rc get a working shutdown.</li>
652
653 </ul></p>
654
655 <p>All in all not many surprising issues, and all of them seem
656 solvable before Squeeze is released. In addition to these there are
657 some packages with bugs in their dependencies and run level settings,
658 which I expect will be fixed in a reasonable time span.</p>
659
660 <p>If you report any problems with dependencies in init.d scripts to
661 the BTS, please usertag the report to get it to show up at
662 <a href="http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=initscripts-ng-devel@lists.alioth.debian.org">the
663 list of usertagged bugs related to this</a>.</p>
664
665 <p>Update: Correct bug number to file-rc issue.</p>
666
667 </div>
668 <div class="tags">
669
670
671 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <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>.
672
673
674 </div>
675 </div>
676 <div class="padding"></div>
677
678 <div class="entry">
679 <div class="title">
680 <a href="http://people.skolelinux.org/pere/blog/Parallellized_boot_is_now_the_default_in_Debian_unstable.html">Parallellized boot is now the default in Debian/unstable</a>
681 </div>
682 <div class="date">
683 14th May 2010
684 </div>
685 <div class="body">
686 <p>Since this evening, parallel booting is the default in
687 Debian/unstable for machines using dependency based boot sequencing.
688 Apparently the testing of concurrent booting has been wider than
689 expected, if I am to believe the
690 <a href="http://lists.debian.org/debian-devel/2010/05/msg00122.html">input
691 on debian-devel@</a>, and I concluded a few days ago to move forward
692 with the feature this weekend, to give us some time to detect any
693 remaining problems before Squeeze is frozen. If serious problems are
694 detected, it is simple to change the default back to sequential boot.
695 The upload of the new sysvinit package also activate a new upstream
696 version.</p>
697
698 More information about
699 <a href="http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot">dependency
700 based boot sequencing</a> is available from the Debian wiki. It is
701 currently possible to disable parallel booting when one run into
702 problems caused by it, by adding this line to /etc/default/rcS:</p>
703
704 <blockquote><pre>
705 CONCURRENCY=none
706 </pre></blockquote>
707
708 <p>If you report any problems with dependencies in init.d scripts to
709 the BTS, please usertag the report to get it to show up at
710 <a href="http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=initscripts-ng-devel@lists.alioth.debian.org">the
711 list of usertagged bugs related to this</a>.</p>
712
713 </div>
714 <div class="tags">
715
716
717 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <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>.
718
719
720 </div>
721 </div>
722 <div class="padding"></div>
723
724 <div class="entry">
725 <div class="title">
726 <a href="http://people.skolelinux.org/pere/blog/systemd__an_interesting_alternative_to_upstart.html">systemd, an interesting alternative to upstart</a>
727 </div>
728 <div class="date">
729 13th May 2010
730 </div>
731 <div class="body">
732 <p>The last few days a new boot system called
733 <a href="http://www.freedesktop.org/wiki/Software/systemd">systemd</a>
734 has been
735 <a href="http://0pointer.de/blog/projects/systemd.html">introduced</a>
736
737 to the free software world. I have not yet had time to play around
738 with it, but it seem to be a very interesting alternative to
739 <a href="http://upstart.ubuntu.com/">upstart</a>, and might prove to be
740 a good alternative for Debian when we are able to switch to an event
741 based boot system. Tollef is
742 <a href="http://bugs.debian.org/580814">in the process</a> of getting
743 systemd into Debian, and I look forward to seeing how well it work. I
744 like the fact that systemd handles init.d scripts with dependency
745 information natively, allowing them to run in parallel where upstart
746 at the moment do not.</p>
747
748 <p>Unfortunately do systemd have the same problem as upstart regarding
749 platform support. It only work on recent Linux kernels, and also need
750 some new kernel features enabled to function properly. This means
751 kFreeBSD and Hurd ports of Debian will need a port or a different boot
752 system. Not sure how that will be handled if systemd proves to be the
753 way forward.</p>
754
755 <p>In the mean time, based on the
756 <a href="http://lists.debian.org/debian-devel/2010/05/msg00122.html">input
757 on debian-devel@</a> regarding parallel booting in Debian, I have
758 decided to enable full parallel booting as the default in Debian as
759 soon as possible (probably this weekend or early next week), to see if
760 there are any remaining serious bugs in the init.d dependencies. A
761 new version of the sysvinit package implementing this change is
762 already in experimental. If all go well, Squeeze will be released
763 with parallel booting enabled by default.</p>
764
765 </div>
766 <div class="tags">
767
768
769 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</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>.
770
771
772 </div>
773 </div>
774 <div class="padding"></div>
775
776 <div class="entry">
777 <div class="title">
778 <a href="http://people.skolelinux.org/pere/blog/Parallellizing_the_boot_in_Debian_Squeeze___ready_for_wider_testing.html">Parallellizing the boot in Debian Squeeze - ready for wider testing</a>
779 </div>
780 <div class="date">
781 6th May 2010
782 </div>
783 <div class="body">
784 <p>These days, the init.d script dependencies in Squeeze are quite
785 complete, so complete that it is actually possible to run all the
786 init.d scripts in parallell based on these dependencies. If you want
787 to test your Squeeze system, make sure
788 <a href="http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot">dependency
789 based boot sequencing</a> is enabled, and add this line to
790 /etc/default/rcS:</p>
791
792 <blockquote><pre>
793 CONCURRENCY=makefile
794 </pre></blockquote>
795
796 <p>That is it. It will cause sysv-rc to use the startpar tool to run
797 scripts in parallel using the dependency information stored in
798 /etc/init.d/.depend.boot, /etc/init.d/.depend.start and
799 /etc/init.d/.depend.stop to order the scripts. Startpar is configured
800 to try to start the kdm and gdm scripts as early as possible, and will
801 start the facilities required by kdm or gdm as early as possible to
802 make this happen.</p>
803
804 <p>Give it a try, and see if you like the result. If some services
805 fail to start properly, it is most likely because they have incomplete
806 init.d script dependencies in their startup script (or some of their
807 dependent scripts have incomplete dependencies). Report bugs and get
808 the package maintainers to fix it. :)</p>
809
810 <p>Running scripts in parallel could be the default in Debian when we
811 manage to get the init.d script dependencies complete and correct. I
812 expect we will get there in Squeeze+1, if we get manage to test and
813 fix the remaining issues.</p>
814
815 <p>If you report any problems with dependencies in init.d scripts to
816 the BTS, please usertag the report to get it to show up at
817 <a href="http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=initscripts-ng-devel@lists.alioth.debian.org">the
818 list of usertagged bugs related to this</a>.</p>
819
820 </div>
821 <div class="tags">
822
823
824 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
825
826
827 </div>
828 </div>
829 <div class="padding"></div>
830
831 <div class="entry">
832 <div class="title">
833 <a href="http://people.skolelinux.org/pere/blog/Debian_has_switched_to_dependency_based_boot_sequencing.html">Debian has switched to dependency based boot sequencing</a>
834 </div>
835 <div class="date">
836 27th July 2009
837 </div>
838 <div class="body">
839 <p>Since this evening, with the upload of sysvinit version 2.87dsf-2,
840 and the upload of insserv version 1.12.0-10 yesterday, Debian unstable
841 have been migrated to using dependency based boot sequencing. This
842 conclude work me and others have been doing for the last three days.
843 It feels great to see this finally part of the default Debian
844 installation. Now we just need to weed out the last few problems that
845 are bound to show up, to get everything ready for Squeeze.</p>
846
847 <p>The next step is migrating /sbin/init from sysvinit to upstart, and
848 fixing the more fundamental problem of handing the event based
849 non-predictable kernel in the early boot.</p>
850
851 </div>
852 <div class="tags">
853
854
855 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</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>.
856
857
858 </div>
859 </div>
860 <div class="padding"></div>
861
862 <div class="entry">
863 <div class="title">
864 <a href="http://people.skolelinux.org/pere/blog/Taking_over_sysvinit_development.html">Taking over sysvinit development</a>
865 </div>
866 <div class="date">
867 22nd July 2009
868 </div>
869 <div class="body">
870 <p>After several years of frustration with the lack of activity from
871 the existing sysvinit upstream developer, I decided a few weeks ago to
872 take over the package and become the new upstream. The number of
873 patches to track for the Debian package was becoming a burden, and the
874 lack of synchronization between the distribution made it hard to keep
875 the package up to date.</p>
876
877 <p>On the new sysvinit team is the SuSe maintainer Dr. Werner Fink,
878 and my Debian co-maintainer Kel Modderman. About 10 days ago, I made
879 a new upstream tarball with version number 2.87dsf (for Debian, SuSe
880 and Fedora), based on the patches currently in use in these
881 distributions. We Debian maintainers plan to move to this tarball as
882 the new upstream as soon as we find time to do the merge. Since the
883 new tarball was created, we agreed with Werner at SuSe to make a new
884 upstream project at <a href="http://savannah.nongnu.org/">Savannah</a>, and continue
885 development there. The project is registered and currently waiting
886 for approval by the Savannah administrators, and as soon as it is
887 approved, we will import the old versions from svn and continue
888 working on the future release.</p>
889
890 <p>It is a bit ironic that this is done now, when some of the involved
891 distributions are moving to upstart as a syvinit replacement.</p>
892
893 </div>
894 <div class="tags">
895
896
897 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</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>.
898
899
900 </div>
901 </div>
902 <div class="padding"></div>
903
904 <div class="entry">
905 <div class="title">
906 <a href="http://people.skolelinux.org/pere/blog/Debian_boots_quicker_and_quicker.html">Debian boots quicker and quicker</a>
907 </div>
908 <div class="date">
909 24th June 2009
910 </div>
911 <div class="body">
912 <p>I spent Monday and tuesday this week in London with a lot of the
913 people involved in the boot system on Debian and Ubuntu, to see if we
914 could find more ways to speed up the boot system. This was an Ubuntu
915 funded
916 <a href="https://wiki.ubuntu.com/FoundationsTeam/BootPerformance/DebianUbuntuSprint">developer
917 gathering</a>. It was quite productive. We also discussed the future
918 of boot systems, and ways to handle the increasing number of boot
919 issues introduced by the Linux kernel becoming more and more
920 asynchronous and event base. The Ubuntu approach using udev and
921 upstart might be a good way forward. Time will show.</p>
922
923 <p>Anyway, there are a few ways at the moment to speed up the boot
924 process in Debian. All of these should be applied to get a quick
925 boot:</p>
926
927 <ul>
928
929 <li>Use dash as /bin/sh.</li>
930
931 <li>Disable the init.d/hwclock*.sh scripts and make sure the hardware
932 clock is in UTC.</li>
933
934 <li>Install and activate the insserv package to enable
935 <a href="http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot">dependency
936 based boot sequencing</a>, and enable concurrent booting.</li>
937
938 </ul>
939
940 These points are based on the Google summer of code work done by
941 <a href="http://initscripts-ng.alioth.debian.org/soc2006-bootsystem/">Carlos
942 Villegas</a>.
943
944 <p>Support for makefile-style concurrency during boot was uploaded to
945 unstable yesterday. When we tested it, we were able to cut 6 seconds
946 from the boot sequence. It depend on very correct dependency
947 declaration in all init.d scripts, so I expect us to find edge cases
948 where the dependences in some scripts are slightly wrong when we start
949 using this.</p>
950
951 <p>On our IRC channel for this effort, #pkg-sysvinit, a new idea was
952 introduced by Raphael Geissert today, one that could affect the
953 startup speed as well. Instead of starting some scripts concurrently
954 from rcS.d/ and another set of scripts from rc2.d/, it would be
955 possible to run a of them in the same process. A quick way to test
956 this would be to enable insserv and run 'mv /etc/rc2.d/S* /etc/rcS.d/;
957 insserv'. Will need to test if that work. :)</p>
958
959 </div>
960 <div class="tags">
961
962
963 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
964
965
966 </div>
967 </div>
968 <div class="padding"></div>
969
970 <p style="text-align: right;"><a href="bootsystem.rss"><img src="http://people.skolelinux.org/pere/blog/xml.gif" alt="RSS Feed" width="36" height="14" /></a></p>
971 <div id="sidebar">
972
973
974
975 <h2>Archive</h2>
976 <ul>
977
978 <li>2013
979 <ul>
980
981 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
982
983 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
984
985 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
986
987 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
988
989 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
990
991 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
992
993 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
994
995 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
996
997 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
998
999 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/10/">October (7)</a></li>
1000
1001 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/11/">November (9)</a></li>
1002
1003 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/12/">December (3)</a></li>
1004
1005 </ul></li>
1006
1007 <li>2012
1008 <ul>
1009
1010 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
1011
1012 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
1013
1014 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
1015
1016 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
1017
1018 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
1019
1020 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
1021
1022 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
1023
1024 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
1025
1026 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
1027
1028 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
1029
1030 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
1031
1032 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
1033
1034 </ul></li>
1035
1036 <li>2011
1037 <ul>
1038
1039 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
1040
1041 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
1042
1043 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
1044
1045 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
1046
1047 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
1048
1049 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
1050
1051 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
1052
1053 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
1054
1055 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
1056
1057 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
1058
1059 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
1060
1061 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
1062
1063 </ul></li>
1064
1065 <li>2010
1066 <ul>
1067
1068 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
1069
1070 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
1071
1072 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
1073
1074 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
1075
1076 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
1077
1078 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
1079
1080 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
1081
1082 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
1083
1084 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
1085
1086 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
1087
1088 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
1089
1090 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
1091
1092 </ul></li>
1093
1094 <li>2009
1095 <ul>
1096
1097 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
1098
1099 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
1100
1101 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
1102
1103 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
1104
1105 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
1106
1107 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
1108
1109 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
1110
1111 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
1112
1113 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
1114
1115 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
1116
1117 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
1118
1119 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
1120
1121 </ul></li>
1122
1123 <li>2008
1124 <ul>
1125
1126 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
1127
1128 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
1129
1130 </ul></li>
1131
1132 </ul>
1133
1134
1135
1136 <h2>Tags</h2>
1137 <ul>
1138
1139 <li><a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (13)</a></li>
1140
1141 <li><a href="http://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
1142
1143 <li><a href="http://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
1144
1145 <li><a href="http://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
1146
1147 <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (7)</a></li>
1148
1149 <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (13)</a></li>
1150
1151 <li><a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
1152
1153 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (91)</a></li>
1154
1155 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (144)</a></li>
1156
1157 <li><a href="http://people.skolelinux.org/pere/blog/tags/digistan">digistan (10)</a></li>
1158
1159 <li><a href="http://people.skolelinux.org/pere/blog/tags/docbook">docbook (10)</a></li>
1160
1161 <li><a href="http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
1162
1163 <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (232)</a></li>
1164
1165 <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (21)</a></li>
1166
1167 <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (12)</a></li>
1168
1169 <li><a href="http://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (12)</a></li>
1170
1171 <li><a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (5)</a></li>
1172
1173 <li><a href="http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (11)</a></li>
1174
1175 <li><a href="http://people.skolelinux.org/pere/blog/tags/intervju">intervju (39)</a></li>
1176
1177 <li><a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (7)</a></li>
1178
1179 <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (18)</a></li>
1180
1181 <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (8)</a></li>
1182
1183 <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (6)</a></li>
1184
1185 <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
1186
1187 <li><a href="http://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (7)</a></li>
1188
1189 <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (25)</a></li>
1190
1191 <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (239)</a></li>
1192
1193 <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (161)</a></li>
1194
1195 <li><a href="http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (9)</a></li>
1196
1197 <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
1198
1199 <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (45)</a></li>
1200
1201 <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (67)</a></li>
1202
1203 <li><a href="http://people.skolelinux.org/pere/blog/tags/raid">raid (1)</a></li>
1204
1205 <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
1206
1207 <li><a href="http://people.skolelinux.org/pere/blog/tags/rfid">rfid (2)</a></li>
1208
1209 <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (9)</a></li>
1210
1211 <li><a href="http://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
1212
1213 <li><a href="http://people.skolelinux.org/pere/blog/tags/ruter">ruter (4)</a></li>
1214
1215 <li><a href="http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
1216
1217 <li><a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (33)</a></li>
1218
1219 <li><a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
1220
1221 <li><a href="http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (4)</a></li>
1222
1223 <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (44)</a></li>
1224
1225 <li><a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (3)</a></li>
1226
1227 <li><a href="http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (9)</a></li>
1228
1229 <li><a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (21)</a></li>
1230
1231 <li><a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (1)</a></li>
1232
1233 <li><a href="http://people.skolelinux.org/pere/blog/tags/valg">valg (8)</a></li>
1234
1235 <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (39)</a></li>
1236
1237 <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
1238
1239 <li><a href="http://people.skolelinux.org/pere/blog/tags/web">web (28)</a></li>
1240
1241 </ul>
1242
1243
1244 </div>
1245 <p style="text-align: right">
1246 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
1247 </p>
1248
1249 </body>
1250 </html>