]> pere.pagekite.me Git - homepage.git/blobdiff - blog/tags/debian/index.html
Generated.
[homepage.git] / blog / tags / debian / index.html
index 1ce3690d2f087531f1e23920c4cd49e322fb33bd..268a5bfd6b11b31da21676b65b49002699264226 100644 (file)
 
     <h3>Entries tagged "debian".</h3>
     
 
     <h3>Entries tagged "debian".</h3>
     
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/The_life_and_death_of_a_laptop_battery.html">The life and death of a laptop battery</a>
+      </div>
+      <div class="date">
+        24th September 2015
+      </div>
+      <div class="body">
+        <p>When I get a new laptop, the battery life time at the start is OK.
+But this do not last.  The last few laptops gave me a feeling that
+within a year, the life time is just a fraction of what it used to be,
+and it slowly become painful to use the laptop without power connected
+all the time.  Because of this, when I got a new Thinkpad X230 laptop
+about two years ago, I decided to monitor its battery state to have
+more hard facts when the battery started to fail.</p>
+
+<img src="http://people.skolelinux.org/pere/blog/images/2015-09-24-laptop-battery-graph.png"/>
+
+<p>First I tried to find a sensible Debian package to record the
+battery status, assuming that this must be a problem already handled
+by someone else.  I found
+<a href="https://tracker.debian.org/pkg/battery-stats">battery-stats</a>,
+which collects statistics from the battery, but it was completely
+broken.  I sent a few suggestions to the maintainer, but decided to
+write my own collector as a shell script while I waited for feedback
+from him.  Via
+<a href="http://www.ifweassume.com/2013/08/the-de-evolution-of-my-laptop-battery.html">a
+blog post about the battery development on a MacBook Air</a> I also
+discovered
+<a href="https://github.com/jradavenport/batlog.git">batlog</a>, not
+available in Debian.</p>
+
+<p>I started my collector 2013-07-15, and it has been collecting
+battery stats ever since. Now my
+/var/log/hjemmenett-battery-status.log file contain around 115,000
+measurements, from the time the battery was working great until now,
+when it is unable to charge above 7% of original capasity.  My
+colletor shell script is quite simple and look like this:</p>
+
+<pre>
+#!/bin/sh
+# Inspired by
+# http://www.ifweassume.com/2013/08/the-de-evolution-of-my-laptop-battery.html
+# See also
+# http://blog.sleeplessbeastie.eu/2013/01/02/debian-how-to-monitor-battery-capacity/
+logfile=/var/log/hjemmenett-battery-status.log
+
+files="manufacturer model_name technology serial_number \
+    energy_full energy_full_design energy_now cycle_count status"
+
+if [ ! -e "$logfile" ] ; then
+    (
+       printf "timestamp,"
+       for f in $files; do
+           printf "%s," $f
+       done
+       echo
+    ) > "$logfile"
+fi
+
+log_battery() {
+    # Print complete message in one echo call, to avoid race condition
+    # when several log processes run in parallell.
+    msg=$(printf "%s," $(date +%s); \
+       for f in $files; do \
+           printf "%s," $(cat $f); \
+       done)
+    echo "$msg"
+}
+
+cd /sys/class/power_supply
+
+for bat in BAT*; do
+    (cd $bat && log_battery >> "$logfile")
+done
+</pre>
+
+<p>The script is called when the power management system detect a
+change in the power status (power plug in or out), and when going into
+and out of hibernation and suspend.  In addition, it collect a value
+every 10 minutes.  This make it possible for me know when the battery
+is discharging, charging and how the maximum charge change over time.
+The code for the Debian package
+<a href="https://github.com/petterreinholdtsen/battery-status">is now
+available on github</a>.</p>
+
+<p>The collected log file look like this:</p>
+
+<pre>
+timestamp,manufacturer,model_name,technology,serial_number,energy_full,energy_full_design,energy_now,cycle_count,status,
+1376591133,LGC,45N1025,Li-ion,974,62800000,62160000,39050000,0,Discharging,
+[...]
+1443090528,LGC,45N1025,Li-ion,974,4900000,62160000,4900000,0,Full,
+1443090601,LGC,45N1025,Li-ion,974,4900000,62160000,4900000,0,Full,
+</pre>
+
+<p>I wrote a small script to create a graph of the charge development
+over time.  This graph depicted above show the slow death of mylaptop
+battery.</p>
+
+<p>But why is this happening?  Why are my laptop batteries always
+dying in a year or two, while the batteries of space probes and
+satellites keep working year after year.  If we are to believe
+<a href="http://batteryuniversity.com/learn/article/how_to_prolong_lithium_based_batteries">Battery
+University</a>, the cause is me charging the battery whenever I have a
+chance, and the fix is to not charge the Lithium-ion batteries to 100%
+all the time, but to stay below 90% of full charge most of the time.
+I've been told that the Tesla electric cars
+<a href="http://my.teslamotors.com/de_CH/forum/forums/battery-charge-limit">limit
+the charge of their batteries to 80%</a>, with the option to charge to
+100% when preparing for a longer trip (not that I would want a car
+like Tesla where rights to privacy is abandoned, but that is another
+story), which I guess is the option we should have for laptops on
+Linux too.</p>
+
+<p>Is there a good and generic way with Linux to tell the battery to
+stop charging at 80%, unless requested to charge to 100% once in
+preparation for a longer trip?  I found
+<a href="http://askubuntu.com/questions/34452/how-can-i-limit-battery-charging-to-80-capacity">one
+recipe on askubuntu for Ubuntu to limit charging on Thinkpad to
+80%</a>, but could not get it to work (kernel module refused to
+load).</p>
+
+<p>I wonder why the battery capacity was reported to be more than 100%
+at the start.  I also wonder why the "full capacity" increases some
+times, and if it is possible to repeat the process to get the battery
+back to design capacity.  And I wonder if the discharge and charge
+speed change over time, or if this stay the same.  I did not yet try
+to write a tool to calculate the derivative values of the battery
+level, but suspect some interesting insights might be learned from
+those.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/New_laptop___some_more_clues_and_ideas_based_on_feedback.html">New laptop - some more clues and ideas based on feedback</a>
+      </div>
+      <div class="date">
+         5th July 2015
+      </div>
+      <div class="body">
+        <p>Several people contacted me after my previous blog post about my
+need for a new laptop, and provided very useful feedback.  I wish to
+thank every one of these.  Several pointed me to the possibility of
+fixing my X230, and I am already in the process of getting Lenovo to
+do so thanks to the on site, next day support contract covering the
+machine.  But the battery is almost useless (I expect to replace it
+with a non-official battery) and I do not expect the machine to live
+for many more years, so it is time to plan its replacement.  If I did
+not have a support contract, it was suggested to find replacement parts
+using <a href="http://www.francecrans.com/">FrancEcrans</a>, but it
+might present a language barrier as I do not understand French.</p>
+
+<p>One tip I got was to use the
+<a href="https://skinflint.co.uk/?cat=nb">Skinflint</a> web service to
+compare laptop models.  It seem to have more models available than
+prisjakt.no.  Another tip I got from someone I know have similar
+keyboard preferences was that the HP EliteBook 840 keyboard is not
+very good, and this matches my experience with earlier EliteBook
+keyboards I tested.  Because of this, I will not consider it any further.
+
+<p>When I wrote my blog post, I was not aware of Thinkpad X250, the
+newest Thinkpad X model.  The keyboard reintroduces mouse buttons
+(which is missing from the X240), and is working fairly well with
+Debian Sid/Unstable according to
+<a href="http://www.corsac.net/X250/">Corsac.net</a>.  The reports I
+got on the keyboard quality are not consistent.  Some say the keyboard
+is good, others say it is ok, while others say it is not very good.
+Those with experience from X41 and and X60 agree that the X250
+keyboard is not as good as those trusty old laptops, and suggest I
+keep and fix my X230 instead of upgrading, or get a used X230 to
+replace it.  I'm also told that the X250 lack leds for caps lock, disk
+activity and battery status, which is very convenient on my X230.  I'm
+also told that the CPU fan is running very often, making it a bit
+noisy.  In any case, the X250 do not work out of the box with Debian
+Stable/Jessie, one of my requirements.</p>
+
+<p>I have also gotten a few vendor proposals, one was
+<a href="http://pro-star.com">Pro-Star</a>, another was
+<a href="http://shop.gluglug.org.uk/product/libreboot-x200/">Libreboot</a>.
+The latter look very attractive to me.</p>
+
+<p>Again, thank you all for the very useful feedback.  It help a lot
+as I keep looking for a replacement.</p>
+
+<p>Update 2015-07-06: I was recommended to check out the
+<a href="">lapstore.de</a> web shop for used laptops.  They got several
+different
+<a href="http://www.lapstore.de/f.php/shop/lapstore/f/411/lang/x/kw/Lenovo_ThinkPad_X_Serie/">old
+thinkpad X models</a>, and provide one year warranty.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/Time_to_find_a_new_laptop__as_the_old_one_is_broken_after_only_two_years.html">Time to find a new laptop, as the old one is broken after only two years</a>
+      </div>
+      <div class="date">
+         3rd July 2015
+      </div>
+      <div class="body">
+        <p>My primary work horse laptop is failing, and will need a
+replacement soon.  The left 5 cm of the screen on my Thinkpad X230
+started flickering yesterday, and I suspect the cause is a broken
+cable, as changing the angle of the screen some times get rid of the
+flickering.</p>
+
+<p>My requirements have not really changed since I bought it, and is
+still as
+<a href="http://people.skolelinux.org/pere/blog/Thank_you_Thinkpad_X41__for_your_long_and_trustworthy_service.html">I
+described them in 2013</a>.  The last time I bought a laptop, I had
+good help from
+<a href="http://www.prisjakt.no/category.php?k=353">prisjakt.no</a>
+where I could select at least a few of the requirements (mouse pin,
+wifi, weight) and go through the rest manually.  Three button mouse
+and a good keyboard is not available as an option, and all the three
+laptop models proposed today (Thinkpad X240, HP EliteBook 820 G1 and
+G2) lack three mouse buttons).  It is also unclear to me how good the
+keyboard on the HP EliteBooks are.  I hope Lenovo have not messed up
+the keyboard, even if the quality and robustness in the X series have
+deteriorated since X41.</p>
+
+<p>I wonder how I can find a sensible laptop when none of the options
+seem sensible to me?  Are there better services around to search the
+set of available laptops for features?  Please send me an email if you
+have suggestions.</p>
+
+<p>Update 2015-07-23: I got a suggestion to check out the FSF
+<a href="http://www.fsf.org/resources/hw/endorsement/respects-your-freedom">list
+of endorsed hardware</a>, which is useful background information.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <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>
+      </div>
+      <div class="date">
+        22nd November 2014
+      </div>
+      <div class="body">
+        <p>By now, it is well known that Debian Jessie will not be using
+sysvinit as its boot system by default.  But how can one keep using
+sysvinit in Jessie?  It is fairly easy, and here are a few recipes,
+courtesy of
+<a href="http://www.vitavonni.de/blog/201410/2014102101-avoiding-systemd.html">Erich
+Schubert</a> and
+<a href="http://smcv.pseudorandom.co.uk/2014/still_universal/">Simon
+McVittie</a>.
+
+<p>If you already are using Wheezy and want to upgrade to Jessie and
+keep sysvinit as your boot system, create a file
+<tt>/etc/apt/preferences.d/use-sysvinit</tt> with this content before
+you upgrade:</p>
+
+<p><blockquote><pre>
+Package: systemd-sysv
+Pin: release o=Debian
+Pin-Priority: -1
+</pre></blockquote><p>
+
+<p>This file content will tell apt and aptitude to not consider
+installing systemd-sysv as part of any installation and upgrade
+solution when resolving dependencies, and thus tell it to avoid
+systemd as a default boot system.  The end result should be that the
+upgraded system keep using sysvinit.</p>
+
+<p>If you are installing Jessie for the first time, there is no way to
+get sysvinit installed by default (debootstrap used by
+debian-installer have no option for this), but one can tell the
+installer to switch to sysvinit before the first boot.  Either by
+using a kernel argument to the installer, or by adding a line to the
+preseed file used.  First, the kernel command line argument:
+
+<p><blockquote><pre>
+preseed/late_command="in-target apt-get install --purge -y sysvinit-core"
+</pre></blockquote><p>
+
+<p>Next, the line to use in a preseed file:</p>
+
+<p><blockquote><pre>
+d-i preseed/late_command string in-target apt-get install -y sysvinit-core
+</pre></blockquote><p>
+
+<p>One can of course also do this after the first boot by installing
+the sysvinit-core package.</p>
+
+<p>I recommend only using sysvinit if you really need it, as the
+sysvinit boot sequence in Debian have several hardware specific bugs
+on Linux caused by the fact that it is unpredictable when hardware
+devices show up during boot.  But on the other hand, the new default
+boot system still have a few rough edges I hope will be fixed before
+Jessie is released.</p>
+
+<p>Update 2014-11-26: Inspired by
+<ahref="https://www.mirbsd.org/permalinks/wlog-10-tg_e20141125-tg.htm#e20141125-tg_wlog-10-tg">a
+blog post by Torsten Glaser</a>, added --purge to the preseed
+line.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        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>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/A_Debian_package_for_SMTP_via_Tor__aka_SMTorP__using_exim4.html">A Debian package for SMTP via Tor (aka SMTorP) using exim4</a>
+      </div>
+      <div class="date">
+        10th November 2014
+      </div>
+      <div class="body">
+        <p>The right to communicate with your friends and family in private,
+without anyone snooping, is a right every citicen have in a liberal
+democracy.  But this right is under serious attack these days.</p>
+
+<p>A while back it occurred to me that one way to make the dragnet
+surveillance conducted by NSA, GCHQ, FRA and others (and confirmed by
+the whisleblower Snowden) more expensive for Internet email,
+is to deliver all email using SMTP via Tor.  Such SMTP option would be
+a nice addition to the FreedomBox project if we could send email
+between FreedomBox machines without leaking metadata about the emails
+to the people peeking on the wire.  I
+<a href="http://lists.alioth.debian.org/pipermail/freedombox-discuss/2014-October/006493.html">proposed
+this on the FreedomBox project mailing list in October</a> and got a
+lot of useful feedback and suggestions.  It also became obvious to me
+that this was not a novel idea, as the same idea was tested and
+documented by Johannes Berg as early as 2006, and both
+<a href="https://github.com/pagekite/Mailpile/wiki/SMTorP">the
+Mailpile</a> and <a href="http://dee.su/cables">the Cables</a> systems
+propose a similar method / protocol to pass emails between users.</p>
+
+<p>To implement such system one need to set up a Tor hidden service
+providing the SMTP protocol on port 25, and use email addresses
+looking like username@hidden-service-name.onion.  With such addresses
+the connections to port 25 on hidden-service-name.onion using Tor will
+go to the correct SMTP server.  To do this, one need to configure the
+Tor daemon to provide the hidden service and the mail server to accept
+emails for this .onion domain.  To learn more about Exim configuration
+in Debian and test the design provided by Johannes Berg in his FAQ, I
+set out yesterday to create a Debian package for making it trivial to
+set up such SMTP over Tor service based on Debian.  Getting it to work
+were fairly easy, and
+<a href="https://github.com/petterreinholdtsen/exim4-smtorp">the
+source code for the Debian package</a> is available from github.  I
+plan to move it into Debian if further testing prove this to be a
+useful approach.</p>
+
+<p>If you want to test this, set up a blank Debian machine without any
+mail system installed (or run <tt>apt-get purge exim4-config</tt> to
+get rid of exim4).  Install tor, clone the git repository mentioned
+above, build the deb and install it on the machine.  Next, run
+<tt>/usr/lib/exim4-smtorp/setup-exim-hidden-service</tt> and follow
+the instructions to get the service up and running.  Restart tor and
+exim when it is done, and test mail delivery using swaks like
+this:</p>
+
+<p><blockquote><pre>
+torsocks swaks --server dutlqrrmjhtfa3vp.onion \
+  --to fbx@dutlqrrmjhtfa3vp.onion
+</pre></blockquote></p>
+
+<p>This will test the SMTP delivery using tor.  Replace the email
+address with your own address to test your server. :)</p>
+
+<p>The setup procedure is still to complex, and I hope it can be made
+easier and more automatic.  Especially the tor setup need more work.
+Also, the package include a tor-smtp tool written in C, but its task
+should probably be rewritten in some script language to make the deb
+architecture independent.  It would probably also make the code easier
+to review.  The tor-smtp tool currently need to listen on a socket for
+exim to talk to it and is started using xinetd.  It would be better if
+no daemon and no socket is needed.  I suspect it is possible to get
+exim to run a command line tool for delivery instead of talking to a
+socket, and hope to figure out how in a future version of this
+system.</p>
+
+<p>Until I wipe my test machine, I can be reached using the
+<tt>fbx@dutlqrrmjhtfa3vp.onion</tt> mail address, deliverable over
+SMTorP. :)</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <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/freedombox">freedombox</a>, <a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/listadmin__the_quick_way_to_moderate_mailman_lists___nice_free_software.html">listadmin, the quick way to moderate mailman lists - nice free software</a>
+      </div>
+      <div class="date">
+        22nd October 2014
+      </div>
+      <div class="body">
+        <p>If you ever had to moderate a mailman list, like the ones on
+alioth.debian.org, you know the web interface is fairly slow to
+operate.  First you visit one web page, enter the moderation password
+and get a new page shown with a list of all the messages to moderate
+and various options for each email address.  This take a while for
+every list you moderate, and you need to do it regularly to do a good
+job as a list moderator.  But there is a quick alternative,
+<a href="http://heim.ifi.uio.no/kjetilho/hacks/#listadmin">the
+listadmin program</a>.  It allow you to check lists for new messages
+to moderate in a fraction of a second.  Here is a test run on two
+lists I recently took over:</p>
+
+<p><blockquote><pre>
+% time listadmin xiph
+fetching data for pkg-xiph-commits@lists.alioth.debian.org ... nothing in queue
+fetching data for pkg-xiph-maint@lists.alioth.debian.org ... nothing in queue
+
+real    0m1.709s
+user    0m0.232s
+sys     0m0.012s
+%
+</pre></blockquote></p>
+
+<p>In 1.7 seconds I had checked two mailing lists and confirmed that
+there are no message in the moderation queue.  Every morning I
+currently moderate 68 mailman lists, and it normally take around two
+minutes.  When I took over the two pkg-xiph lists above a few days
+ago, there were 400 emails waiting in the moderator queue.  It took me
+less than 15 minutes to process them all using the listadmin
+program.</p>
+
+<p>If you install
+<a href="https://tracker.debian.org/pkg/listadmin">the listadmin
+package</a> from Debian and create a file <tt>~/.listadmin.ini</tt>
+with content like this, the moderation task is a breeze:</p>
+
+<p><blockquote><pre>
+username username@example.org
+spamlevel 23
+default discard
+discard_if_reason "Posting restricted to members only. Remove us from your mail list."
+
+password secret
+adminurl https://{domain}/mailman/admindb/{list}
+mailman-list@lists.example.com
+
+password hidden
+other-list@otherserver.example.org
+</pre></blockquote></p>
+
+<p>There are other options to set as well.  Check the manual page to
+learn the details.</p>
+
+<p>If you are forced to moderate lists on a mailman installation where
+the SSL certificate is self signed or not properly signed by a
+generally accepted signing authority, you can set a environment
+variable when calling listadmin to disable SSL verification:</p>
+
+<p><blockquote><pre>
+PERL_LWP_SSL_VERIFY_HOSTNAME=0 listadmin
+</pre></blockquote></p>
+
+<p>If you want to moderate a subset of the lists you take care of, you
+can provide an argument to the listadmin script like I do in the
+initial screen dump (the xiph argument).  Using an argument, only
+lists matching the argument string will be processed.  This make it
+quick to accept messages if you notice the moderation request in your
+email.</p>
+
+<p>Without the listadmin program, I would never be the moderator of 68
+mailing lists, as I simply do not have time to spend on that if the
+process was any slower. The listadmin program have saved me hours of
+time I could spend elsewhere over the years.  It truly is nice free
+software.</p>
+
+<p>As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&label=PetterReinholdtsenBlog">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
+
+<p>Update 2014-10-27: Added missing 'username' statement in
+configuration example.  Also, I've been told that the
+PERL_LWP_SSL_VERIFY_HOSTNAME=0 setting do not work for everyone.  Not
+sure why.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/Debian_Jessie__PXE_and_automatic_firmware_installation.html">Debian Jessie, PXE and automatic firmware installation</a>
+      </div>
+      <div class="date">
+        17th October 2014
+      </div>
+      <div class="body">
+        <p>When PXE installing laptops with Debian, I often run into the
+problem that the WiFi card require some firmware to work properly.
+And it has been a pain to fix this using preseeding in Debian.
+Normally something more is needed.  But thanks to
+<a href="https://packages.qa.debian.org/i/isenkram.html">my isenkram
+package</a> and its recent tasksel extension, it has now become easy
+to do this using simple preseeding.</p>
+
+<p>The isenkram-cli package provide tasksel tasks which will install
+firmware for the hardware found in the machine (actually, requested by
+the kernel modules for the hardware).  (It can also install user space
+programs supporting the hardware detected, but that is not the focus
+of this story.)</p>
+
+<p>To get this working in the default installation, two preeseding
+values are needed.  First, the isenkram-cli package must be installed
+into the target chroot (aka the hard drive) before tasksel is executed
+in the pkgsel step of the debian-installer system.  This is done by
+preseeding the base-installer/includes debconf value to include the
+isenkram-cli package.  The package name is next passed to debootstrap
+for installation.  With the isenkram-cli package in place, tasksel
+will automatically use the isenkram tasks to detect hardware specific
+packages for the machine being installed and install them, because
+isenkram-cli contain tasksel tasks.</p>
+
+<p>Second, one need to enable the non-free APT repository, because
+most firmware unfortunately is non-free.  This is done by preseeding
+the apt-mirror-setup step.  This is unfortunate, but for a lot of
+hardware it is the only option in Debian.</p>
+
+<p>The end result is two lines needed in your preseeding file to get
+firmware installed automatically by the installer:</p>
+
+<p><blockquote><pre>
+base-installer base-installer/includes string isenkram-cli
+apt-mirror-setup apt-setup/non-free boolean true
+</pre></blockquote></p>
+
+<p>The current version of isenkram-cli in testing/jessie will install
+both firmware and user space packages when using this method.  It also
+do not work well, so use version 0.15 or later.  Installing both
+firmware and user space packages might give you a bit more than you
+want, so I decided to split the tasksel task in two, one for firmware
+and one for user space programs.  The firmware task is enabled by
+default, while the one for user space programs is not.  This split is
+implemented in the package currently in unstable.</p>
+
+<p>If you decide to give this a go, please let me know (via email) how
+this recipe work for you. :)</p>
+
+<p>So, I bet you are wondering, how can this work.  First and
+foremost, it work because tasksel is modular, and driven by whatever
+files it find in /usr/lib/tasksel/ and /usr/share/tasksel/.  So the
+isenkram-cli package place two files for tasksel to find.  First there
+is the task description file (/usr/share/tasksel/descs/isenkram.desc):</p>
+
+<p><blockquote><pre>
+Task: isenkram-packages
+Section: hardware
+Description: Hardware specific packages (autodetected by isenkram)
+ Based on the detected hardware various hardware specific packages are
+ proposed.
+Test-new-install: show show
+Relevance: 8
+Packages: for-current-hardware
+
+Task: isenkram-firmware
+Section: hardware
+Description: Hardware specific firmware packages (autodetected by isenkram)
+ Based on the detected hardware various hardware specific firmware
+ packages are proposed.
+Test-new-install: mark show
+Relevance: 8
+Packages: for-current-hardware-firmware
+</pre></blockquote></p>
+
+<p>The key parts are Test-new-install which indicate how the task
+should be handled and the Packages line referencing to a script in
+/usr/lib/tasksel/packages/.  The scripts use other scripts to get a
+list of packages to install.  The for-current-hardware-firmware script
+look like this to list relevant firmware for the machine:
+
+<p><blockquote><pre>
+#!/bin/sh
+#
+PATH=/usr/sbin:$PATH
+export PATH
+isenkram-autoinstall-firmware -l
+</pre></blockquote></p>
+
+<p>With those two pieces in place, the firmware is installed by
+tasksel during the normal d-i run. :)</p>
+
+<p>If you want to test what tasksel will install when isenkram-cli is
+installed, run <tt>DEBIAN_PRIORITY=critical tasksel --test
+--new-install</tt> to get the list of packages that tasksel would
+install.</p>
+
+<p><a href="https://wiki.debian.org/DebianEdu/">Debian Edu</a> will be
+pilots in testing this feature, as isenkram is used there now to
+install firmware, replacing the earlier scripts.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <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/isenkram">isenkram</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/Ubuntu_used_to_show_the_bread_prizes_at_ICA_Storo.html">Ubuntu used to show the bread prizes at ICA Storo</a>
+      </div>
+      <div class="date">
+         4th October 2014
+      </div>
+      <div class="body">
+        <p>Today I came across an unexpected Ubuntu boot screen.  Above the
+bread shelf on the ICA shop at Storo in Oslo, the grub menu of Ubuntu
+with Linux kernel 3.2.0-23 (ie probably version 12.04 LTS) was stuck
+on a screen normally showing the bread types and prizes:</p>
+
+<p align="center"><img width="70%" src="http://people.skolelinux.org/pere/blog/images/2014-10-04-ubuntu-ica-storo-crop.jpeg"></p>
+
+<p>If it had booted as it was supposed to, I would never had known
+about this hidden Linux installation.  It is interesting what
+<a href="http://revealingerrors.com/">errors can reveal</a>.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/New_lsdvd_release_version_0_17_is_ready.html">New lsdvd release version 0.17 is ready</a>
+      </div>
+      <div class="date">
+         4th October 2014
+      </div>
+      <div class="body">
+        <p>The <a href="https://sourceforge.net/p/lsdvd/">lsdvd project</a>
+got a new set of developers a few weeks ago, after the original
+developer decided to step down and pass the project to fresh blood.
+This project is now maintained by Petter Reinholdtsen and Steve
+Dibb.</p>
+
+<p>I just wrapped up
+<a href="https://sourceforge.net/p/lsdvd/mailman/message/32896061/">a
+new lsdvd release</a>, available in git or from
+<a href="https://sourceforge.net/projects/lsdvd/files/lsdvd/">the
+download page</a>.  This is the changelog dated 2014-10-03 for version
+0.17.</p>
+
+<ul>
+
+ <li>Ignore 'phantom' audio, subtitle tracks</li>
+ <li>Check for garbage in the program chains, which indicate that a track is
+   non-existant, to work around additional copy protection</li>
+ <li>Fix displaying content type for audio tracks, subtitles</li>
+ <li>Fix pallete display of first entry</li>
+ <li>Fix include orders</li>
+ <li>Ignore read errors in titles that would not be displayed anyway</li>
+ <li>Fix the chapter count</li>
+ <li>Make sure the array size and the array limit used when initialising
+   the palette size is the same.</li>
+ <li>Fix array printing.</li>
+ <li>Correct subsecond calculations.</li>
+ <li>Add sector information to the output format.</li>
+ <li>Clean up code to be closer to ANSI C and compile without warnings
+   with more GCC compiler warnings.</li>
+
+</ul>
+
+<p>This change bring together patches for lsdvd in use in various
+Linux and Unix distributions, as well as patches submitted to the
+project the last nine years.  Please check it out. :)</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <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/lsdvd">lsdvd</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/How_to_test_Debian_Edu_Jessie_despite_some_fatal_problems_with_the_installer.html">How to test Debian Edu Jessie despite some fatal problems with the installer</a>
+      </div>
+      <div class="date">
+        26th September 2014
+      </div>
+      <div class="body">
+        <p>The <a href="http://www.skolelinux.org/">Debian Edu / Skolelinux
+project</a> provide a Linux solution for schools, including a
+powerful desktop with education software, a central server providing
+web pages, user database, user home directories, central login and PXE
+boot of both  clients without disk and the installation to install Debian
+Edu on machines with disk (and a few other services perhaps to small
+to mention here).  We in the Debian Edu team are currently working on
+the Jessie based version, trying to get everything in shape before the
+freeze, to avoid having to maintain our own package repository in the
+future.  The
+<a href="https://wiki.debian.org/DebianEdu/Status/Jessie">current
+status</a> can be seen on the Debian wiki, and there is still heaps of
+work left.  Some fatal problems block testing, breaking the installer,
+but it is possible to work around these to get anyway.  Here is a
+recipe on how to get the installation limping along.</p>
+
+<p>First, download the test ISO via
+<a href="ftp://ftp.skolelinux.no/cd-edu-testing-nolocal-netinst/debian-edu-amd64-i386-NETINST-1.iso">ftp</a>,
+<a href="http://ftp.skolelinux.no/cd-edu-testing-nolocal-netinst/debian-edu-amd64-i386-NETINST-1.iso">http</a>
+or rsync (use
+ftp.skolelinux.org::cd-edu-testing-nolocal-netinst/debian-edu-amd64-i386-NETINST-1.iso).
+The ISO build was broken on Tuesday, so we do not get a new ISO every
+12 hours or so, but thankfully the ISO we already got we are able to
+install with some tweaking.</p>
+
+<p>When you get to the Debian Edu profile question, go to tty2
+(use Alt-Ctrl-F2), run</p>
+
+<p><blockquote><pre>
+nano /usr/bin/edu-eatmydata-install
+</pre></blockquote></p>
+
+<p>and add 'exit 0' as the second line, disabling the eatmydata
+optimization.  Return to the installation, select the profile you want
+and continue.  Without this change, exim4-config will fail to install
+due to a known bug in eatmydata.</p>
+
+<p>When you get the grub question at the end, answer /dev/sda (or if
+this do not work, figure out what your correct value would be.  All my
+test machines need /dev/sda, so I have no advice if it do not fit
+your need.</p>
+
+<p>If you installed a profile including a graphical desktop, log in as
+root after the initial boot from hard drive, and install the
+education-desktop-XXX metapackage.  XXX can be kde, gnome, lxde, xfce
+or mate.  If you want several desktop options, install more than one
+metapackage.  Once this is done, reboot and you should have a working
+graphical login screen.  This workaround should no longer be needed
+once the education-tasks package version 1.801 enter testing in two
+days.</p>
+
+<p>I believe the ISO build will start working on two days when the new
+tasksel package enter testing and Steve McIntyre get a chance to
+update the debian-cd git repository.  The eatmydata, grub and desktop
+issues are already fixed in unstable and testing, and should show up
+on the ISO as soon as the ISO build start working again.  Well the
+eatmydata optimization is really just disabled.  The proper fix
+require an upload by the eatmydata maintainer applying the patch
+provided in bug <a href="https://bugs.debian.org/702711">#702711</a>.
+The rest have proper fixes in unstable.</p>
+
+<p>I hope this get you going with the installation testing, as we are
+quickly running out of time trying to get our Jessie based
+installation ready before the distribution freeze in a month.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <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>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/Suddenly_I_am_the_new_upstream_of_the_lsdvd_command_line_tool.html">Suddenly I am the new upstream of the lsdvd command line tool</a>
+      </div>
+      <div class="date">
+        25th September 2014
+      </div>
+      <div class="body">
+        <p>I use the <a href="https://sourceforge.net/p/lsdvd/">lsdvd tool</a>
+to handle my fairly large DVD collection.  It is a nice command line
+tool to get details about a DVD, like title, tracks, track length,
+etc, in XML, Perl or human readable format.  But lsdvd have not seen
+any new development since 2006 and had a few irritating bugs affecting
+its use with some DVDs.  Upstream seemed to be dead, and in January I
+sent a small probe asking for a version control repository for the
+project, without any reply.  But I use it regularly and would like to
+get <a href="https://packages.qa.debian.org/lsdvd">an updated version
+into Debian</a>.  So two weeks ago I tried harder to get in touch with
+the project admin, and after getting a reply from him explaining that
+he was no longer interested in the project, I asked if I could take
+over.  And yesterday, I became project admin.</p>
+
+<p>I've been in touch with a Gentoo developer and the Debian
+maintainer interested in joining forces to maintain the upstream
+project, and I hope we can get a new release out fairly quickly,
+collecting the patches spread around on the internet into on place.
+I've added the relevant Debian patches to the freshly created git
+repository, and expect the Gentoo patches to make it too.  If you got
+a DVD collection and care about command line tools, check out
+<a href="https://sourceforge.net/p/lsdvd/git/ci/master/tree/">the git source</a> and join
+<a href="https://sourceforge.net/p/lsdvd/mailman/">the project mailing
+list</a>. :)</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <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/lsdvd">lsdvd</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/Speeding_up_the_Debian_installer_using_eatmydata_and_dpkg_divert.html">Speeding up the Debian installer using eatmydata and dpkg-divert</a>
+      </div>
+      <div class="date">
+        16th September 2014
+      </div>
+      <div class="body">
+        <p>The <a href="https://www.debian.org/">Debian</a> installer could be
+a lot quicker.  When we install more than 2000 packages in
+<a href="http://www.skolelinux.org/">Skolelinux / Debian Edu</a> using
+tasksel in the installer, unpacking the binary packages take forever.
+A part of the slow I/O issue was discussed in
+<a href="https://bugs.debian.org/613428">bug #613428</a> about too
+much file system sync-ing done by dpkg, which is the package
+responsible for unpacking the binary packages.  Other parts (like code
+executed by postinst scripts) might also sync to disk during
+installation.  All this sync-ing to disk do not really make sense to
+me.  If the machine crash half-way through, I start over, I do not try
+to salvage the half installed system.  So the failure sync-ing is
+supposed to protect against, hardware or system crash, is not really
+relevant while the installer is running.</p>
+
+<p>A few days ago, I thought of a way to get rid of all the file
+system sync()-ing in a fairly non-intrusive way, without the need to
+change the code in several packages.  The idea is not new, but I have
+not heard anyone propose the approach using dpkg-divert before.  It
+depend on the small and clever package
+<a href="https://packages.qa.debian.org/eatmydata">eatmydata</a>, which
+uses LD_PRELOAD to replace the system functions for syncing data to
+disk with functions doing nothing, thus allowing programs to live
+dangerous while speeding up disk I/O significantly.  Instead of
+modifying the implementation of dpkg, apt and tasksel (which are the
+packages responsible for selecting, fetching and installing packages),
+it occurred to me that we could just divert the programs away, replace
+them with a simple shell wrapper calling
+"eatmydata&nbsp;$program&nbsp;$@", to get the same effect.
+Two days ago I decided to test the idea, and wrapped up a simple
+implementation for the Debian Edu udeb.</p>
+
+<p>The effect was stunning.  In my first test it reduced the running
+time of the pkgsel step (installing tasks) from 64 to less than 44
+minutes (20 minutes shaved off the installation) on an old Dell
+Latitude D505 machine.  I am not quite sure what the optimised time
+would have been, as I messed up the testing a bit, causing the debconf
+priority to get low enough for two questions to pop up during
+installation.  As soon as I saw the questions I moved the installation
+along, but do not know how long the question were holding up the
+installation.  I did some more measurements using Debian Edu Jessie,
+and got these results.  The time measured is the time stamp in
+/var/log/syslog between the "pkgsel: starting tasksel" and the
+"pkgsel: finishing up" lines, if you want to do the same measurement
+yourself.  In Debian Edu, the tasksel dialog do not show up, and the
+timing thus do not depend on how quickly the user handle the tasksel
+dialog.</p>
+
+<p><table>
+
+<tr>
+<th>Machine/setup</th>
+<th>Original tasksel</th>
+<th>Optimised tasksel</th>
+<th>Reduction</th>
+</tr>
+
+<tr>
+<td>Latitude D505 Main+LTSP LXDE</td>
+<td>64 min (07:46-08:50)</td>
+<td><44 min (11:27-12:11)</td>
+<td>>20 min 18%</td>
+</tr>
+
+<tr>
+<td>Latitude D505 Roaming LXDE</td>
+<td>57 min (08:48-09:45)</td>
+<td>34 min (07:43-08:17)</td>
+<td>23 min 40%</td>
+</tr>
+
+<tr>
+<td>Latitude D505 Minimal</td>
+<td>22 min (10:37-10:59)</td>
+<td>11 min (11:16-11:27)</td>
+<td>11 min 50%</td>
+</tr>
+
+<tr>
+<td>Thinkpad X200 Minimal</td>
+<td>6 min (08:19-08:25)</td>
+<td>4 min (08:04-08:08)</td>
+<td>2 min 33%</td>
+</tr>
+
+<tr>
+<td>Thinkpad X200 Roaming KDE</td>
+<td>19 min (09:21-09:40)</td>
+<td>15 min (10:25-10:40)</td>
+<td>4 min 21%</td>
+</tr>
+
+</table></p>
+
+<p>The test is done using a netinst ISO on a USB stick, so some of the
+time is spent downloading packages.  The connection to the Internet
+was 100Mbit/s during testing, so downloading should not be a
+significant factor in the measurement.  Download typically took a few
+seconds to a few minutes, depending on the amount of packages being
+installed.</p>
+
+<p>The speedup is implemented by using two hooks in
+<a href="https://www.debian.org/devel/debian-installer/">Debian
+Installer</a>, the pre-pkgsel.d hook to set up the diverts, and the
+finish-install.d hook to remove the divert at the end of the
+installation.  I picked the pre-pkgsel.d hook instead of the
+post-base-installer.d hook because I test using an ISO without the
+eatmydata package included, and the post-base-installer.d hook in
+Debian Edu can only operate on packages included in the ISO.  The
+negative effect of this is that I am unable to activate this
+optimization for the kernel installation step in d-i.  If the code is
+moved to the post-base-installer.d hook, the speedup would be larger
+for the entire installation.</p>
+
+<p>I've implemented this in the
+<a href="https://packages.qa.debian.org/debian-edu-install">debian-edu-install</a>
+git repository, and plan to provide the optimization as part of the
+Debian Edu installation.  If you want to test this yourself, you can
+create two files in the installer (or in an udeb).  One shell script
+need do go into /usr/lib/pre-pkgsel.d/, with content like this:</p>
+
+<p><blockquote><pre>
+#!/bin/sh
+set -e
+. /usr/share/debconf/confmodule
+info() {
+    logger -t my-pkgsel "info: $*"
+}
+error() {
+    logger -t my-pkgsel "error: $*"
+}
+override_install() {
+    apt-install eatmydata || true
+    if [ -x /target/usr/bin/eatmydata ] ; then
+        for bin in dpkg apt-get aptitude tasksel ; do
+            file=/usr/bin/$bin
+            # Test that the file exist and have not been diverted already.
+            if [ -f /target$file ] ; then
+                info "diverting $file using eatmydata"
+                printf "#!/bin/sh\neatmydata $bin.distrib \"\$@\"\n" \
+                    > /target$file.edu
+                chmod 755 /target$file.edu
+                in-target dpkg-divert --package debian-edu-config \
+                    --rename --quiet --add $file
+                ln -sf ./$bin.edu /target$file
+            else
+                error "unable to divert $file, as it is missing."
+            fi
+        done
+    else
+        error "unable to find /usr/bin/eatmydata after installing the eatmydata pacage"
+    fi
+}
+
+override_install
+</pre></blockquote></p>
+
+<p>To clean up, another shell script should go into
+/usr/lib/finish-install.d/ with code like this:
+
+<p><blockquote><pre>
+#! /bin/sh -e
+. /usr/share/debconf/confmodule
+error() {
+    logger -t my-finish-install "error: $@"
+}
+remove_install_override() {
+    for bin in dpkg apt-get aptitude tasksel ; do
+        file=/usr/bin/$bin
+        if [ -x /target$file.edu ] ; then
+            rm /target$file
+            in-target dpkg-divert --package debian-edu-config \
+                --rename --quiet --remove $file
+            rm /target$file.edu
+        else
+            error "Missing divert for $file."
+        fi
+    done
+    sync # Flush file buffers before continuing
+}
+
+remove_install_override
+</pre></blockquote></p>
+
+<p>In Debian Edu, I placed both code fragments in a separate script
+edu-eatmydata-install and call it from the pre-pkgsel.d and
+finish-install.d scripts.</p>
+
+<p>By now you might ask if this change should get into the normal
+Debian installer too?  I suspect it should, but am not sure the
+current debian-installer coordinators find it useful enough.  It also
+depend on the side effects of the change.  I'm not aware of any, but I
+guess we will see if the change is safe after some more testing.
+Perhaps there is some package in Debian depending on sync() and
+fsync() having effect?  Perhaps it should go into its own udeb, to
+allow those of us wanting to enable it to do so without affecting
+everyone.</p>
+
+<p>Update 2014-09-24: Since a few days ago, enabling this optimization
+will break installation of all programs using gnutls because of
+<a href="https://bugs.debian.org/702711">bug #702711</a>.  An updated
+eatmydata package in Debian will solve it.</p>
+
+<p>Update 2014-10-17: The bug mentioned above is fixed in testing and
+the optimization work again.  And I have discovered that the
+dpkg-divert trick is not really needed and implemented a slightly
+simpler approach as part of the debian-edu-install package.  See
+tools/edu-eatmydata-install in the source package.</p>
+
+<p>Update 2014-11-11: Unfortunately, a new
+<a href="http://bugs.debian.org/765738">bug #765738</a> in eatmydata only
+triggering on i386 made it into testing, and broke this installation
+optimization again.  If <a href="http://bugs.debian.org/768893">unblock
+request 768893</a> is accepted, it should be working again.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <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>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/Good_bye_subkeys_pgp_net__welcome_pool_sks_keyservers_net.html">Good bye subkeys.pgp.net, welcome pool.sks-keyservers.net</a>
+      </div>
+      <div class="date">
+        10th September 2014
+      </div>
+      <div class="body">
+        <p>Yesterday, I had the pleasure of attending a talk with the
+<a href="http://www.nuug.no/">Norwegian Unix User Group</a> about
+<a href="http://www.nuug.no/aktiviteter/20140909-sks-keyservers/">the
+OpenPGP keyserver pool sks-keyservers.net</a>, and was very happy to
+learn that there is a large set of publicly available key servers to
+use when looking for peoples public key.  So far I have used
+subkeys.pgp.net, and some times wwwkeys.nl.pgp.net when the former
+were misbehaving, but those days are ended.  The servers I have used
+up until yesterday have been slow and some times unavailable.  I hope
+those problems are gone now.</p>
+
+<p>Behind the round robin DNS entry of the
+<a href="https://sks-keyservers.net/">sks-keyservers.net</a> service
+there is a pool of more than 100 keyservers which are checked every
+day to ensure they are well connected and up to date.  It must be
+better than what I have used so far. :)</p>
+
+<p>Yesterdays speaker told me that the service is the default
+keyserver provided by the default configuration in GnuPG, but this do
+not seem to be used in Debian.  Perhaps it should?</p>
+
+<p>Anyway, I've updated my ~/.gnupg/options file to now include this
+line:</p>
+
+<p><blockquote><pre>
+keyserver pool.sks-keyservers.net
+</pre></blockquote></p>
+
+<p>With GnuPG version 2 one can also locate the keyserver using SRV
+entries in DNS.  Just for fun, I did just that at work, so now every
+user of GnuPG at the University of Oslo should find a OpenGPG
+keyserver automatically should their need it:</p>
+
+<p><blockquote><pre>
+% host -t srv _pgpkey-http._tcp.uio.no
+_pgpkey-http._tcp.uio.no has SRV record 0 100 11371 pool.sks-keyservers.net.
+%
+</pre></blockquote></p>
+
+<p>Now if only
+<a href="http://ietfreport.isoc.org/idref/draft-shaw-openpgp-hkp/">the
+HKP lookup protocol</a> supported finding signature paths, I would be
+very happy.  It can look up a given key or search for a user ID, but I
+normally do not want that, but to find a trust path from my key to
+another key.  Given a user ID or key ID, I would like to find (and
+download) the keys representing a signature path from my key to the
+key in question, to be able to get a trust path between the two keys.
+This is as far as I can tell not possible today.  Perhaps something
+for a future version of the protocol?</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <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/personvern">personvern</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/From_English_wiki_to_translated_PDF_and_epub_via_Docbook.html">From English wiki to translated PDF and epub via Docbook</a>
+      </div>
+      <div class="date">
+        17th June 2014
+      </div>
+      <div class="body">
+        <p>The <a href="http://www.skolelinux.org/">Debian Edu / Skolelinux
+project</a> provide an instruction manual for teachers, system
+administrators and other users that contain useful tips for setting up
+and maintaining a Debian Edu installation.  This text is about how the
+text processing of this manual is handled in the project.</p>
+
+<p>One goal of the project is to provide information in the native
+language of its users, and for this we need to handle translations.
+But we also want to make sure each language contain the same
+information, so for this we need a good way to keep the translations
+in sync.  And we want it to be easy for our users to improve the
+documentation, avoiding the need to learn special formats or tools to
+contribute, and the obvious way to do this is to make it possible to
+edit the documentation using a web browser.  We also want it to be
+easy for translators to keep the translation up to date, and give them
+help in figuring out what need to be translated. Here is the list of
+tools and the process we have found trying to reach all these
+goals.</p>
+
+<p>We maintain the authoritative source of our manual in the
+<a href="https://wiki.debian.org/DebianEdu/Documentation/Wheezy/">Debian
+wiki</a>, as several wiki pages written in English.  It consist of one
+front page with references to the different chapters, several pages
+for each chapter, and finally one "collection page" gluing all the
+chapters together into one large web page (aka
+<a href="https://wiki.debian.org/DebianEdu/Documentation/Wheezy/AllInOne">the
+AllInOne page</a>).  The AllInOne page is the one used for further
+processing and translations.  Thanks to the fact that the
+<a href="http://moinmo.in/">MoinMoin</a> installation on
+wiki.debian.org support exporting pages in
+<a href="http://www.docbook.org/">the Docbook format</a>, we can fetch
+the list of pages to export using the raw version of the AllInOne
+page, loop over each of them to generate a Docbook XML version of the
+manual.  This process also download images and transform image
+references to use the locally downloaded images.  The generated
+Docbook XML files are slightly broken, so some post-processing is done
+using the <tt>documentation/scripts/get_manual</tt> program, and the
+result is a nice Docbook XML file (debian-edu-wheezy-manual.xml) and
+a handfull of images.  The XML file can now be used to generate PDF, HTML
+and epub versions of the English manual.  This is the basic step of
+our process, making PDF (using dblatex), HTML (using xsltproc) and
+epub (using dbtoepub) version from Docbook XML, and the resulting files
+are placed in the debian-edu-doc-en binary package.</p>
+
+<p>But English documentation is not enough for us.  We want translated
+documentation too, and we want to make it easy for translators to
+track the English original.  For this we use the
+<a href="http://packages.qa.debian.org/p/poxml.html">poxml</a> package,
+which allow us to transform the English Docbook XML file into a
+translation file (a .pot file), usable with the normal gettext based
+translation tools used by those translating free software.  The pot
+file is used to create and maintain translation files (several .po
+files), which the translations update with the native language
+translations of all titles, paragraphs and blocks of text in the
+original.  The next step is combining the original English Docbook XML
+and the translation file (say debian-edu-wheezy-manual.nb.po), to
+create a translated Docbook XML file (in this case
+debian-edu-wheezy-manual.nb.xml).  This translated (or partly
+translated, if the translation is not complete) Docbook XML file can
+then be used like the original to create a PDF, HTML and epub version
+of the documentation.</p>
+
+<p>The translators use different tools to edit the .po files.  We
+recommend using
+<a href="http://www.kde.org/applications/development/lokalize/">lokalize</a>,
+while some use emacs and vi, others can use web based editors like
+<a href="http://pootle.translatehouse.org/">Poodle</a> or
+<a href="https://www.transifex.com/">Transifex</a>.  All we care about
+is where the .po file end up, in our git repository.  Updated
+translations can either be committed directly to git, or submitted as
+<a href="https://bugs.debian.org/src:debian-edu-doc">bug reports
+against the debian-edu-doc package</a>.</p>
+
+<p>One challenge is images, which both might need to be translated (if
+they show translated user applications), and are needed in different
+formats when creating PDF and HTML versions (epub is a HTML version in
+this regard).  For this we transform the original PNG images to the
+needed density and format during build, and have a way to provide
+translated images by storing translated versions in
+images/$LANGUAGECODE/.  I am a bit unsure about the details here.  The
+package maintainers know more.</p>
+
+<p>If you wonder what the result look like, we provide
+<a href="http://maintainer.skolelinux.org/debian-edu-doc/">the content
+of the documentation packages on the web</a>.  See for example the
+<a href="http://maintainer.skolelinux.org/debian-edu-doc/it/debian-edu-wheezy-manual.pdf">Italian
+PDF version</a> or the
+<a href="http://maintainer.skolelinux.org/debian-edu-doc/de/debian-edu-wheezy-manual.html">German
+HTML version</a>.  We do not yet build the epub version by default,
+but perhaps it will be done in the future.</p>
+
+<p>To learn more, check out
+<a href="http://packages.qa.debian.org/d/debian-edu-doc.html">the
+debian-edu-doc package</a>,
+<a href="https://wiki.debian.org/DebianEdu/Documentation/Wheezy/">the
+manual on the wiki</a> and
+<a href="https://wiki.debian.org/DebianEdu/Documentation/Wheezy/Translations">the
+translation instructions</a> in the manual.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <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/docbook">docbook</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/Install_hardware_dependent_packages_using_tasksel__Isenkram_0_7_.html">Install hardware dependent packages using tasksel (Isenkram 0.7)</a>
+      </div>
+      <div class="date">
+        23rd April 2014
+      </div>
+      <div class="body">
+        <p>It would be nice if it was easier in Debian to get all the hardware
+related packages relevant for the computer installed automatically.
+So I implemented one, using
+<a href="http://packages.qa.debian.org/isenkram">my Isenkram
+package</a>.  To use it, install the tasksel and isenkram packages and
+run tasksel as user root.  You should be presented with a new option,
+"Hardware specific packages (autodetected by isenkram)".  When you
+select it, tasksel will install the packages isenkram claim is fit for
+the current hardware, hot pluggable or not.<p>
+
+<p>The implementation is in two files, one is the tasksel menu entry
+description, and the other is the script used to extract the list of
+packages to install.  The first part is in
+<tt>/usr/share/tasksel/descs/isenkram.desc</tt> and look like
+this:</p>
+
+<p><blockquote><pre>
+Task: isenkram
+Section: hardware
+Description: Hardware specific packages (autodetected by isenkram)
+ Based on the detected hardware various hardware specific packages are
+ proposed.
+Test-new-install: mark show
+Relevance: 8
+Packages: for-current-hardware
+</pre></blockquote></p>
+
+<p>The second part is in
+<tt>/usr/lib/tasksel/packages/for-current-hardware</tt> and look like
+this:</p>
+
+<p><blockquote><pre>
+#!/bin/sh
+#
+(
+    isenkram-lookup
+    isenkram-autoinstall-firmware -l
+) | sort -u
+</pre></blockquote></p>
+
+<p>All in all, a very short and simple implementation making it
+trivial to install the hardware dependent package we all may want to
+have installed on our machines.  I've not been able to find a way to
+get tasksel to tell you exactly which packages it plan to install
+before doing the installation.  So if you are curious or careful,
+check the output from the isenkram-* command line tools first.</p>
+
+<p>The information about which packages are handling which hardware is
+fetched either from the isenkram package itself in
+/usr/share/isenkram/, from git.debian.org or from the APT package
+database (using the Modaliases header).  The APT package database
+parsing have caused a nasty resource leak in the isenkram daemon (bugs
+<a href="http://bugs.debian.org/719837">#719837</a> and
+<a href="http://bugs.debian.org/730704">#730704</a>).  The cause is in
+the python-apt code (bug
+<a href="http://bugs.debian.org/745487">#745487</a>), but using a
+workaround I was able to get rid of the file descriptor leak and
+reduce the memory leak from ~30 MiB per hardware detection down to
+around 2 MiB per hardware detection.  It should make the desktop
+daemon a lot more useful.  The fix is in version 0.7 uploaded to
+unstable today.</p>
+
+<p>I believe the current way of mapping hardware to packages in
+Isenkram is is a good draft, but in the future I expect isenkram to
+use the AppStream data source for this.  A proposal for getting proper
+AppStream support into Debian is floating around as
+<a href="https://wiki.debian.org/DEP-11">DEP-11</a>, and
+<a href="https://wiki.debian.org/SummerOfCode2014/Projects#SummerOfCode2014.2FProjects.2FAppStreamDEP11Implementation.AppStream.2FDEP-11_for_the_Debian_Archive">GSoC
+project</a> will take place this summer to improve the situation.  I
+look forward to seeing the result, and welcome patches for isenkram to
+start using the information when it is ready.</p>
+
+<p>If you want your package to map to some specific hardware, either
+add a "Xb-Modaliases" header to your control file like I did in
+<a href="http://packages.qa.debian.org/pymissile">the pymissile
+package</a> or submit a bug report with the details to the isenkram
+package.  See also
+<a href="http://people.skolelinux.org/pere/blog/tags/isenkram/">all my
+blog posts tagged isenkram</a> for details on the notation.  I expect
+the information will be migrated to AppStream eventually, but for the
+moment I got no better place to store it.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <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/isenkram">isenkram</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/FreedomBox_milestone___all_packages_now_in_Debian_Sid.html">FreedomBox milestone - all packages now in Debian Sid</a>
+      </div>
+      <div class="date">
+        15th April 2014
+      </div>
+      <div class="body">
+        <p>The <a href="https://wiki.debian.org/FreedomBox">Freedombox
+project</a> is working on providing the software and hardware to make
+it easy for non-technical people to host their data and communication
+at home, and being able to communicate with their friends and family
+encrypted and away from prying eyes.  It is still going strong, and
+today a major mile stone was reached.</p>
+
+<p>Today, the last of the packages currently used by the project to
+created the system images were accepted into Debian Unstable.  It was
+the freedombox-setup package, which is used to configure the images
+during build and on the first boot.  Now all one need to get going is
+the build code from the freedom-maker git repository and packages from
+Debian.  And once the freedombox-setup package enter testing, we can
+build everything directly from Debian. :)</p>
+
+<p>Some key packages used by Freedombox are
+<a href="http://packages.qa.debian.org/freedombox-setup">freedombox-setup</a>,
+<a href="http://packages.qa.debian.org/plinth">plinth</a>,
+<a href="http://packages.qa.debian.org/pagekite">pagekite</a>,
+<a href="http://packages.qa.debian.org/tor">tor</a>,
+<a href="http://packages.qa.debian.org/privoxy">privoxy</a>,
+<a href="http://packages.qa.debian.org/owncloud">owncloud</a> and
+<a href="http://packages.qa.debian.org/dnsmasq">dnsmasq</a>.  There
+are plans to integrate more packages into the setup.  User
+documentation is maintained on the Debian wiki.  Please
+<a href="https://wiki.debian.org/FreedomBox/Manual/Jessie">check out
+the manual</a> and help us improve it.</p>
+
+<p>To test for yourself and create boot images with the FreedomBox
+setup, run this on a Debian machine using a user with sudo rights to
+become root:</p>
+
+<p><pre>
+sudo apt-get install git vmdebootstrap mercurial python-docutils \
+  mktorrent extlinux virtualbox qemu-user-static binfmt-support \
+  u-boot-tools
+git clone http://anonscm.debian.org/git/freedombox/freedom-maker.git \
+  freedom-maker
+make -C freedom-maker dreamplug-image raspberry-image virtualbox-image
+</pre></p>
+
+<p>Root access is needed to run debootstrap and mount loopback
+devices.  See the README in the freedom-maker git repo for more
+details on the build.  If you do not want all three images, trim the
+make line.  Note that the virtualbox-image target is not really
+virtualbox specific.  It create a x86 image usable in kvm, qemu,
+vmware and any other x86 virtual machine environment.  You might need
+the version of vmdebootstrap in Jessie to get the build working, as it
+include fixes for a race condition with kpartx.</p>
+
+<p>If you instead want to install using a Debian CD and the preseed
+method, boot a Debian Wheezy ISO and use this boot argument to load
+the preseed values:</p>
+
+<p><pre>
+url=<a href="http://www.reinholdtsen.name/freedombox/preseed-jessie.dat">http://www.reinholdtsen.name/freedombox/preseed-jessie.dat</a>
+</pre></p>
+
+<p>I have not tested it myself the last few weeks, so I do not know if
+it still work.</p>
+
+<p>If you wonder how to help, one task you could look at is using
+systemd as the boot system.  It will become the default for Linux in
+Jessie, so we need to make sure it is usable on the Freedombox.  I did
+a simple test a few weeks ago, and noticed dnsmasq failed to start
+during boot when using systemd.  I suspect there are other problems
+too. :) To detect problems, there is a test suite included, which can
+be run from the plinth web interface.</p>
+
+<p>Give it a go and let us know how it goes on the mailing list, and help
+us get the new release published. :) Please join us on
+<a href="irc://irc.debian.org:6667/%23freedombox">IRC (#freedombox on
+irc.debian.org)</a> and
+<a href="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">the
+mailing list</a> if you want to help make this vision come true.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <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/freedombox">freedombox</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="http://people.skolelinux.org/pere/blog/S3QL__a_locally_mounted_cloud_file_system___nice_free_software.html">S3QL, a locally mounted cloud file system - nice free software</a>
+      </div>
+      <div class="date">
+         9th April 2014
+      </div>
+      <div class="body">
+        <p>For a while now, I have been looking for a sensible offsite backup
+solution for use at home.  My requirements are simple, it must be
+cheap and locally encrypted (in other words, I keep the encryption
+keys, the storage provider do not have access to my private files).
+One idea me and my friends had many years ago, before the cloud
+storage providers showed up, was to use Google mail as storage,
+writing a Linux block device storing blocks as emails in the mail
+service provided by Google, and thus get heaps of free space.  On top
+of this one can add encryption, RAID and volume management to have
+lots of (fairly slow, I admit that) cheap and encrypted storage.  But
+I never found time to implement such system.  But the last few weeks I
+have looked at a system called
+<a href="https://bitbucket.org/nikratio/s3ql/">S3QL</a>, a locally
+mounted network backed file system with the features I need.</p>
+
+<p>S3QL is a fuse file system with a local cache and cloud storage,
+handling several different storage providers, any with Amazon S3,
+Google Drive or OpenStack API.  There are heaps of such storage
+providers.  S3QL can also use a local directory as storage, which
+combined with sshfs allow for file storage on any ssh server.  S3QL
+include support for encryption, compression, de-duplication, snapshots
+and immutable file systems, allowing me to mount the remote storage as
+a local mount point, look at and use the files as if they were local,
+while the content is stored in the cloud as well.  This allow me to
+have a backup that should survive fire.  The file system can not be
+shared between several machines at the same time, as only one can
+mount it at the time, but any machine with the encryption key and
+access to the storage service can mount it if it is unmounted.</p>
+
+<p>It is simple to use.  I'm using it on Debian Wheezy, where the
+package is included already.  So to get started, run <tt>apt-get
+install s3ql</tt>.  Next, pick a storage provider.  I ended up picking
+Greenqloud, after reading their nice recipe on
+<a href="https://greenqloud.zendesk.com/entries/44611757-How-To-Use-S3QL-to-mount-a-StorageQloud-bucket-on-Debian-Wheezy">how
+to use S3QL with their Amazon S3 service</a>, because I trust the laws
+in Iceland more than those in USA when it come to keeping my personal
+data safe and private, and thus would rather spend money on a company
+in Iceland.  Another nice recipe is available from the article
+<a href="http://www.admin-magazine.com/HPC/Articles/HPC-Cloud-Storage">S3QL
+Filesystem for HPC Storage</a> by Jeff Layton in the HPC section of
+Admin magazine.  When the provider is picked, figure out how to get
+the API key needed to connect to the storage API.  With Greencloud,
+the key did not show up until I had added payment details to my
+account.</p>
+
+<p>Armed with the API access details, it is time to create the file
+system.  First, create a new bucket in the cloud.  This bucket is the
+file system storage area.  I picked a bucket name reflecting the
+machine that was going to store data there, but any name will do.
+I'll refer to it as <tt>bucket-name</tt> below.  In addition, one need
+the API login and password, and a locally created password.  Store it
+all in ~root/.s3ql/authinfo2 like this:
+
+<p><blockquote><pre>
+[s3c]
+storage-url: s3c://s.greenqloud.com:443/bucket-name
+backend-login: API-login
+backend-password: API-password
+fs-passphrase: local-password
+</pre></blockquote></p>
+
+<p>I create my local passphrase using <tt>pwget 50</tt> or similar,
+but any sensible way to create a fairly random password should do it.
+Armed with these details, it is now time to run mkfs, entering the API
+details and password to create it:</p>
+
+<p><blockquote><pre>
+# mkdir -m 700 /var/lib/s3ql-cache
+# mkfs.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
+  --ssl s3c://s.greenqloud.com:443/bucket-name
+Enter backend login: 
+Enter backend password: 
+Before using S3QL, make sure to read the user's guide, especially
+the 'Important Rules to Avoid Loosing Data' section.
+Enter encryption password: 
+Confirm encryption password: 
+Generating random encryption key...
+Creating metadata tables...
+Dumping metadata...
+..objects..
+..blocks..
+..inodes..
+..inode_blocks..
+..symlink_targets..
+..names..
+..contents..
+..ext_attributes..
+Compressing and uploading metadata...
+Wrote 0.00 MB of compressed metadata.
+# </pre></blockquote></p>
+
+<p>The next step is mounting the file system to make the storage available.
+
+<p><blockquote><pre>
+# mount.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
+  --ssl --allow-root s3c://s.greenqloud.com:443/bucket-name /s3ql
+Using 4 upload threads.
+Downloading and decompressing metadata...
+Reading metadata...
+..objects..
+..blocks..
+..inodes..
+..inode_blocks..
+..symlink_targets..
+..names..
+..contents..
+..ext_attributes..
+Mounting filesystem...
+# df -h /s3ql
+Filesystem                              Size  Used Avail Use% Mounted on
+s3c://s.greenqloud.com:443/bucket-name  1.0T     0  1.0T   0% /s3ql
+#
+</pre></blockquote></p>
+
+<p>The file system is now ready for use.  I use rsync to store my
+backups in it, and as the metadata used by rsync is downloaded at
+mount time, no network traffic (and storage cost) is triggered by
+running rsync.  To unmount, one should not use the normal umount
+command, as this will not flush the cache to the cloud storage, but
+instead running the umount.s3ql command like this:
+
+<p><blockquote><pre>
+# umount.s3ql /s3ql
+# 
+</pre></blockquote></p>
+
+<p>There is a fsck command available to check the file system and
+correct any problems detected.  This can be used if the local server
+crashes while the file system is mounted, to reset the "already
+mounted" flag.  This is what it look like when processing a working
+file system:</p>
+
+<p><blockquote><pre>
+# fsck.s3ql --force --ssl s3c://s.greenqloud.com:443/bucket-name
+Using cached metadata.
+File system seems clean, checking anyway.
+Checking DB integrity...
+Creating temporary extra indices...
+Checking lost+found...
+Checking cached objects...
+Checking names (refcounts)...
+Checking contents (names)...
+Checking contents (inodes)...
+Checking contents (parent inodes)...
+Checking objects (reference counts)...
+Checking objects (backend)...
+..processed 5000 objects so far..
+..processed 10000 objects so far..
+..processed 15000 objects so far..
+Checking objects (sizes)...
+Checking blocks (referenced objects)...
+Checking blocks (refcounts)...
+Checking inode-block mapping (blocks)...
+Checking inode-block mapping (inodes)...
+Checking inodes (refcounts)...
+Checking inodes (sizes)...
+Checking extended attributes (names)...
+Checking extended attributes (inodes)...
+Checking symlinks (inodes)...
+Checking directory reachability...
+Checking unix conventions...
+Checking referential integrity...
+Dropping temporary indices...
+Backing up old metadata...
+Dumping metadata...
+..objects..
+..blocks..
+..inodes..
+..inode_blocks..
+..symlink_targets..
+..names..
+..contents..
+..ext_attributes..
+Compressing and uploading metadata...
+Wrote 0.89 MB of compressed metadata.
+# 
+</pre></blockquote></p>
+
+<p>Thanks to the cache, working on files that fit in the cache is very
+quick, about the same speed as local file access.  Uploading large
+amount of data is to me limited by the bandwidth out of and into my
+house.  Uploading 685 MiB with a 100 MiB cache gave me 305 kiB/s,
+which is very close to my upload speed, and downloading the same
+Debian installation ISO gave me 610 kiB/s, close to my download speed.
+Both were measured using <tt>dd</tt>.  So for me, the bottleneck is my
+network, not the file system code.  I do not know what a good cache
+size would be, but suspect that the cache should e larger than your
+working set.</p>
+
+<p>I mentioned that only one machine can mount the file system at the
+time.  If another machine try, it is told that the file system is
+busy:</p>
+
+<p><blockquote><pre>
+# mount.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
+  --ssl --allow-root s3c://s.greenqloud.com:443/bucket-name /s3ql
+Using 8 upload threads.
+Backend reports that fs is still mounted elsewhere, aborting.
+#
+</pre></blockquote></p>
+
+<p>The file content is uploaded when the cache is full, while the
+metadata is uploaded once every 24 hour by default.  To ensure the
+file system content is flushed to the cloud, one can either umount the
+file system, or ask S3QL to flush the cache and metadata using
+s3qlctrl:
+
+<p><blockquote><pre>
+# s3qlctrl upload-meta /s3ql
+# s3qlctrl flushcache /s3ql
+# 
+</pre></blockquote></p>
+
+<p>If you are curious about how much space your data uses in the
+cloud, and how much compression and deduplication cut down on the
+storage usage, you can use s3qlstat on the mounted file system to get
+a report:</p>
+
+<p><blockquote><pre>
+# s3qlstat /s3ql
+Directory entries:    9141
+Inodes:               9143
+Data blocks:          8851
+Total data size:      22049.38 MB
+After de-duplication: 21955.46 MB (99.57% of total)
+After compression:    21877.28 MB (99.22% of total, 99.64% of de-duplicated)
+Database size:        2.39 MB (uncompressed)
+(some values do not take into account not-yet-uploaded dirty blocks in cache)
+#
+</pre></blockquote></p>
+
+<p>I mentioned earlier that there are several possible suppliers of
+storage.  I did not try to locate them all, but am aware of at least
+<a href="https://www.greenqloud.com/">Greenqloud</a>,
+<a href="http://drive.google.com/">Google Drive</a>,
+<a href="http://aws.amazon.com/s3/">Amazon S3 web serivces</a>,
+<a href="http://www.rackspace.com/">Rackspace</a> and
+<a href="http://crowncloud.net/">Crowncloud</A>.  The latter even
+accept payment in Bitcoin.  Pick one that suit your need.  Some of
+them provide several GiB of free storage, but the prize models are
+quite different and you will have to figure out what suits you
+best.</p>
+
+<p>While researching this blog post, I had a look at research papers
+and posters discussing the S3QL file system.  There are several, which
+told me that the file system is getting a critical check by the
+science community and increased my confidence in using it.  One nice
+poster is titled
+"<a href="http://www.lanl.gov/orgs/adtsc/publications/science_highlights_2013/docs/pg68_69.pdf">An
+Innovative Parallel Cloud Storage System using OpenStack’s SwiftObject
+Store and Transformative Parallel I/O Approach</a>" by Hsing-Bung
+Chen, Benjamin McClelland, David Sherrill, Alfred Torrez, Parks Fields
+and Pamela Smith.  Please  have a look.</p>
+
+<p>Given my problems with different file systems earlier, I decided to
+check out the mounted S3QL file system to see if it would be usable as
+a home directory (in other word, that it provided POSIX semantics when
+it come to locking and umask handling etc).  Running
+<a href="http://people.skolelinux.org/pere/blog/Testing_if_a_file_system_can_be_used_for_home_directories___.html">my
+test code to check file system semantics</a>, I was happy to discover that
+no error was found.  So the file system can be used for home
+directories, if one chooses to do so.</p>
+
+<p>If you do not want a locally file system, and want something that
+work without the Linux fuse file system, I would like to mention the
+<a href="http://www.tarsnap.com/">Tarsnap service</a>, which also
+provide locally encrypted backup using a command line client.  It have
+a nicer access control system, where one can split out read and write
+access, allowing some systems to write to the backup and others to
+only read from it.</p>
+
+<p>As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&label=PetterReinholdtsenBlog">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <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/personvern">personvern</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
     <div class="entry">
       <div class="title">
         <a href="http://people.skolelinux.org/pere/blog/Freedombox_on_Dreamplug__Raspberry_Pi_and_virtual_x86_machine.html">Freedombox on Dreamplug, Raspberry Pi and virtual x86 machine</a>
     <div class="entry">
       <div class="title">
         <a href="http://people.skolelinux.org/pere/blog/Freedombox_on_Dreamplug__Raspberry_Pi_and_virtual_x86_machine.html">Freedombox on Dreamplug, Raspberry Pi and virtual x86 machine</a>
