<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5623243303574170999</id><updated>2012-02-16T03:49:43.891-08:00</updated><category term='Adobe'/><category term='SmartCard'/><category term='OpenSolaris'/><category term='Flash'/><category term='amd64'/><category term='MPlayer'/><category term='Ruby'/><category term='Linux'/><category term='H.264'/><category term='RAID'/><category term='BuyPass'/><category term='apt'/><category term='puppet glassfish asadmin'/><category term='Ubuntu'/><category term='Emacs'/><category term='Android'/><category term='BackupPC'/><category term='Metaprogramming'/><category term='NVIDIA'/><category term='ZFS'/><category term='Gentoo'/><title type='text'>larstobi's random stuff</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://larstobi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://larstobi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>larstobi</name><uri>http://www.blogger.com/profile/10980583104626784839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5623243303574170999.post-1252021146031532511</id><published>2011-01-03T07:25:00.000-08:00</published><updated>2011-01-03T09:10:42.262-08:00</updated><title type='text'>Restrict ssh access to one command, but allow parameters</title><content type='html'>Sometimes one needs to allow a script to login to a server using a SSH key to do a job. That can be achieved by adding the scripts SSH public key to the remote user's authorized_keys file. The private keys are often stored without password to allow the script to use the key and not stopping execution by an interactive prompt for the private key password.&lt;br /&gt;&lt;br /&gt;This puts the remote server at risk because if the originating server is compromised an attacker would easily gain access to the remote server as well. To reduce the damage of a compromised private key, one often restricts the access of the key to the minimum required to get the script's job done. This can be accomplished by using SSH-key options in the authorized_keys file.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;from="fromserver.example.com",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/home/user/bin/script.sh" ssh-rsa  AAAAB3NzA..Dxq= user@fromserver.example.com&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This is quite effective, and restricts the attacker to executing the specified forced command, and only from a specified host, with no terminal or X11 access.&lt;br /&gt;&lt;br /&gt;Other times one needs to do a sync job using rsync. Let's see how that works out with the above scheme.&lt;br /&gt;&lt;br /&gt;Example command:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/usr/bin/rsync /some/dir/ user@remote.example.com:/some/other/dir/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Example entry in authorized_keys:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;from="fromserver.example.com",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/usr/bin/rsync" ssh-rsa  AAAAB3NzA..Dxq= user@fromserver.example.com&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Trying that, you'll soon noticed that all your command line arguments are ignored, and you'll get the help text from rsync as output. The forced command option does not allow arbitrary command line arguments to the command.&lt;br /&gt;&lt;br /&gt;There is a workaround by using the &lt;code&gt;$SSH_ORIGINAL_COMMAND&lt;/code&gt; environment variable that the ssh program creates. The problem with that is that you'll need a wrapper script to deal with the arguments because it will have the executable twice in the argument list:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;from="fromserver.example.com",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/usr/bin/rsync $SSH_ORIGINAL_COMMAND" ssh-rsa  AAAAB3NzA..Dxq= user@fromserver.example.com&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This will produce this command:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/usr/bin/rsync /usr/bin/rsync /some/dir/ user@remote.example.com:/some/other/dir/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A solution to this is the wrapper script that interprets the environment variable and executes the correct command:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;case $SSH_ORIGINAL_COMMAND in&lt;br /&gt;    "/usr/bin/rsync "*)&lt;br /&gt;        $SSH_ORIGINAL_COMMAND&lt;br /&gt;        ;;&lt;br /&gt;    *)&lt;br /&gt;        echo "Permission denied."&lt;br /&gt;        exit 1&lt;br /&gt;        ;;&lt;br /&gt;esac&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This adds complexity and requires a script to be installed on the remote server. It is also less secure. Wouldn't it be nice to skip that wrapper script entirely?&lt;br /&gt;&lt;br /&gt;Solution:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;from="fromserver.example.com",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/usr/bin/rsync ${SSH_ORIGINAL_COMMAND#* }"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Notice the &lt;code&gt;'#* '&lt;/code&gt; right after &lt;code&gt;SSH_ORIGINAL_COMMAND&lt;/code&gt;. The &lt;code&gt;#&lt;/code&gt; modifier in bash is used to remove the smallest prefix pattern, and so &lt;code&gt;'#* '&lt;/code&gt; will remove everything up until and including the first space.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5623243303574170999-1252021146031532511?l=larstobi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://larstobi.blogspot.com/feeds/1252021146031532511/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5623243303574170999&amp;postID=1252021146031532511' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/1252021146031532511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/1252021146031532511'/><link rel='alternate' type='text/html' href='http://larstobi.blogspot.com/2011/01/restrict-ssh-access-to-one-command-but.html' title='Restrict ssh access to one command, but allow parameters'/><author><name>larstobi</name><uri>http://www.blogger.com/profile/10980583104626784839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5623243303574170999.post-687516291453991875</id><published>2010-09-13T01:24:00.000-07:00</published><updated>2010-09-13T02:10:16.549-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='puppet glassfish asadmin'/><title type='text'>Managing GlassFish domains with Puppet</title><content type='html'>Following &lt;a href="http://www.james-turnbull.net/"&gt;James Turnbull&lt;/a&gt;'s &lt;a href="http://www.kartar.net/2010/02/puppet-types-and-providers-are-easy/"&gt;plugin HOWTO&lt;/a&gt;, I've created a new &lt;a href="http://www.puppetlabs.com/puppet/"&gt;Puppet&lt;/a&gt; resource type for managing &lt;a href="https://glassfish.dev.java.net/"&gt;GlassFish&lt;/a&gt; domains. You can get it via the &lt;a href="http://forge.puppetlabs.com/larstobi/glassfish"&gt;Puppet Forge&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This plugin is meant to replace the previously used (with success) exec type for managing GlassFish domains:&lt;br /&gt;&lt;pre&gt;$passfile = "/home/gfish/.aspass"&lt;br /&gt;$portbase = "4900"&lt;br /&gt;$asadmin = "/opt/NSBglassfish/bin/asadmin"&lt;br /&gt;$domaindir = "/opt/NSBglassfish/glassfish/domains"&lt;br /&gt;&lt;br /&gt;exec {&lt;br /&gt;    "create-domain-$name":&lt;br /&gt;        command =&gt; "$asadmin --user admin --passwordfile $passfile create-domain --profile cluster --portbase $portbase --savelogin $name",&lt;br /&gt;        user =&gt; "admin",&lt;br /&gt;        creates =&gt; "$domaindir/$name";&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;his new resource type allows for more functionality and expressive clarity than the exec type. For example, it allows you to easily delete the domain by using the &lt;code&gt;ensure =&gt; absent&lt;/code&gt; property. This is how  one specifies a new GlassFish domain with this:&lt;br /&gt;&lt;pre&gt;glassfish {&lt;br /&gt;    "mydomain":&lt;br /&gt;        portbase =&gt; "4800",&lt;br /&gt;        adminuser =&gt; "admin",&lt;br /&gt;        passwordfile =&gt; "/home/gfish/.aspass",&lt;br /&gt;        profile =&gt; "cluster",&lt;br /&gt;        ensure =&gt; present;&lt;br /&gt;&lt;br /&gt;    "myolddomain":&lt;br /&gt;        ensure =&gt; absent;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;I plan to add more features to it, such as adding system-properties and jvm-options.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5623243303574170999-687516291453991875?l=larstobi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://larstobi.blogspot.com/feeds/687516291453991875/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5623243303574170999&amp;postID=687516291453991875' title='1 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/687516291453991875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/687516291453991875'/><link rel='alternate' type='text/html' href='http://larstobi.blogspot.com/2010/09/managing-glassfish-domains-with-puppet.html' title='Managing GlassFish domains with Puppet'/><author><name>larstobi</name><uri>http://www.blogger.com/profile/10980583104626784839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5623243303574170999.post-1643937082871185007</id><published>2010-05-24T07:08:00.000-07:00</published><updated>2010-05-24T08:12:37.289-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Metaprogramming'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Parsing the /etc/passwd file with Ruby</title><content type='html'>I decided to write a program to parse the &lt;a href="http://en.wikipedia.org/wiki/Passwd_(file)"&gt;/etc/passwd&lt;/a&gt; file in my favourite scripting language. The file has seven fields: user, password, UID, GID, GECOS, home and shell.&lt;br /&gt;&lt;br /&gt;Writing this snippet of code, I used some metaprogramming features in Ruby that I learned from &lt;a href="http://www.amazon.com/Metaprogramming-Ruby-Facets-Paolo-Perrotta/dp/1934356476/?tag=larstobi-20"&gt;Metaprogramming Ruby&lt;/a&gt; by Paolo Perrotta, like "OpenStruct", Dynamic Methods and method_missing(). I created a structure to hold the field information for each line in the file like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class PasswdFile&lt;br /&gt;  class PasswdEntry&lt;br /&gt;    def initialize&lt;br /&gt;      @attributes = {}&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def method_missing(name, *args)&lt;br /&gt;      attribute = name.to_s&lt;br /&gt;      if attribute =~ /=$/&lt;br /&gt;        @attributes[attribute.chop] = args[0]&lt;br /&gt;      else&lt;br /&gt;        @attributes[attribute]&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def import(line)&lt;br /&gt;      field_names = [:user, :password, :uid, :gid, :gecos, :home, :shell]&lt;br /&gt;      fields = line.split(":")&lt;br /&gt;      puts "Error: Not a passwd line, not 7 fields" unless fields.length == 7&lt;br /&gt;      field_names.each do |field_name|&lt;br /&gt;        self.send("#{field_name}=", fields[field_names.index(field_name)])&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  attr_reader :filename&lt;br /&gt;  def initialize(filename="/etc/passwd")&lt;br /&gt;    @entries = []&lt;br /&gt;    import(filename)&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def import(filename)&lt;br /&gt;    File.open(filename, "r").each do |line|&lt;br /&gt;      entry = PasswdEntry.new&lt;br /&gt;      entry.import line&lt;br /&gt;      @entries &lt;&lt; entry&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def each&lt;br /&gt;    @entries.each do |entry|&lt;br /&gt;      yield entry&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def print&lt;br /&gt;    field_names = [:user, :password, :uid, :gid, :gecos, :home, :shell]&lt;br /&gt;    &lt;br /&gt;    @entries.each do |entry|&lt;br /&gt;      puts "ENTRY:"&lt;br /&gt;      field_names.each do |field_name|&lt;br /&gt;        puts "    #{field_name}: " + entry.send("#{field_name}")&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To show an example of useage, we can print each field, like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;entries = PasswdFile.new&lt;br /&gt;entries.print&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5623243303574170999-1643937082871185007?l=larstobi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://larstobi.blogspot.com/feeds/1643937082871185007/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5623243303574170999&amp;postID=1643937082871185007' title='1 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/1643937082871185007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/1643937082871185007'/><link rel='alternate' type='text/html' href='http://larstobi.blogspot.com/2010/05/parsing-etcpasswd-file-with-ruby.html' title='Parsing the /etc/passwd file with Ruby'/><author><name>larstobi</name><uri>http://www.blogger.com/profile/10980583104626784839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5623243303574170999.post-1663221226744786698</id><published>2009-08-18T01:44:00.000-07:00</published><updated>2009-09-09T00:16:47.426-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Rooting the HTC Hero</title><content type='html'>On friday I got my new &lt;a href="http://www.htc.com/www/product/hero/overview.html"&gt;HTC Hero&lt;/a&gt; in the mail. Yesterday, I rooted it following instructions on &lt;a href="http://phandroid.com/2009/08/04/how-to-gain-root-access-on-your-htc-hero/"&gt;phandroid.com&lt;/a&gt;. Instead of from Windows, like in the article on &lt;a href="http://phandroid.com/2009/08/04/how-to-gain-root-access-on-your-htc-hero/"&gt;phandroid.com&lt;/a&gt;, I did it from Linux, and here is how.&lt;br /&gt;&lt;br /&gt;1. Download &lt;a href="http://developer.android.com/sdk/download.html?v=android-sdk-linux_x86-1.5_r3.zip"&gt;android-sdk-linux_x86-1.5_r3.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. Download &lt;a href="http://folk.ntnu.no/larstobi/files/orange-htc-hero-uk-boot.img-28-july-2009.zip"&gt;orange-htc-hero-uk-boot.img-28-july-2009.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. Download &lt;a href="http://www.htc.com/www/support/android/adp.html#s2"&gt;fastboot&lt;/a&gt; for Linux.&lt;br /&gt;&lt;br /&gt;4. Run these commands:&lt;pre&gt;# unzip android-sdk-linux_x86-1.5_r3.zip&lt;br /&gt;# unzip orange-htc-hero-uk-boot.img-28-july-2009.zip&lt;br /&gt;# mv orange-htc-hero-uk-boot.img-28-july-2009/boot.img.insecure android-sdk-linux_x86-1.5_r3/tools&lt;br /&gt;# unzip fastboot.zip&lt;br /&gt;# mv fastboot android-sdk-linux_x86-1.5_r3/tools&lt;br /&gt;# cd android-sdk-linux_x86-1.5_r3/tools&lt;/pre&gt;5. Shutdown the phone and plug in the USB cable.&lt;br /&gt;&lt;br /&gt;6. Press and hold the back key and power on the phone.&lt;br /&gt;This will get you into the fastboot USB screen (the white screen with three androids at the bottom).&lt;br /&gt;&lt;br /&gt;7. Run this command:&lt;pre&gt;# sudo ./fastboot boot boot.img.insecure&lt;br /&gt;downloading 'boot.img'... OKAY&lt;br /&gt;booting... OKAY&lt;/pre&gt;Now your device will start from the given image with root access.&lt;br /&gt;&lt;br /&gt;8. In the phone's alerts menu, click HTC Sync.&lt;br /&gt;&lt;br /&gt;9. Run this command:&lt;pre&gt;sudo ./adb shell&lt;/pre&gt;This will give you a root shell on the device.&lt;br /&gt;&lt;br /&gt;10. From this shell, run these commands:&lt;pre&gt;# mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system&lt;br /&gt;# cp -a /system/bin/su /system/bin/su.backup&lt;br /&gt;# cat /system/bin/sh &gt; /system/bin/su&lt;br /&gt;# chmod 4755 /system/bin/su&lt;br /&gt;# reboot&lt;/pre&gt;Now your device is rooted!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5623243303574170999-1663221226744786698?l=larstobi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://larstobi.blogspot.com/feeds/1663221226744786698/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5623243303574170999&amp;postID=1663221226744786698' title='2 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/1663221226744786698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/1663221226744786698'/><link rel='alternate' type='text/html' href='http://larstobi.blogspot.com/2009/08/rooting-htc-hero.html' title='Rooting the HTC Hero'/><author><name>larstobi</name><uri>http://www.blogger.com/profile/10980583104626784839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5623243303574170999.post-6047154627254859977</id><published>2009-08-11T04:37:00.002-07:00</published><updated>2009-12-07T05:31:25.471-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ZFS'/><category scheme='http://www.blogger.com/atom/ns#' term='RAID'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSolaris'/><title type='text'>ZFS root disk mirror</title><content type='html'>So, I just installed OpenSolaris on a &lt;a href="http://www.sun.com/servers/blades/x6240/"&gt;Sun Blade X6240 Server Module&lt;/a&gt;. I have two disks on this machine, and wanted to use disk mirroring. I didn't want to use the integrated &lt;a href="http://www.lsi.com/storage_home/products_home/standard_product_ics/sas_ics/lsisas1068e/"&gt;LSI 1068E&lt;/a&gt; hardware RAID controller, I wanted to use the much cooler &lt;a href="http://blogs.sun.com/bonwick/entry/smokin_mirrors"&gt;ZFS mirror&lt;/a&gt; feature.&lt;br /&gt;&lt;br /&gt;During installation, it was not possible to set up mirroring, it had to wait until after the first boot. The installation wizard created the necessary partitions, ZFS filesystem and installed GRUB on the system, and I don't know what commands it has run to set up the disk the way it is now. So, to attach the mirror disk to the ZFS pool, I copied the partition table to the mirror:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# prtvtoc /dev/rdsk/c8t0d0s2  | fmthard -s - /dev/rdsk/c8t1d0s2&lt;/pre&gt;&lt;br /&gt;Now that's done, and I proceeded to attach the mirror disk into the ZFS pool:&lt;br /&gt;&lt;pre&gt;# zpool status rpool&lt;br /&gt;  pool: rpool&lt;br /&gt; state: ONLINE&lt;br /&gt; scrub: none requested&lt;br /&gt;config:&lt;br /&gt;&lt;br /&gt;        NAME        STATE     READ WRITE CKSUM&lt;br /&gt;        rpool       ONLINE       0     0     0&lt;br /&gt;          c8t0d0s0  ONLINE       0     0     0&lt;br /&gt;&lt;br /&gt;errors: No known data errors&lt;br /&gt;# zpool attach -f rpool c8t0d0s0 c8t1d0s0&lt;br /&gt;Please be sure to invoke installgrub(1M) to make 'c8t1d0s0' bootable.&lt;br /&gt;# zpool status rpool&lt;br /&gt;  pool: rpool&lt;br /&gt; state: ONLINE&lt;br /&gt;status: One or more devices is currently being resilvered.  The pool will&lt;br /&gt;        continue to function, possibly in a degraded state.&lt;br /&gt;action: Wait for the resilver to complete.&lt;br /&gt; scrub: resilver in progress for 0h0m, 15.41% done, 0h1m to go&lt;br /&gt;config:&lt;br /&gt;&lt;br /&gt;        NAME          STATE     READ WRITE CKSUM&lt;br /&gt;        rpool         ONLINE       0     0     0&lt;br /&gt;          mirror      ONLINE       0     0     0&lt;br /&gt;            c8t0d0s0  ONLINE       0     0     0&lt;br /&gt;            c8t1d0s0  ONLINE       0     0     0  1.07G resilvered&lt;br /&gt;&lt;br /&gt;errors: No known data errors&lt;/pre&gt;&lt;br /&gt;Installing GRUB and updating the master boot sector was also necessary to be able to boot off the mirror:&lt;br /&gt;&lt;pre&gt;# installgrub -m /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c8t1d0s0&lt;br /&gt;Updating master boot sector destroys existing boot managers (if any).&lt;br /&gt;continue (y/n)?y&lt;br /&gt;stage1 written to partition 0 sector 0 (abs 16065)&lt;br /&gt;stage2 written to partition 0, 271 sectors starting at 50 (abs 16115)&lt;br /&gt;stage1 written to master boot sector&lt;/pre&gt;&lt;br /&gt;And that's that!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5623243303574170999-6047154627254859977?l=larstobi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://larstobi.blogspot.com/feeds/6047154627254859977/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5623243303574170999&amp;postID=6047154627254859977' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/6047154627254859977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/6047154627254859977'/><link rel='alternate' type='text/html' href='http://larstobi.blogspot.com/2009/08/zfs-root-disk-mirror.html' title='ZFS root disk mirror'/><author><name>larstobi</name><uri>http://www.blogger.com/profile/10980583104626784839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5623243303574170999.post-2902755713857635514</id><published>2009-07-21T03:35:00.000-07:00</published><updated>2009-08-11T05:27:11.526-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apt'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>BADSIG 40976EAF437D05B5</title><content type='html'>When running apt-get update today, I got this error message:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;The following signatures were invalid: BADSIG 40976EAF437D05B5 Ubuntu Archive Automatic Signing Key&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Strange. And it was no good retrying, the same error occurred over and over again. apt-get stopped complaining after running update with this option:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;apt-get update -o Acquire::http::No-Cache=True&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;apt-get update -o Acquire::BrokenProxy=true&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I suspect my company's &lt;a href="http://www.barracudanetworks.com/ns/products/spam_overview.php"&gt;Barracuda Spam &amp; Virus Firewall&lt;/a&gt; is to blame, as it has been blamed for arbitrarily corrupting downloads before by my co-workers. How can I know for certain?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5623243303574170999-2902755713857635514?l=larstobi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://larstobi.blogspot.com/feeds/2902755713857635514/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5623243303574170999&amp;postID=2902755713857635514' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/2902755713857635514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/2902755713857635514'/><link rel='alternate' type='text/html' href='http://larstobi.blogspot.com/2009/07/badsig-40976eaf437d05b5.html' title='BADSIG 40976EAF437D05B5'/><author><name>larstobi</name><uri>http://www.blogger.com/profile/10980583104626784839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5623243303574170999.post-7248868917829214789</id><published>2009-02-17T10:22:00.000-08:00</published><updated>2009-08-11T05:26:33.314-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NVIDIA'/><category scheme='http://www.blogger.com/atom/ns#' term='MPlayer'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='H.264'/><title type='text'>H.264 at 1080p with NVIDIA's VDPAU on Linux</title><content type='html'>&lt;a href="http://www.nvidia.com/"&gt;NVIDIA&lt;/a&gt; released support for their &lt;a href="ftp://download.nvidia.com/XFree86/vdpau/doxygen/html/index.html"&gt;Video Decode and Presentation API for Unix&lt;/a&gt; with version 180.06 of their video and OpenGL driver for Xorg. They have also released patches to &lt;a href="http://www.mplayerhq.hu/"&gt;MPlayer&lt;/a&gt; so we can actually use it. I have tried getting it to work on my &lt;a href="http://www.gentoo.org/proj/en/base/amd64/"&gt;Gentoo GNU/Linux x86_64&lt;/a&gt;, but with the earliest drivers I got a green video window followed by a Xorg freeze with my graphics card. I had to SSH into the computer and kill MPlayer and Xorg. One of the versions even froze the kernel up completely. Version 180.27 actually didn't freeze my computer, put instead of the decoded video I got a random mosaic of colors.&lt;br /&gt;&lt;br /&gt;With version 180.29 it did function properly with my &lt;a href="http://www.xfxforce.com/en-gb/products/graphiccards/200series/280GTX.aspx"&gt;XFX GeForce 280 GTX XXX&lt;/a&gt; graphics card. It's working great, and I can play H.264 1080p video with MPlayer using only 3% of a single &lt;a href="http://www.amdcompare.com/us-en/desktop/details.aspx?opn=ADAFX74GAA6DI"&gt;CPU&lt;/a&gt; core!&lt;br /&gt;&lt;br /&gt;To get VDPAU working you need, as I mentioned, a recent driver and at least version 180.06. Also you need a patched MPlayer, witch you can obtain the sources for &lt;a href="ftp://download.nvidia.com/XFree86/vdpau/"&gt;here&lt;/a&gt;. Get the header files under "include" as well, and unpack the tarball and run the script checkout-patch-build.sh to retrieve MPlayer sources, patches and compile it all. As it is now (version 3482714), the VDPAU patches need additional patching to be able to play H.264 video above &lt;a href="http://en.wikipedia.org/wiki/H.264#Levels"&gt;level 4.1&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;--- libvo/vo_vdpau.c.orig 2009-02-17 15:03:25.936006847 +0100&lt;br /&gt;+++ libvo/vo_vdpau.c 2009-02-17 18:43:43.995005259 +0100&lt;br /&gt;@@ -90,7 +90,7 @@&lt;br /&gt; /* Numbers of video and ouput Surfaces */&lt;br /&gt; #define NUM_OUTPUT_SURFACES                3&lt;br /&gt; #define NUM_VIDEO_SURFACES_MPEG2           3  // (1 frame being decoded, 2 reference)&lt;br /&gt;-#define NUM_VIDEO_SURFACES_H264            17 // (1 frame being decoded, up to 16 references) &lt;br /&gt;+#define NUM_VIDEO_SURFACES_H264            18 // (1 frame being decoded, 16 reference frames, plus b_frames and b_pyramid)&lt;br /&gt; #define NUM_VIDEO_SURFACES_VC1             3  // (same as MPEG-2)&lt;br /&gt; #define NUM_VIDEO_SURFACES_NON_ACCEL_YUV   1  //  surfaces for YV12 etc. &lt;br /&gt; #define NUM_VIDEO_SURFACES_NON_ACCEL_RGB   0 // surfaces for RGB or YUV4:4:4&lt;br /&gt;@@ -701,10 +701,7 @@&lt;br /&gt;             uint32_t round_width = (vid_width + 15) &amp; ~15;&lt;br /&gt;             uint32_t round_height = (vid_height + 15) &amp; ~15;&lt;br /&gt;             uint32_t surf_size = (round_width * round_height * 3) / 2;&lt;br /&gt;-            max_references = (12 * 1024 * 1024) / surf_size;&lt;br /&gt;-            if (max_references &gt; 16) {&lt;br /&gt;-                max_references = 16;&lt;br /&gt;-            }&lt;br /&gt;+     max_references = 16; // Support for H.264 Level 5.1&lt;br /&gt;         }&lt;br /&gt;         break;&lt;br /&gt;     default:&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5623243303574170999-7248868917829214789?l=larstobi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://larstobi.blogspot.com/feeds/7248868917829214789/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5623243303574170999&amp;postID=7248868917829214789' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/7248868917829214789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/7248868917829214789'/><link rel='alternate' type='text/html' href='http://larstobi.blogspot.com/2009/02/h264-at-1080p-with-nvidias-vdpau-on.html' title='H.264 at 1080p with NVIDIA&apos;s VDPAU on Linux'/><author><name>larstobi</name><uri>http://www.blogger.com/profile/10980583104626784839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5623243303574170999.post-8177279313822090831</id><published>2009-02-16T10:36:00.000-08:00</published><updated>2009-02-16T11:49:57.336-08:00</updated><title type='text'>CueCat USB barcode scanner hacked!</title><content type='html'>Last week I ordered a &lt;a href="http://cuecat.com/"&gt;CueCat&lt;/a&gt; USB barcode scanner from &lt;a href="http://www.librarything.com/cuecat"&gt;LibraryThing&lt;/a&gt;. Today I gave it a first try, on my new book &lt;a href="http://www.pragprog.com/titles/tsgit/pragmatic-version-control-using-git"&gt;Pragmatic Version Control Using Git&lt;/a&gt;. Eager to try my new toy that I had envisioned to ease the process of adding my books to a database I plugged it in, observed that it was recognised as a &lt;a href="http://en.wikipedia.org/wiki/Human_interface_device"&gt;HID&lt;/a&gt;, tried to scan the barcode, and out came this gibberish: &lt;code&gt;.C3nZC3nZC3n2C3P3DxP6DxnY.fHmc.E3zXDhv1C3nYDNzY.&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Quite disappointed, I realized that this thing might not be easily used with Linux after all. I searched on Google for CueCat, and soon realized that the stupid scanner outputs a serial number unique to this scanner, followed by the type of barcode and finally the barcode number, and all this is encrypted with CueCat's sophisticated "XOR with C"-cipher:&lt;br /&gt;&lt;pre&gt;#!/usr/bin/perl -n &lt;br /&gt;# Copyright: Larry Wall&lt;br /&gt;printf "Serial: %s  Type: %s  Code: %s\n", &lt;br /&gt;    map { &lt;br /&gt;        tr/a-zA-Z0-9+-/ -_/; &lt;br /&gt;        $_ = unpack 'u', chr(32 + length()*3/4) . $_; &lt;br /&gt;        s/\0+$//; &lt;br /&gt;        $_ ^= "C" x length; &lt;br /&gt;    } /\.([^.]+)/g;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So I foresaw that this dongle was going to be a pain to use. But after some more reading, I came across &lt;a href="http://cexx.org/cuecat.htm"&gt;this&lt;/a&gt; page that shows me how to hack the CueCat and disable the encryption alltogether. So disassembled the device and cut pin number 5, like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u-EakTHl9kc/SZnCUhQngwI/AAAAAAAAAAk/eSxX_iqw5hA/s1600-h/cuecat_cut_here.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 381px; height: 291px;" src="http://1.bp.blogspot.com/_u-EakTHl9kc/SZnCUhQngwI/AAAAAAAAAAk/eSxX_iqw5hA/s400/cuecat_cut_here.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5303483693986710274" /&gt;&lt;/a&gt;&lt;br /&gt;After reassembling the scanner, I tried it on my book again. And lo and behold, there was the real ISBN number I had been looking for: &lt;code&gt;9781934356159&lt;/code&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5623243303574170999-8177279313822090831?l=larstobi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://larstobi.blogspot.com/feeds/8177279313822090831/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5623243303574170999&amp;postID=8177279313822090831' title='2 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/8177279313822090831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/8177279313822090831'/><link rel='alternate' type='text/html' href='http://larstobi.blogspot.com/2009/02/cuecat-usb-barcode-scanner-hacked.html' title='CueCat USB barcode scanner hacked!'/><author><name>larstobi</name><uri>http://www.blogger.com/profile/10980583104626784839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_u-EakTHl9kc/SZnCUhQngwI/AAAAAAAAAAk/eSxX_iqw5hA/s72-c/cuecat_cut_here.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5623243303574170999.post-2164966639082759247</id><published>2009-02-14T06:30:00.001-08:00</published><updated>2009-02-14T06:38:50.890-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BuyPass'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='amd64'/><category scheme='http://www.blogger.com/atom/ns#' term='SmartCard'/><title type='text'>BuyPass switces to Java to interface with SmartCard</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;      &lt;p&gt;&lt;a href="http://www.buypass.no/"&gt;BuyPass&lt;/a&gt; is switching to using a Java implementation to interface with their BuyPass SmartCards. This is good news for everyone using a &lt;a href="http://www.gentoo.org/proj/en/base/amd64/"&gt;64-bit Linux operating system&lt;/a&gt;. Their current access library called &lt;a href="http://www.buypass.no/Privat/Kundeservice/Nedlasting/Linux"&gt;jnipcsc&lt;/a&gt; is only available for 32-bit architectures, and even then it's a pain to get working. They estimate that the new version of the BuyPass Java applet is ready for release in march 2009. &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5623243303574170999-2164966639082759247?l=larstobi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://larstobi.blogspot.com/feeds/2164966639082759247/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5623243303574170999&amp;postID=2164966639082759247' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/2164966639082759247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/2164966639082759247'/><link rel='alternate' type='text/html' href='http://larstobi.blogspot.com/2009/02/buypass-switces-to-java-to-interface.html' title='BuyPass switces to Java to interface with SmartCard'/><author><name>larstobi</name><uri>http://www.blogger.com/profile/10980583104626784839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5623243303574170999.post-6362180510563845363</id><published>2008-11-22T13:43:00.000-08:00</published><updated>2008-11-22T13:48:17.170-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Emacs'/><title type='text'>Emacs-w3m, a simple Emacs interface to w3m</title><content type='html'>The Emacs-w3m interface to the text based WWW browser is quite handy for reading those nasty HTML-only emails in &lt;a href="http://gnus.org/"&gt;Gnus&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The latest 1.4.4 release of Emacs-w3m is very old (2005), and doesn't work with Emacs 23. For Gentoo users of the development branch of Emacs 23 and Gnus, the only compatible version is in the CVS. There is currently no ebuild to install it. So, here is an ebuild to install it properly using Portage, if you want it.&lt;br /&gt;&lt;br /&gt;emacs-w3m-9999.ebuild&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# Copyright 1999-2008 Gentoo Foundation&lt;br /&gt;# Distributed under the terms of the GNU General Public License v2&lt;br /&gt;# $Header$&lt;br /&gt;&lt;br /&gt;inherit elisp cvs autotools&lt;br /&gt;&lt;br /&gt;DESCRIPTION="Emacs-w3m is an interface program of w3m on Emacs"&lt;br /&gt;HOMEPAGE="http://emacs-w3m.namazu.org"&lt;br /&gt;ECVS_SERVER="cvs.namazu.org:/storage/cvsroot"&lt;br /&gt;ECVS_MODULE="emacs-w3m"&lt;br /&gt;ECVS_BRANCH="HEAD"&lt;br /&gt;S="${WORKDIR}/${ECVS_MODULE}"&lt;br /&gt;&lt;br /&gt;LICENSE="GPL-2"&lt;br /&gt;SLOT="0"&lt;br /&gt;KEYWORDS="alpha amd64 ppc sparc x86"&lt;br /&gt;IUSE=""&lt;br /&gt;&lt;br /&gt;DEPEND="virtual/w3m"&lt;br /&gt;RDEPEND="${DEPEND}"&lt;br /&gt;&lt;br /&gt;SITEFILE=71${PN}-gentoo.el&lt;br /&gt;&lt;br /&gt;src_unpack() {&lt;br /&gt;    cvs_src_unpack&lt;br /&gt;    cd "${S}"&lt;br /&gt;    eautoreconf&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# This is NOT redundant: elisp.eclass redefines src_compile() from default&lt;br /&gt;src_compile() {&lt;br /&gt;    econf || die "econf failed"&lt;br /&gt;    emake || die "emake failed"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;src_install() {&lt;br /&gt;    emake lispdir="${D}"/${SITELISP}/${PN} \&lt;br /&gt;        infodir="${D}"/usr/share/info \&lt;br /&gt;        ICONDIR="${D}"/usr/share/pixmaps/${PN} \&lt;br /&gt;        install install-icons || die "emake install failed"&lt;br /&gt;&lt;br /&gt;    elisp-site-file-install "${FILESDIR}/${SITEFILE}"&lt;br /&gt;    dodoc ChangeLog* README*&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;pkg_postinst() {&lt;br /&gt;    elisp-site-regen&lt;br /&gt;    einfo "Please see /usr/share/doc/${PF}/README*"&lt;br /&gt;    einfo&lt;br /&gt;    elog "If you want to use the shimbun library, please emerge app-emacs/apel"&lt;br /&gt;    elog "and app-emacs/flim."&lt;br /&gt;    einfo&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;pkg_postrm() {&lt;br /&gt;    elisp-site-regen&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5623243303574170999-6362180510563845363?l=larstobi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://larstobi.blogspot.com/feeds/6362180510563845363/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5623243303574170999&amp;postID=6362180510563845363' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/6362180510563845363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/6362180510563845363'/><link rel='alternate' type='text/html' href='http://larstobi.blogspot.com/2008/11/emacs-w3m-simple-emacs-interface-to-w3m_22.html' title='Emacs-w3m, a simple Emacs interface to w3m'/><author><name>larstobi</name><uri>http://www.blogger.com/profile/10980583104626784839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5623243303574170999.post-3194681667949775482</id><published>2008-11-18T05:45:00.001-08:00</published><updated>2009-02-14T06:32:47.710-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Finally 64-bit Flash for Linux</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;      &lt;p&gt;Adobe has finally released a alpha of its first 64-bit Flash Player. This is in no way too soon. Users running 64-bit operating systems have been requesting this for several years to apparently deaf ears. Until now. Now, all that's left is for them to open source it, but I guess that's asking a bit much. I for one will surely be enjoying my Flash content from my 64-bit browser instead of having to start the 32-bit browser to be able to watch YouTube-clips.&lt;/p&gt;&lt;p&gt;On the other hand, the &lt;a href="http://www.gnashdev.org/"&gt;Gnash&lt;/a&gt; project has had a 64-bit Flash Player for quite some time now, and it's even capable of playing videos at YouTube. I suppose that in a couple of years when it's more stable, I'll be switching to using that one instead. &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5623243303574170999-3194681667949775482?l=larstobi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://larstobi.blogspot.com/feeds/3194681667949775482/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5623243303574170999&amp;postID=3194681667949775482' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/3194681667949775482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/3194681667949775482'/><link rel='alternate' type='text/html' href='http://larstobi.blogspot.com/2008/11/finally-64-bits-flash-for-linux.html' title='Finally 64-bit Flash for Linux'/><author><name>larstobi</name><uri>http://www.blogger.com/profile/10980583104626784839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5623243303574170999.post-7624291071146943512</id><published>2008-10-28T08:05:00.001-07:00</published><updated>2008-10-28T08:14:46.316-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BackupPC'/><title type='text'>BackupPC's mysterious paths</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;      &lt;p&gt;I've used &lt;a href="http://backuppc.sourceforge.net/"&gt;BackupPC&lt;/a&gt; for a few years now, and I've found that it's a very good backup tool. The first installation I did was for &lt;a href="http://www.snota.no/"&gt;Snota&lt;/a&gt; and it is still running just fine on it's Ubuntu machine. Installing it on Ubuntu was a breeze. It's clear that it's package maintainer &lt;a href="http://packages.ubuntu.com/hardy/backuppc"&gt;Ludovic Drolez&lt;/a&gt; is doing a good job packaging it.&lt;/p&gt;&lt;p&gt;Yesterday I installed BackupPC on my home network. The lucky machine is running Gentoo. Gentoo's Portage repository is currently only stocking the rather old-ish 2.1.2 version from 2005. A lot has happened since (including support for multi level incrementals), and I decided to update the ebuild script to install the latest version (3.1.0). This was not as straight forward as I had hoped.&lt;/p&gt;&lt;p&gt;The included configure.pl script from BackupPC does not only configure paths, but it goes ahead and installs the files all the same. Not exactly what I'd expect from a script called &lt;i&gt;configure&lt;/i&gt;. It should be splitted into a configure and an install script.&lt;/p&gt;&lt;p&gt;BackupPC has a facination with using "BackupPC" with capital letters in it's install paths, and I prefer not using them in install paths, as does the Debian and Ubuntu team. It's more standard that way. It is rather difficult to convince BackupPC that I prefer to use lower case letters, since it did not find the config.pl-file when I put it in /etc/backuppc instead of /etc/BackupPC. I actually had to &lt;a href="http://folk.ntnu.no/larstobi/BackupPC-3.1.0-Lib.pm.patch"&gt;patch&lt;/a&gt; Lib.pm so it would find it. It took me a while to find out why BackupPC didn't want to start, the error messages weren't exactly trying to tell me that it couldn't find config.pl.&lt;/p&gt;&lt;p&gt;Now it's running fine, and happily taking backups of my files. This is a great backup program once it is installed properly! &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5623243303574170999-7624291071146943512?l=larstobi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://larstobi.blogspot.com/feeds/7624291071146943512/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5623243303574170999&amp;postID=7624291071146943512' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/7624291071146943512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/7624291071146943512'/><link rel='alternate' type='text/html' href='http://larstobi.blogspot.com/2008/10/backuppc-mysterious-paths.html' title='BackupPC&amp;#39;s mysterious paths'/><author><name>larstobi</name><uri>http://www.blogger.com/profile/10980583104626784839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5623243303574170999.post-861032048618228181</id><published>2008-10-11T09:33:00.001-07:00</published><updated>2008-10-11T10:14:24.493-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Emacs'/><title type='text'>Trying out e-blog.el</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;      &lt;p&gt;This is my first weblog, and I'm happy to say I'm doing it directly from my Emacs using &lt;a href="http://code.google.com/p/e-blog/"&gt;e-blog.el&lt;/a&gt; that uses the Gdata API for Blogger.&lt;/p&gt;&lt;p&gt;It is really easy to set up, I only had to load e-blog:  (load "e-blog.el") and then do M-x e-blog-new-post, write the post, and hit C-c C-c. &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5623243303574170999-861032048618228181?l=larstobi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://larstobi.blogspot.com/feeds/861032048618228181/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5623243303574170999&amp;postID=861032048618228181' title='1 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/861032048618228181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5623243303574170999/posts/default/861032048618228181'/><link rel='alternate' type='text/html' href='http://larstobi.blogspot.com/2008/10/trying-out-e-blogel.html' title='Trying out e-blog.el'/><author><name>larstobi</name><uri>http://www.blogger.com/profile/10980583104626784839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
