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