@@ -2824,7 +4599,7 @@ git://anonscm.debian.org/collab-maint/pymissile.git</tt>".</p>
       <div class="tags">
         
         
       <div class="tags">
         
         
-        Tags: <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/robot">robot</a>.
+        Tags: <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/isenkram">isenkram</a>, <a href="http://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
         
         
       </div>
         
         
       </div>
@@ -3625,7 +5400,7 @@ maintainers, but would make the end user experience a lot better.</p>
       <div class="tags">
         
         
       <div class="tags">
         
         
-        Tags: <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/multimedia">multimedia</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>.
+        Tags: <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/h264">h264</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>.
         
         
       </div>
         
         
       </div>
@@ -7493,6 +9268,29 @@ be the only one fitting our needs. :/</p>
 <h2>Archive</h2>
 <ul>
 
 <h2>Archive</h2>
 <ul>
 
+<li>2015
+<ul>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2015/01/">January (7)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2015/02/">February (6)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2015/03/">March (1)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2015/04/">April (4)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2015/05/">May (3)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2015/06/">June (4)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2015/07/">July (6)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2015/08/">August (2)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2015/09/">September (2)</a></li>
+
+</ul></li>
+
 <li>2014
 <ul>
 
 <li>2014
 <ul>
 
@@ -7502,6 +9300,24 @@ be the only one fitting our needs. :/</p>
 
 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
 
 
 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
 
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2014/04/">April (7)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2014/05/">May (1)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2014/06/">June (2)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2014/07/">July (2)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2014/08/">August (2)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2014/09/">September (5)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2014/10/">October (6)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2014/11/">November (3)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2014/12/">December (5)</a></li>
+
 </ul></li>
 
 <li>2013
 </ul></li>
 
 <li>2013
