]> pere.pagekite.me Git - homepage.git/blob - blog/archive/2018/07/index.html
Generated.
[homepage.git] / blog / archive / 2018 / 07 / 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 from July 2018</title>
7 <link rel="stylesheet" type="text/css" media="screen" href="https://people.skolelinux.org/pere/blog/style.css" />
8 <link rel="stylesheet" type="text/css" media="screen" href="https://people.skolelinux.org/pere/blog/vim.css" />
9 <link rel="alternate" title="RSS Feed" href="07.rss" type="application/rss+xml" />
10 </head>
11 <body>
12 <!-- XML FEED -->
13 <div class="title">
14 <h1>
15 <a href="https://people.skolelinux.org/pere/blog/">Petter Reinholdtsen</a>
16
17 </h1>
18
19 </div>
20
21
22 <h3>Entries from July 2018.</h3>
23
24 <div class="entry">
25 <div class="title">
26 <a href="https://people.skolelinux.org/pere/blog/Sharing_images_with_friends_and_family_using_RSS_and_EXIF_XMP_metadata.html">Sharing images with friends and family using RSS and EXIF/XMP metadata</a>
27 </div>
28 <div class="date">
29 31st July 2018
30 </div>
31 <div class="body">
32 <p>For a while now, I have looked for a sensible way to share images
33 with my family using a self hosted solution, as it is unacceptable to
34 place images from my personal life under the control of strangers
35 working for data hoarders like Google or Dropbox. The last few days I
36 have drafted an approach that might work out, and I would like to
37 share it with you. I would like to publish images on a server under
38 my control, and point some Internet connected display units using some
39 free and open standard to the images I published. As my primary
40 language is not limited to ASCII, I need to store metadata using
41 UTF-8. Many years ago, I hoped to find a digital photo frame capable
42 of reading a RSS feed with image references (aka using the
43 &lt;enclosure&gt; RSS tag), but was unable to find a current supplier
44 of such frames. In the end I gave up that approach.</p>
45
46 <p>Some months ago, I discovered that
47 <a href="https://www.jwz.org/xscreensaver/">XScreensaver</a> is able to
48 read images from a RSS feed, and used it to set up a screen saver on
49 my home info screen, showing images from the Daily images feed from
50 NASA. This proved to work well. More recently I discovered that
51 <a href="https://kodi.tv">Kodi</a> (both using
52 <a href="https://www.openelec.tv/">OpenELEC</a> and
53 <a href="https://libreelec.tv">LibreELEC</a>) provide the
54 <a href="https://github.com/grinsted/script.screensaver.feedreader">Feedreader</a>
55 screen saver capable of reading a RSS feed with images and news. For
56 fun, I used it this summer to test Kodi on my parents TV by hooking up
57 a Raspberry PI unit with LibreELEC, and wanted to provide them with a
58 screen saver showing selected pictures from my selection.</p>
59
60 <p>Armed with motivation and a test photo frame, I set out to generate
61 a RSS feed for the Kodi instance. I adjusted my <a
62 href="https://freedombox.org/">Freedombox</a> instance, created
63 /var/www/html/privatepictures/, wrote a small Perl script to extract
64 title and description metadata from the photo files and generate the
65 RSS file. I ended up using Perl instead of python, as the
66 libimage-exiftool-perl Debian package seemed to handle the EXIF/XMP
67 tags I ended up using, while python3-exif did not. The relevant EXIF
68 tags only support ASCII, so I had to find better alternatives. XMP
69 seem to have the support I need.</p>
70
71 <p>I am a bit unsure which EXIF/XMP tags to use, as I would like to
72 use tags that can be easily added/updated using normal free software
73 photo managing software. I ended up using the tags set using this
74 exiftool command, as these tags can also be set using digiKam:</p>
75
76 <blockquote><pre>
77 exiftool -headline='The RSS image title' \
78 -description='The RSS image description.' \
79 -subject+=for-family photo.jpeg
80 </pre></blockquote>
81
82 <p>I initially tried the "-title" and "keyword" tags, but they were
83 invisible in digiKam, so I changed to "-headline" and "-subject". I
84 use the keyword/subject 'for-family' to flag that the photo should be
85 shared with my family. Images with this keyword set are located and
86 copied into my Freedombox for the RSS generating script to find.</p>
87
88 <p>Are there better ways to do this? Get in touch if you have better
89 suggestions.</p>
90
91 <p>As usual, if you use Bitcoin and want to show your support of my
92 activities, please send Bitcoin donations to my address
93 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
94
95 </div>
96 <div class="tags">
97
98
99 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>.
100
101
102 </div>
103 </div>
104 <div class="padding"></div>
105
106 <div class="entry">
107 <div class="title">
108 <a href="https://people.skolelinux.org/pere/blog/Simple_streaming_the_Linux_desktop_to_Kodi_using_GStreamer_and_RTP.html">Simple streaming the Linux desktop to Kodi using GStreamer and RTP</a>
109 </div>
110 <div class="date">
111 12th July 2018
112 </div>
113 <div class="body">
114 <p>Last night, I wrote
115 <a href="https://people.skolelinux.org/pere/blog/Streaming_the_Linux_desktop_to_Kodi_using_VLC_and_RTSP.html">a
116 recipe to stream a Linux desktop using VLC to a instance of Kodi</a>.
117 During the day I received valuable feedback, and thanks to the
118 suggestions I have been able to rewrite the recipe into a much simpler
119 approach requiring no setup at all. It is a single script that take
120 care of it all.</p>
121
122 <p>This new script uses GStreamer instead of VLC to capture the
123 desktop and stream it to Kodi. This fixed the video quality issue I
124 saw initially. It further removes the need to add a m3u file on the
125 Kodi machine, as it instead connects to
126 <a href="https://kodi.wiki/view/JSON-RPC_API/v8">the JSON-RPC API in
127 Kodi</a> and simply ask Kodi to play from the stream created using
128 GStreamer. Streaming the desktop to Kodi now become trivial. Copy
129 the script below, run it with the DNS name or IP address of the kodi
130 server to stream to as the only argument, and watch your screen show
131 up on the Kodi screen. Note, it depend on multicast on the local
132 network, so if you need to stream outside the local network, the
133 script must be modified. Also note, I have no idea if audio work, as
134 I only care about the picture part.</p>
135
136 <blockquote><pre>
137 #!/bin/sh
138 #
139 # Stream the Linux desktop view to Kodi. See
140 # https://people.skolelinux.org/pere/blog/Streaming_the_Linux_desktop_to_Kodi_using_VLC_and_RTSP.html
141 # for backgorund information.
142
143 # Make sure the stream is stopped in Kodi and the gstreamer process is
144 # killed if something go wrong (for example if curl is unable to find the
145 # kodi server). Do the same when interrupting this script.
146 kodicmd() {
147 host="$1"
148 cmd="$2"
149 params="$3"
150 curl --silent --header 'Content-Type: application/json' \
151 --data-binary "{ \"id\": 1, \"jsonrpc\": \"2.0\", \"method\": \"$cmd\", \"params\": $params }" \
152 "http://$host/jsonrpc"
153 }
154 cleanup() {
155 if [ -n "$kodihost" ] ; then
156 # Stop the playing when we end
157 playerid=$(kodicmd "$kodihost" Player.GetActivePlayers "{}" |
158 jq .result[].playerid)
159 kodicmd "$kodihost" Player.Stop "{ \"playerid\" : $playerid }" > /dev/null
160 fi
161 if [ "$gstpid" ] && kill -0 "$gstpid" >/dev/null 2>&1; then
162 kill "$gstpid"
163 fi
164 }
165 trap cleanup EXIT INT
166
167 if [ -n "$1" ]; then
168 kodihost=$1
169 shift
170 else
171 kodihost=kodi.local
172 fi
173
174 mcast=239.255.0.1
175 mcastport=1234
176 mcastttl=1
177
178 pasrc=$(pactl list | grep -A2 'Source #' | grep 'Name: .*\.monitor$' | \
179 cut -d" " -f2|head -1)
180 gst-launch-1.0 ximagesrc use-damage=0 ! video/x-raw,framerate=30/1 ! \
181 videoconvert ! queue2 ! \
182 x264enc bitrate=8000 speed-preset=superfast tune=zerolatency qp-min=30 \
183 key-int-max=15 bframes=2 ! video/x-h264,profile=high ! queue2 ! \
184 mpegtsmux alignment=7 name=mux ! rndbuffersize max=1316 min=1316 ! \
185 udpsink host=$mcast port=$mcastport ttl-mc=$mcastttl auto-multicast=1 sync=0 \
186 pulsesrc device=$pasrc ! audioconvert ! queue2 ! avenc_aac ! queue2 ! mux. \
187 > /dev/null 2>&1 &
188 gstpid=$!
189
190 # Give stream a second to get going
191 sleep 1
192
193 # Ask kodi to start streaming using its JSON-RPC API
194 kodicmd "$kodihost" Player.Open \
195 "{\"item\": { \"file\": \"udp://@$mcast:$mcastport\" } }" > /dev/null
196
197 # wait for gst to end
198 wait "$gstpid"
199 </pre></blockquote>
200
201 <p>I hope you find the approach useful. I know I do.</p>
202
203 <p>As usual, if you use Bitcoin and want to show your support of my
204 activities, please send Bitcoin donations to my address
205 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
206
207 </div>
208 <div class="tags">
209
210
211 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/kodi">kodi</a>, <a href="https://people.skolelinux.org/pere/blog/tags/video">video</a>.
212
213
214 </div>
215 </div>
216 <div class="padding"></div>
217
218 <div class="entry">
219 <div class="title">
220 <a href="https://people.skolelinux.org/pere/blog/Streaming_the_Linux_desktop_to_Kodi_using_VLC_and_RTSP.html">Streaming the Linux desktop to Kodi using VLC and RTSP</a>
221 </div>
222 <div class="date">
223 12th July 2018
224 </div>
225 <div class="body">
226 <p>PS: See
227 <ahref="https://people.skolelinux.org/pere/blog/Simple_streaming_the_Linux_desktop_to_Kodi_using_GStreamer_and_RTP.html">the
228 followup post</a> for a even better approach.</p>
229
230 <p>A while back, I was asked by a friend how to stream the desktop to
231 my projector connected to Kodi. I sadly had to admit that I had no
232 idea, as it was a task I never had tried. Since then, I have been
233 looking for a way to do so, preferable without much extra software to
234 install on either side. Today I found a way that seem to kind of
235 work. Not great, but it is a start.</p>
236
237 <p>I had a look at several approaches, for example
238 <a href="https://github.com/mfoetsch/dlna_live_streaming">using uPnP
239 DLNA as described in 2011</a>, but it required a uPnP server, fuse and
240 local storage enough to store the stream locally. This is not going
241 to work well for me, lacking enough free space, and it would
242 impossible for my friend to get working.</p>
243
244 <p>Next, it occurred to me that perhaps I could use VLC to create a
245 video stream that Kodi could play. Preferably using
246 broadcast/multicast, to avoid having to change any setup on the Kodi
247 side when starting such stream. Unfortunately, the only recipe I
248 could find using multicast used the rtp protocol, and this protocol
249 seem to not be supported by Kodi.</p>
250
251 <p>On the other hand, the rtsp protocol is working! Unfortunately I
252 have to specify the IP address of the streaming machine in both the
253 sending command and the file on the Kodi server. But it is showing my
254 desktop, and thus allow us to have a shared look on the big screen at
255 the programs I work on.</p>
256
257 <p>I did not spend much time investigating codeces. I combined the
258 rtp and rtsp recipes from
259 <a href="https://wiki.videolan.org/Documentation:Streaming_HowTo/Command_Line_Examples/">the
260 VLC Streaming HowTo/Command Line Examples</a>, and was able to get
261 this working on the desktop/streaming end.</p>
262
263 <blockquote><pre>
264 vlc screen:// --sout \
265 '#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128}:rtp{dst=projector.local,port=1234,sdp=rtsp://192.168.11.4:8080/test.sdp}'
266 </pre></blockquote>
267
268 <p>I ssh-ed into my Kodi box and created a file like this with the
269 same IP address:</p>
270
271 <blockquote><pre>
272 echo rtsp://192.168.11.4:8080/test.sdp \
273 > /storage/videos/screenstream.m3u
274 </pre></blockquote>
275
276 <p>Note the 192.168.11.4 IP address is my desktops IP address. As far
277 as I can tell the IP must be hardcoded for this to work. In other
278 words, if someone elses machine is going to do the steaming, you have
279 to update screenstream.m3u on the Kodi machine and adjust the vlc
280 recipe. To get started, locate the file in Kodi and select the m3u
281 file while the VLC stream is running. The desktop then show up in my
282 big screen. :)</p>
283
284 <p>When using the same technique to stream a video file with audio,
285 the audio quality is really bad. No idea if the problem is package
286 loss or bad parameters for the transcode. I do not know VLC nor Kodi
287 enough to tell.</p>
288
289 <p><strong>Update 2018-07-12</strong>: Johannes Schauer send me a few
290 succestions and reminded me about an important step. The "screen:"
291 input source is only available once the vlc-plugin-access-extra
292 package is installed on Debian. Without it, you will see this error
293 message: "VLC is unable to open the MRL 'screen://'. Check the log
294 for details." He further found that it is possible to drop some parts
295 of the VLC command line to reduce the amount of hardcoded information.
296 It is also useful to consider using cvlc to avoid having the VLC
297 window in the desktop view. In sum, this give us this command line on
298 the source end
299
300 <blockquote><pre>
301 cvlc screen:// --sout \
302 '#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128}:rtp{sdp=rtsp://:8080/}'
303 </pre></blockquote>
304
305 <p>and this on the Kodi end<p>
306
307 <blockquote><pre>
308 echo rtsp://192.168.11.4:8080/ \
309 > /storage/videos/screenstream.m3u
310 </pre></blockquote>
311
312 <p>Still bad image quality, though. But I did discover that streaming
313 a DVD using dvdsimple:///dev/dvd as the source had excellent video and
314 audio quality, so I guess the issue is in the input or transcoding
315 parts, not the rtsp part. I've tried to change the vb and ab
316 parameters to use more bandwidth, but it did not make a
317 difference.</p>
318
319 <p>I further received a suggestion from Einar Haraldseid to try using
320 gstreamer instead of VLC, and this proved to work great! He also
321 provided me with the trick to get Kodi to use a multicast stream as
322 its source. By using this monstrous oneliner, I can stream my desktop
323 with good video quality in reasonable framerate to the 239.255.0.1
324 multicast address on port 1234:
325
326 <blockquote><pre>
327 gst-launch-1.0 ximagesrc use-damage=0 ! video/x-raw,framerate=30/1 ! \
328 videoconvert ! queue2 ! \
329 x264enc bitrate=8000 speed-preset=superfast tune=zerolatency qp-min=30 \
330 key-int-max=15 bframes=2 ! video/x-h264,profile=high ! queue2 ! \
331 mpegtsmux alignment=7 name=mux ! rndbuffersize max=1316 min=1316 ! \
332 udpsink host=239.255.0.1 port=1234 ttl-mc=1 auto-multicast=1 sync=0 \
333 pulsesrc device=$(pactl list | grep -A2 'Source #' | \
334 grep 'Name: .*\.monitor$' | cut -d" " -f2|head -1) ! \
335 audioconvert ! queue2 ! avenc_aac ! queue2 ! mux.
336 </pre></blockquote>
337
338 <p>and this on the Kodi end<p>
339
340 <blockquote><pre>
341 echo udp://@239.255.0.1:1234 \
342 > /storage/videos/screenstream.m3u
343 </pre></blockquote>
344
345 <p>Note the trick to pick a valid pulseaudio source. It might not
346 pick the one you need. This approach will of course lead to trouble
347 if more than one source uses the same multicast port and address.
348 Note the ttl-mc=1 setting, which limit the multicast packages to the
349 local network. If the value is increased, your screen will be
350 broadcasted further, one network "hop" for each increase (read up on
351 multicast to learn more. :)!</p>
352
353 <p>Having cracked how to get Kodi to receive multicast streams, I
354 could use this VLC command to stream to the same multicast address.
355 The image quality is way better than the rtsp approach, but gstreamer
356 seem to be doing a better job.</p>
357
358 <blockquote><pre>
359 cvlc screen:// --sout '#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128}:rtp{mux=ts,dst=239.255.0.1,port=1234,sdp=sap}'
360 </pre></blockquote>
361
362 <p>As usual, if you use Bitcoin and want to show your support of my
363 activities, please send Bitcoin donations to my address
364 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
365
366 </div>
367 <div class="tags">
368
369
370 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/kodi">kodi</a>, <a href="https://people.skolelinux.org/pere/blog/tags/video">video</a>.
371
372
373 </div>
374 </div>
375 <div class="padding"></div>
376
377 <div class="entry">
378 <div class="title">
379 <a href="https://people.skolelinux.org/pere/blog/What_is_the_most_supported_MIME_type_in_Debian_in_2018_.html">What is the most supported MIME type in Debian in 2018?</a>
380 </div>
381 <div class="date">
382 9th July 2018
383 </div>
384 <div class="body">
385 <p>Five years ago,
386 <a href="https://people.skolelinux.org/pere/blog/What_is_the_most_supported_MIME_type_in_Debian_.html">I
387 measured what the most supported MIME type in Debian was</a>, by
388 analysing the desktop files in all packages in the archive. Since
389 then, the DEP-11 AppStream system has been put into production, making
390 the task a lot easier. This made me want to repeat the measurement,
391 to see how much things changed. Here are the new numbers, for
392 unstable only this time:
393
394 <p><strong>Debian Unstable:</strong></p>
395
396 <pre>
397 count MIME type
398 ----- -----------------------
399 56 image/jpeg
400 55 image/png
401 49 image/tiff
402 48 image/gif
403 39 image/bmp
404 38 text/plain
405 37 audio/mpeg
406 34 application/ogg
407 33 audio/x-flac
408 32 audio/x-mp3
409 30 audio/x-wav
410 30 audio/x-vorbis+ogg
411 29 image/x-portable-pixmap
412 27 inode/directory
413 27 image/x-portable-bitmap
414 27 audio/x-mpeg
415 26 application/x-ogg
416 25 audio/x-mpegurl
417 25 audio/ogg
418 24 text/html
419 </pre>
420
421 <p>The list was created like this using a sid chroot: "cat
422 /var/lib/apt/lists/*sid*_dep11_Components-amd64.yml.gz| zcat | awk '/^
423 - \S+\/\S+$/ {print $2 }' | sort | uniq -c | sort -nr | head -20"</p>
424
425 <p>It is interesting to see how image formats have passed text/plain
426 as the most announced supported MIME type. These days, thanks to the
427 AppStream system, if you run into a file format you do not know, and
428 want to figure out which packages support the format, you can find the
429 MIME type of the file using "file --mime &lt;filename&gt;", and then
430 look up all packages announcing support for this format in their
431 AppStream metadata (XML or .desktop file) using "appstreamcli
432 what-provides mimetype &lt;mime-type&gt;. For example if you, like
433 me, want to know which packages support inode/directory, you can get a
434 list like this:</p>
435
436 <p><blockquote><pre>
437 % appstreamcli what-provides mimetype inode/directory | grep Package: | sort
438 Package: anjuta
439 Package: audacious
440 Package: baobab
441 Package: cervisia
442 Package: chirp
443 Package: dolphin
444 Package: doublecmd-common
445 Package: easytag
446 Package: enlightenment
447 Package: ephoto
448 Package: filelight
449 Package: gwenview
450 Package: k4dirstat
451 Package: kaffeine
452 Package: kdesvn
453 Package: kid3
454 Package: kid3-qt
455 Package: nautilus
456 Package: nemo
457 Package: pcmanfm
458 Package: pcmanfm-qt
459 Package: qweborf
460 Package: ranger
461 Package: sirikali
462 Package: spacefm
463 Package: spacefm
464 Package: vifm
465 %
466 </pre></blockquote></p>
467
468 <p>Using the same method, I can quickly discover that the Sketchup file
469 format is not yet supported by any package in Debian:</p>
470
471 <p><blockquote><pre>
472 % appstreamcli what-provides mimetype application/vnd.sketchup.skp
473 Could not find component providing 'mimetype::application/vnd.sketchup.skp'.
474 %
475 </pre></blockquote></p>
476
477 <p>Yesterday I used it to figure out which packages support the STL 3D
478 format:</p>
479
480 <p><blockquote><pre>
481 % appstreamcli what-provides mimetype application/sla|grep Package
482 Package: cura
483 Package: meshlab
484 Package: printrun
485 %
486 </pre></blockquote></p>
487
488 <p>PS: A new version of Cura was uploaded to Debian yesterday.</p>
489
490 <p>As usual, if you use Bitcoin and want to show your support of my
491 activities, please send Bitcoin donations to my address
492 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
493
494 </div>
495 <div class="tags">
496
497
498 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
499
500
501 </div>
502 </div>
503 <div class="padding"></div>
504
505 <div class="entry">
506 <div class="title">
507 <a href="https://people.skolelinux.org/pere/blog/Debian_APT_upgrade_without_enough_free_space_on_the_disk___.html">Debian APT upgrade without enough free space on the disk...</a>
508 </div>
509 <div class="date">
510 8th July 2018
511 </div>
512 <div class="body">
513 <p>Quite regularly, I let my Debian Sid/Unstable chroot stay untouch
514 for a while, and when I need to update it there is not enough free
515 space on the disk for apt to do a normal 'apt upgrade'. I normally
516 would resolve the issue by doing 'apt install &lt;somepackages&gt;' to
517 upgrade only some of the packages in one batch, until the amount of
518 packages to download fall below the amount of free space available.
519 Today, I had about 500 packages to upgrade, and after a while I got
520 tired of trying to install chunks of packages manually. I concluded
521 that I did not have the spare hours required to complete the task, and
522 decided to see if I could automate it. I came up with this small
523 script which I call 'apt-in-chunks':</p>
524
525 <p><blockquote><pre>
526 #!/bin/sh
527 #
528 # Upgrade packages when the disk is too full to upgrade every
529 # upgradable package in one lump. Fetching packages to upgrade using
530 # apt, and then installing using dpkg, to avoid changing the package
531 # flag for manual/automatic.
532
533 set -e
534
535 ignore() {
536 if [ "$1" ]; then
537 grep -v "$1"
538 else
539 cat
540 fi
541 }
542
543 for p in $(apt list --upgradable | ignore "$@" |cut -d/ -f1 | grep -v '^Listing...'); do
544 echo "Upgrading $p"
545 apt clean
546 apt install --download-only -y $p
547 for f in /var/cache/apt/archives/*.deb; do
548 if [ -e "$f" ]; then
549 dpkg -i /var/cache/apt/archives/*.deb
550 break
551 fi
552 done
553 done
554 </pre></blockquote></p>
555
556 <p>The script will extract the list of packages to upgrade, try to
557 download the packages needed to upgrade one package, install the
558 downloaded packages using dpkg. The idea is to upgrade packages
559 without changing the APT mark for the package (ie the one recording of
560 the package was manually requested or pulled in as a dependency). To
561 use it, simply run it as root from the command line. If it fail, try
562 'apt install -f' to clean up the mess and run the script again. This
563 might happen if the new packages conflict with one of the old
564 packages. dpkg is unable to remove, while apt can do this.</p>
565
566 <p>It take one option, a package to ignore in the list of packages to
567 upgrade. The option to ignore a package is there to be able to skip
568 the packages that are simply too large to unpack. Today this was
569 'ghc', but I have run into other large packages causing similar
570 problems earlier (like TeX).</p>
571
572 <p>Update 2018-07-08: Thanks to Paul Wise, I am aware of two
573 alternative ways to handle this. The "unattended-upgrades
574 --minimal-upgrade-steps" option will try to calculate upgrade sets for
575 each package to upgrade, and then upgrade them in order, smallest set
576 first. It might be a better option than my above mentioned script.
577 Also, "aptutude upgrade" can upgrade single packages, thus avoiding
578 the need for using "dpkg -i" in the script above.</p>
579
580 <p>As usual, if you use Bitcoin and want to show your support of my
581 activities, please send Bitcoin donations to my address
582 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
583
584 </div>
585 <div class="tags">
586
587
588 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>.
589
590
591 </div>
592 </div>
593 <div class="padding"></div>
594
595 <p style="text-align: right;"><a href="07.rss"><img src="https://people.skolelinux.org/pere/blog/xml.gif" alt="RSS Feed" width="36" height="14" /></a></p>
596 <div id="sidebar">
597
598
599
600 <h2>Archive</h2>
601 <ul>
602
603 <li>2024
604 <ul>
605
606 <li><a href="https://people.skolelinux.org/pere/blog/archive/2024/01/">January (1)</a></li>
607
608 <li><a href="https://people.skolelinux.org/pere/blog/archive/2024/02/">February (1)</a></li>
609
610 <li><a href="https://people.skolelinux.org/pere/blog/archive/2024/03/">March (2)</a></li>
611
612 <li><a href="https://people.skolelinux.org/pere/blog/archive/2024/04/">April (2)</a></li>
613
614 </ul></li>
615
616 <li>2023
617 <ul>
618
619 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/01/">January (3)</a></li>
620
621 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/02/">February (1)</a></li>
622
623 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/04/">April (2)</a></li>
624
625 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/05/">May (3)</a></li>
626
627 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/06/">June (1)</a></li>
628
629 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/08/">August (1)</a></li>
630
631 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/09/">September (1)</a></li>
632
633 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/10/">October (1)</a></li>
634
635 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/11/">November (4)</a></li>
636
637 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/12/">December (1)</a></li>
638
639 </ul></li>
640
641 <li>2022
642 <ul>
643
644 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/02/">February (1)</a></li>
645
646 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/03/">March (3)</a></li>
647
648 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/04/">April (2)</a></li>
649
650 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/06/">June (2)</a></li>
651
652 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/07/">July (1)</a></li>
653
654 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/09/">September (1)</a></li>
655
656 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/10/">October (1)</a></li>
657
658 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/12/">December (1)</a></li>
659
660 </ul></li>
661
662 <li>2021
663 <ul>
664
665 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/01/">January (2)</a></li>
666
667 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/02/">February (1)</a></li>
668
669 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/05/">May (1)</a></li>
670
671 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/06/">June (1)</a></li>
672
673 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/07/">July (3)</a></li>
674
675 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/08/">August (1)</a></li>
676
677 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/09/">September (1)</a></li>
678
679 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/10/">October (1)</a></li>
680
681 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/12/">December (1)</a></li>
682
683 </ul></li>
684
685 <li>2020
686 <ul>
687
688 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/02/">February (2)</a></li>
689
690 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/03/">March (2)</a></li>
691
692 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/04/">April (2)</a></li>
693
694 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/05/">May (3)</a></li>
695
696 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/06/">June (2)</a></li>
697
698 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/07/">July (1)</a></li>
699
700 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/09/">September (1)</a></li>
701
702 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/10/">October (1)</a></li>
703
704 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/11/">November (1)</a></li>
705
706 </ul></li>
707
708 <li>2019
709 <ul>
710
711 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/01/">January (4)</a></li>
712
713 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/02/">February (3)</a></li>
714
715 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/03/">March (3)</a></li>
716
717 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/05/">May (2)</a></li>
718
719 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/06/">June (5)</a></li>
720
721 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/07/">July (2)</a></li>
722
723 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/08/">August (1)</a></li>
724
725 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/09/">September (1)</a></li>
726
727 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/11/">November (1)</a></li>
728
729 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/12/">December (4)</a></li>
730
731 </ul></li>
732
733 <li>2018
734 <ul>
735
736 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/01/">January (1)</a></li>
737
738 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/02/">February (5)</a></li>
739
740 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/03/">March (5)</a></li>
741
742 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/04/">April (3)</a></li>
743
744 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/06/">June (2)</a></li>
745
746 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/07/">July (5)</a></li>
747
748 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/08/">August (3)</a></li>
749
750 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/09/">September (3)</a></li>
751
752 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/10/">October (5)</a></li>
753
754 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/11/">November (2)</a></li>
755
756 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/12/">December (4)</a></li>
757
758 </ul></li>
759
760 <li>2017
761 <ul>
762
763 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/01/">January (4)</a></li>
764
765 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/02/">February (3)</a></li>
766
767 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/03/">March (5)</a></li>
768
769 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/04/">April (2)</a></li>
770
771 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/06/">June (5)</a></li>
772
773 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/07/">July (1)</a></li>
774
775 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/08/">August (1)</a></li>
776
777 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/09/">September (3)</a></li>
778
779 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/10/">October (5)</a></li>
780
781 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/11/">November (3)</a></li>
782
783 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/12/">December (4)</a></li>
784
785 </ul></li>
786
787 <li>2016
788 <ul>
789
790 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/01/">January (3)</a></li>
791
792 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/02/">February (2)</a></li>
793
794 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/03/">March (3)</a></li>
795
796 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/04/">April (8)</a></li>
797
798 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/05/">May (8)</a></li>
799
800 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/06/">June (2)</a></li>
801
802 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/07/">July (2)</a></li>
803
804 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/08/">August (5)</a></li>
805
806 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/09/">September (2)</a></li>
807
808 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/10/">October (3)</a></li>
809
810 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/11/">November (8)</a></li>
811
812 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/12/">December (5)</a></li>
813
814 </ul></li>
815
816 <li>2015
817 <ul>
818
819 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/01/">January (7)</a></li>
820
821 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/02/">February (6)</a></li>
822
823 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/03/">March (1)</a></li>
824
825 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/04/">April (4)</a></li>
826
827 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/05/">May (3)</a></li>
828
829 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/06/">June (4)</a></li>
830
831 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/07/">July (6)</a></li>
832
833 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/08/">August (2)</a></li>
834
835 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/09/">September (2)</a></li>
836
837 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/10/">October (9)</a></li>
838
839 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/11/">November (6)</a></li>
840
841 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/12/">December (3)</a></li>
842
843 </ul></li>
844
845 <li>2014
846 <ul>
847
848 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/01/">January (2)</a></li>
849
850 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/02/">February (3)</a></li>
851
852 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
853
854 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/04/">April (7)</a></li>
855
856 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/05/">May (1)</a></li>
857
858 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/06/">June (2)</a></li>
859
860 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/07/">July (2)</a></li>
861
862 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/08/">August (2)</a></li>
863
864 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/09/">September (5)</a></li>
865
866 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/10/">October (6)</a></li>
867
868 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/11/">November (3)</a></li>
869
870 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/12/">December (5)</a></li>
871
872 </ul></li>
873
874 <li>2013
875 <ul>
876
877 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
878
879 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
880
881 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
882
883 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
884
885 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
886
887 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
888
889 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
890
891 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
892
893 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
894
895 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/10/">October (7)</a></li>
896
897 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/11/">November (9)</a></li>
898
899 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/12/">December (3)</a></li>
900
901 </ul></li>
902
903 <li>2012
904 <ul>
905
906 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
907
908 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
909
910 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
911
912 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
913
914 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
915
916 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
917
918 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
919
920 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
921
922 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
923
924 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
925
926 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
927
928 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
929
930 </ul></li>
931
932 <li>2011
933 <ul>
934
935 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
936
937 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
938
939 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
940
941 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
942
943 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
944
945 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
946
947 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
948
949 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
950
951 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
952
953 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
954
955 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
956
957 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
958
959 </ul></li>
960
961 <li>2010
962 <ul>
963
964 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
965
966 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
967
968 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
969
970 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
971
972 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
973
974 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
975
976 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
977
978 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
979
980 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
981
982 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
983
984 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
985
986 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
987
988 </ul></li>
989
990 <li>2009
991 <ul>
992
993 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
994
995 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
996
997 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
998
999 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
1000
1001 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
1002
1003 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
1004
1005 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
1006
1007 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
1008
1009 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
1010
1011 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
1012
1013 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
1014
1015 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
1016
1017 </ul></li>
1018
1019 <li>2008
1020 <ul>
1021
1022 <li><a href="https://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
1023
1024 <li><a href="https://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
1025
1026 </ul></li>
1027
1028 </ul>
1029
1030
1031
1032 <h2>Tags</h2>
1033 <ul>
1034
1035 <li><a href="https://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (19)</a></li>
1036
1037 <li><a href="https://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
1038
1039 <li><a href="https://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
1040
1041 <li><a href="https://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
1042
1043 <li><a href="https://people.skolelinux.org/pere/blog/tags/betalkontant">betalkontant (9)</a></li>
1044
1045 <li><a href="https://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (13)</a></li>
1046
1047 <li><a href="https://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (17)</a></li>
1048
1049 <li><a href="https://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
1050
1051 <li><a href="https://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (3)</a></li>
1052
1053 <li><a href="https://people.skolelinux.org/pere/blog/tags/debian">debian (198)</a></li>
1054
1055 <li><a href="https://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (159)</a></li>
1056
1057 <li><a href="https://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (9)</a></li>
1058
1059 <li><a href="https://people.skolelinux.org/pere/blog/tags/digistan">digistan (11)</a></li>
1060
1061 <li><a href="https://people.skolelinux.org/pere/blog/tags/dld">dld (18)</a></li>
1062
1063 <li><a href="https://people.skolelinux.org/pere/blog/tags/docbook">docbook (32)</a></li>
1064
1065 <li><a href="https://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
1066
1067 <li><a href="https://people.skolelinux.org/pere/blog/tags/english">english (460)</a></li>
1068
1069 <li><a href="https://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
1070
1071 <li><a href="https://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (14)</a></li>
1072
1073 <li><a href="https://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (34)</a></li>
1074
1075 <li><a href="https://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (9)</a></li>
1076
1077 <li><a href="https://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (20)</a></li>
1078
1079 <li><a href="https://people.skolelinux.org/pere/blog/tags/h264">h264 (20)</a></li>
1080
1081 <li><a href="https://people.skolelinux.org/pere/blog/tags/intervju">intervju (43)</a></li>
1082
1083 <li><a href="https://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (18)</a></li>
1084
1085 <li><a href="https://people.skolelinux.org/pere/blog/tags/kart">kart (23)</a></li>
1086
1087 <li><a href="https://people.skolelinux.org/pere/blog/tags/kodi">kodi (6)</a></li>
1088
1089 <li><a href="https://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
1090
1091 <li><a href="https://people.skolelinux.org/pere/blog/tags/lego">lego (5)</a></li>
1092
1093 <li><a href="https://people.skolelinux.org/pere/blog/tags/lenker">lenker (8)</a></li>
1094
1095 <li><a href="https://people.skolelinux.org/pere/blog/tags/linuxcnc">linuxcnc (5)</a></li>
1096
1097 <li><a href="https://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (2)</a></li>
1098
1099 <li><a href="https://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
1100
1101 <li><a href="https://people.skolelinux.org/pere/blog/tags/madewithcc">madewithcc (3)</a></li>
1102
1103 <li><a href="https://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
1104
1105 <li><a href="https://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (46)</a></li>
1106
1107 <li><a href="https://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (15)</a></li>
1108
1109 <li><a href="https://people.skolelinux.org/pere/blog/tags/noark5">noark5 (25)</a></li>
1110
1111 <li><a href="https://people.skolelinux.org/pere/blog/tags/norsk">norsk (324)</a></li>
1112
1113 <li><a href="https://people.skolelinux.org/pere/blog/tags/nuug">nuug (199)</a></li>
1114
1115 <li><a href="https://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (41)</a></li>
1116
1117 <li><a href="https://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
1118
1119 <li><a href="https://people.skolelinux.org/pere/blog/tags/opensnitch">opensnitch (4)</a></li>
1120
1121 <li><a href="https://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (76)</a></li>
1122
1123 <li><a href="https://people.skolelinux.org/pere/blog/tags/personvern">personvern (114)</a></li>
1124
1125 <li><a href="https://people.skolelinux.org/pere/blog/tags/raid">raid (4)</a></li>
1126
1127 <li><a href="https://people.skolelinux.org/pere/blog/tags/reactos">reactos (1)</a></li>
1128
1129 <li><a href="https://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
1130
1131 <li><a href="https://people.skolelinux.org/pere/blog/tags/rfid">rfid (3)</a></li>
1132
1133 <li><a href="https://people.skolelinux.org/pere/blog/tags/robot">robot (17)</a></li>
1134
1135 <li><a href="https://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
1136
1137 <li><a href="https://people.skolelinux.org/pere/blog/tags/ruter">ruter (7)</a></li>
1138
1139 <li><a href="https://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
1140
1141 <li><a href="https://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (60)</a></li>
1142
1143 <li><a href="https://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
1144
1145 <li><a href="https://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (5)</a></li>
1146
1147 <li><a href="https://people.skolelinux.org/pere/blog/tags/standard">standard (76)</a></li>
1148
1149 <li><a href="https://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (7)</a></li>
1150
1151 <li><a href="https://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (14)</a></li>
1152
1153 <li><a href="https://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (65)</a></li>
1154
1155 <li><a href="https://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (5)</a></li>
1156
1157 <li><a href="https://people.skolelinux.org/pere/blog/tags/usenix">usenix (2)</a></li>
1158
1159 <li><a href="https://people.skolelinux.org/pere/blog/tags/valg">valg (9)</a></li>
1160
1161 <li><a href="https://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (22)</a></li>
1162
1163 <li><a href="https://people.skolelinux.org/pere/blog/tags/video">video (80)</a></li>
1164
1165 <li><a href="https://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
1166
1167 <li><a href="https://people.skolelinux.org/pere/blog/tags/web">web (42)</a></li>
1168
1169 </ul>
1170
1171
1172 </div>
1173 <p style="text-align: right">
1174 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
1175 </p>
1176
1177 </body>
1178 </html>