<channel>
<title>Petter Reinholdtsen - Entries from February 2009</title>
<description>Entries from February 2009</description>
- <link>../../../</link>
+ <link>http://people.skolelinux.org/pere/blog/</link>
<item>
<title>Intellektuelt privilegium - et bedre IP-begrep</title>
- <link>../../../Intellektuelt_privilegium___et_bedre_IP_begrep.html</link>
- <guid isPermaLink="true">../../../Intellektuelt_privilegium___et_bedre_IP_begrep.html</guid>
+ <link>http://people.skolelinux.org/pere/blog/Intellektuelt_privilegium___et_bedre_IP_begrep.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Intellektuelt_privilegium___et_bedre_IP_begrep.html</guid>
<pubDate>Sun, 1 Feb 2009 15:06:00 +0100</pubDate>
- <description>
-<p>Ofte brukes intellektuell eiendom som samlebegrep for opphavsrett,
+ <description><p>Ofte brukes intellektuell eiendom som samlebegrep for opphavsrett,
patenter, varemerker og forretningshemmeligheter. Problemet med dette
begrepet er at det er svært misvisende. For det første er ingen av de
begrensede monopolene det her er snakk om som kan kalles eiendom, og
<item>
<title>Norge trenger en personvernforening</title>
- <link>../../../Norge_trenger_en_personvernforening.html</link>
- <guid isPermaLink="true">../../../Norge_trenger_en_personvernforening.html</guid>
+ <link>http://people.skolelinux.org/pere/blog/Norge_trenger_en_personvernforening.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Norge_trenger_en_personvernforening.html</guid>
<pubDate>Sun, 1 Feb 2009 18:35:00 +0100</pubDate>
- <description>
-<p>De siste årene har jeg forsøkt å få liv i
+ <description><p>De siste årene har jeg forsøkt å få liv i
<a href="http://www.personvern.no/">foreningen Personvern i Norge</a>. Norge
trenger en organisasjon som jobber med å sette personvern på agendaen
og som kan være en motvekt til de mange som gjerne raderer bort
<item>
<title>Min reprap tar sakte form</title>
- <link>../../../Min_reprap_tar_sakte_form.html</link>
- <guid isPermaLink="true">../../../Min_reprap_tar_sakte_form.html</guid>
+ <link>http://people.skolelinux.org/pere/blog/Min_reprap_tar_sakte_form.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Min_reprap_tar_sakte_form.html</guid>
<pubDate>Tue, 3 Feb 2009 13:30:00 +0100</pubDate>
- <description>
-<p>Min reprap begynner å ta form. Den er nå kommet så langt at den er
+ <description><p>Min reprap begynner å ta form. Den er nå kommet så langt at den er
blitt en kubisk ramme. Z-aksen er montert men ikke kalibrert, og det
hele er klart for litt enkel testing. Har møtt på to problemer som
blokkerer videre montering, men har oppnått kontakt med Audun Vaaler
<item>
<title>Første vellykkede videostrøm fra NUUG</title>
- <link>../../../F__rste_vellykkede_videostr__m_fra_NUUG.html</link>
- <guid isPermaLink="true">../../../F__rste_vellykkede_videostr__m_fra_NUUG.html</guid>
+ <link>http://people.skolelinux.org/pere/blog/F_rste_vellykkede_videostr_m_fra_NUUG.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/F_rste_vellykkede_videostr_m_fra_NUUG.html</guid>
<pubDate>Wed, 11 Feb 2009 06:30:00 +0100</pubDate>
- <description>
-<p>Jeg ble glad for å se under
+ <description><p>Jeg ble glad for å se under
<a href="http://www.nuug.no/aktiviteter/20090210-compiz/">gårdagens
medlemsmøte</a> i NUUG Oslo at utsending av live-video fra møtet
fungerte for første gang. Forrige gang ble det ved en teknisk tabbe
<item>
<title>Endelig er Debian Lenny gitt ut</title>
- <link>../../../Endelig_er_Debian_Lenny_gitt_ut.html</link>
- <guid isPermaLink="true">../../../Endelig_er_Debian_Lenny_gitt_ut.html</guid>
+ <link>http://people.skolelinux.org/pere/blog/Endelig_er_Debian_Lenny_gitt_ut.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Endelig_er_Debian_Lenny_gitt_ut.html</guid>
<pubDate>Sun, 15 Feb 2009 11:50:00 +0100</pubDate>
- <description>
-<p>Endelig er <a href="http://www.debian.org/">Debian</a>
+ <description><p>Endelig er <a href="http://www.debian.org/">Debian</a>
<a href="http://www.debian.org/News/2009/20090214">Lenny</a> gitt ut.
Et langt steg videre for Debian-prosjektet, og en rekke nye
programpakker blir nå tilgjengelig for de av oss som bruker den
<item>
<title>Kart over overvåkningskamera i Norge</title>
- <link>../../../Kart_over_overv__kningskamera_i_Norge.html</link>
- <guid isPermaLink="true">../../../Kart_over_overv__kningskamera_i_Norge.html</guid>
+ <link>http://people.skolelinux.org/pere/blog/Kart_over_overv_kningskamera_i_Norge.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Kart_over_overv_kningskamera_i_Norge.html</guid>
<pubDate>Sun, 15 Feb 2009 22:30:00 +0100</pubDate>
- <description>
-<p>I regi av
+ <description><p>I regi av
<a href="http://www.personvern.no/">personvernforeningen</a> har jeg
startet på
<a href="http://personvern.no/wiki/index.php/Kameraovervåkning">et
om et kamera er registrert etter lovens krav eller ikke. Pr. nå er
22 kamera i Oslo registrert, og det trengs flere til å registrere
alle. Informasjonen registreres direkte inn i <a
-href="http://www.openstreetmap.org/">OpenStreetmap</a>, sa hentes det
+href="http://www.openstreetmap.org/">OpenStreetmap</a>, så hentes det
automatisk over i spesialkartet.</p>
</description>
</item>
<item>
<title>Using bar codes at a computing center</title>
- <link>../../../Using_bar_codes_at_a_computing_center.html</link>
- <guid isPermaLink="true">../../../Using_bar_codes_at_a_computing_center.html</guid>
- <pubDate>Fri, 20 Feb 2009 08:30:00 +0100</pubDate>
- <description>
-<p>At work with the University of Oslo, we have several hundred computers
+ <link>http://people.skolelinux.org/pere/blog/Using_bar_codes_at_a_computing_center.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Using_bar_codes_at_a_computing_center.html</guid>
+ <pubDate>Fri, 20 Feb 2009 08:50:00 +0100</pubDate>
+ <description><p>At work with the University of Oslo, we have several hundred computers
in our computing center. This give us a challenge in tracking the
location and cabling of the computers, when they are added, moved and
removed. Some times the location register is not updated when a
</description>
</item>
+ <item>
+ <title>Checking server hardware support status for Dell, HP and IBM servers</title>
+ <link>http://people.skolelinux.org/pere/blog/Checking_server_hardware_support_status_for_Dell__HP_and_IBM_servers.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Checking_server_hardware_support_status_for_Dell__HP_and_IBM_servers.html</guid>
+ <pubDate>Sat, 28 Feb 2009 23:50:00 +0100</pubDate>
+ <description><p>At work, we have a few hundred Linux servers, and with that amount
+of hardware it is important to keep track of when the hardware support
+contract expire for each server. We have a machine (and service)
+register, which until recently did not contain much useful besides the
+machine room location and contact information for the system owner for
+each machine. To make it easier for us to track support contract
+status, I've recently spent time on extending the machine register to
+include information about when the support contract expire, and to tag
+machines with expired contracts to make it easy to get a list of such
+machines. I extended a perl script already being used to import
+information about machines into the register, to also do some screen
+scraping off the sites of Dell, HP and IBM (our majority of machines
+are from these vendors), and automatically check the support status
+for the relevant machines. This make the support status information
+easily available and I hope it will make it easier for the computer
+owner to know when to get new hardware or renew the support contract.
+The result of this work documented that 27% of the machines in the
+registry is without a support contract, and made it very easy to find
+them. 27% might seem like a lot, but I see it more as the case of us
+using machines a bit longer than the 3 years a normal support contract
+last, to have test machines and a platform for less important
+services. After all, the machines without a contract are working fine
+at the moment and the lack of contract is only a problem if any of
+them break down. When that happen, we can either fix it using spare
+parts from other machines or move the service to another old
+machine.</p>
+
+<p>I believe the code for screen scraping the Dell site was originally
+written by Trond Hasle Amundsen, and later adjusted by me and Morten
+Werner Forsbring. The HP scraping was written by me after reading a
+nice article in ;login: about how to use WWW::Mechanize, and the IBM
+scraping was written by me based on the Dell code. I know the HTML
+parsing could be done using nice libraries, but did not want to
+introduce more dependencies. This is the current incarnation:</p>
+
+<pre>
+use LWP::Simple;
+use POSIX;
+use WWW::Mechanize;
+use Date::Parse;
+[...]
+sub get_support_info {
+ my ($machine, $model, $serial, $productnumber) = @_;
+ my $str;
+
+ if ( $model =~ m/^Dell / ) {
+ # fetch website from Dell support
+ my $url = "http://support.euro.dell.com/support/topics/topic.aspx/emea/shared/support/my_systems_info/no/details?c=no&amp;cs=nodhs1&amp;l=no&amp;s=dhs&amp;ServiceTag=$serial";
+ my $webpage = get($url);
+ return undef unless ($webpage);
+
+ my $daysleft = -1;
+ my @lines = split(/\n/, $webpage);
+ foreach my $line (@lines) {
+ next unless ($line =~ m/Beskrivelse/);
+ $line =~ s/&lt;[^>]+?>/;/gm;
+ $line =~ s/^.+?;(Beskrivelse;)/$1/;
+
+ my @f = split(/\;/, $line);
+ @f = @f[13 .. $#f];
+ my $lastend = "";
+ while ($f[3] eq "DELL") {
+ my ($type, $startstr, $endstr, $days) = @f[0, 5, 7, 10];
+
+ my $start = POSIX::strftime("%Y-%m-%d",
+ localtime(str2time($startstr)));
+ my $end = POSIX::strftime("%Y-%m-%d",
+ localtime(str2time($endstr)));
+ $str .= "$type $start -> $end ";
+ @f = @f[14 .. $#f];
+ $lastend = $end if ($end gt $lastend);
+ }
+ my $today = POSIX::strftime("%Y-%m-%d", localtime(time));
+ tag_machine_unsupported($machine)
+ if ($lastend lt $today);
+ }
+ } elsif ( $model =~ m/^HP / ) {
+ my $mech = WWW::Mechanize->new();
+ my $url =
+ 'http://www1.itrc.hp.com/service/ewarranty/warrantyInput.do';
+ $mech->get($url);
+ my $fields = {
+ 'BODServiceID' => 'NA',
+ 'RegisteredPurchaseDate' => '',
+ 'country' => 'NO',
+ 'productNumber' => $productnumber,
+ 'serialNumber1' => $serial,
+ };
+ $mech->submit_form( form_number => 2,
+ fields => $fields );
+ # Next step is screen scraping
+ my $content = $mech->content();
+
+ $content =~ s/&lt;[^>]+?>/;/gm;
+ $content =~ s/\s+/ /gm;
+ $content =~ s/;\s*;/;;/gm;
+ $content =~ s/;[\s;]+/;/gm;
+
+ my $today = POSIX::strftime("%Y-%m-%d", localtime(time));
+
+ while ($content =~ m/;Warranty Type;/) {
+ my ($type, $status, $startstr, $stopstr) = $content =~
+ m/;Warranty Type;([^;]+);.+?;Status;(\w+);Start Date;([^;]+);End Date;([^;]+);/;
+ $content =~ s/^.+?;Warranty Type;//;
+ my $start = POSIX::strftime("%Y-%m-%d",
+ localtime(str2time($startstr)));
+ my $end = POSIX::strftime("%Y-%m-%d",
+ localtime(str2time($stopstr)));
+
+ $str .= "$type ($status) $start -> $end ";
+
+ tag_machine_unsupported($machine)
+ if ($end lt $today);
+ }
+ } elsif ( $model =~ m/^IBM / ) {
+ # This code ignore extended support contracts.
+ my ($producttype) = $model =~ m/.*-\[(.{4}).+\]-/;
+ if ($producttype &amp;&amp; $serial) {
+ my $content =
+ get("http://www-947.ibm.com/systems/support/supportsite.wss/warranty?action=warranty&amp;brandind=5000008&amp;Submit=Submit&amp;type=$producttype&amp;serial=$serial");
+ if ($content) {
+ $content =~ s/&lt;[^>]+?>/;/gm;
+ $content =~ s/\s+/ /gm;
+ $content =~ s/;\s*;/;;/gm;
+ $content =~ s/;[\s;]+/;/gm;
+
+ $content =~ s/^.+?;Warranty status;//;
+ my ($status, $end) = $content =~ m/;Warranty status;([^;]+)\s*;Expiration date;(\S+) ;/;
+
+ $str .= "($status) -> $end ";
+
+ my $today = POSIX::strftime("%Y-%m-%d", localtime(time));
+ tag_machine_unsupported($machine)
+ if ($end lt $today);
+ }
+ }
+ }
+ return $str;
+}
+</pre>
+
+<p>Here are some examples on how to use the function, using fake
+serial numbers. The information passed in as arguments are fetched
+from dmidecode.</p>
+
+<pre>
+print get_support_info("hp.host", "HP ProLiant BL460c G1", "1234567890"
+ "447707-B21");
+print get_support_info("dell.host", "Dell Inc. PowerEdge 2950", "1234567");
+print get_support_info("ibm.host", "IBM eserver xSeries 345 -[867061X]-",
+ "1234567");
+</pre>
+
+<p>I would recommend this approach for tracking support contracts for
+everyone with more than a few computers to administer. :)</p>
+
+<p>Update 2009-03-06: The IBM page do not include extended support
+contracts, so it is useless in that case. The original Dell code do
+not handle extended support contracts either, but has been updated to
+do so.</p>
+</description>
+ </item>
+
</channel>
</rss>