@@ -7675,67 +9491,75 @@ be the only one fitting our needs. :/</p>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (8)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (8)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (14)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (15)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (95)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (112)</a></li>
 
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (146)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (153)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/digistan">digistan (10)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/digistan">digistan (10)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/docbook">docbook (10)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/dld">dld (15)</a></li>
+
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/docbook">docbook (17)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (241)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (288)</a></li>
 
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (21)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (12)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (12)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (12)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (19)</a></li>
 
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (7)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (9)</a></li>
 
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (11)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (16)</a></li>
 
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/intervju">intervju (40)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/h264">h264 (20)</a></li>
 
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (7)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/intervju">intervju (42)</a></li>
 
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (18)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (10)</a></li>
+
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (19)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (7)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (8)</a></li>
+
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (2)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (26)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (36)</a></li>
 
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (243)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (264)</a></li>
 
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (162)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (177)</a></li>
 
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (11)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (19)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (46)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (53)</a></li>
 
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (70)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (86)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/raid">raid (1)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/raid">raid (1)</a></li>
 
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/reactos">reactos (1)</a></li>
+
  <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/rfid">rfid (2)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/rfid">rfid (3)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (9)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (9)</a></li>
 
@@ -7745,29 +9569,31 @@ be the only one fitting our needs. :/</p>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (37)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (41)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (4)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (4)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (44)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (48)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (3)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (9)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (3)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (9)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (23)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (33)</a></li>
+
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (2)</a></li>
 
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (1)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/usenix">usenix (2)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/valg">valg (8)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/valg">valg (8)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (40)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (54)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
 
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/web">web (29)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/web">web (37)</a></li>
 
 </ul>
 
 
 </ul>