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