]> pere.pagekite.me Git - homepage.git/blob - blog/archive/2009/02/02.rss
Generated.
[homepage.git] / blog / archive / 2009 / 02 / 02.rss
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/'>
3 <channel>
4 <title>Petter Reinholdtsen - Entries from February 2009</title>
5 <description>Entries from February 2009</description>
6 <link>http://people.skolelinux.org/pere/blog/</link>
7
8
9 <item>
10 <title>Checking server hardware support status for Dell, HP and IBM servers</title>
11 <link>http://people.skolelinux.org/pere/blog/Checking_server_hardware_support_status_for_Dell__HP_and_IBM_servers.html</link>
12 <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Checking_server_hardware_support_status_for_Dell__HP_and_IBM_servers.html</guid>
13 <pubDate>Sat, 28 Feb 2009 23:50:00 +0100</pubDate>
14 <description>&lt;p&gt;At work, we have a few hundred Linux servers, and with that amount
15 of hardware it is important to keep track of when the hardware support
16 contract expire for each server. We have a machine (and service)
17 register, which until recently did not contain much useful besides the
18 machine room location and contact information for the system owner for
19 each machine. To make it easier for us to track support contract
20 status, I&#39;ve recently spent time on extending the machine register to
21 include information about when the support contract expire, and to tag
22 machines with expired contracts to make it easy to get a list of such
23 machines. I extended a perl script already being used to import
24 information about machines into the register, to also do some screen
25 scraping off the sites of Dell, HP and IBM (our majority of machines
26 are from these vendors), and automatically check the support status
27 for the relevant machines. This make the support status information
28 easily available and I hope it will make it easier for the computer
29 owner to know when to get new hardware or renew the support contract.
30 The result of this work documented that 27% of the machines in the
31 registry is without a support contract, and made it very easy to find
32 them. 27% might seem like a lot, but I see it more as the case of us
33 using machines a bit longer than the 3 years a normal support contract
34 last, to have test machines and a platform for less important
35 services. After all, the machines without a contract are working fine
36 at the moment and the lack of contract is only a problem if any of
37 them break down. When that happen, we can either fix it using spare
38 parts from other machines or move the service to another old
39 machine.&lt;/p&gt;
40
41 &lt;p&gt;I believe the code for screen scraping the Dell site was originally
42 written by Trond Hasle Amundsen, and later adjusted by me and Morten
43 Werner Forsbring. The HP scraping was written by me after reading a
44 nice article in ;login: about how to use WWW::Mechanize, and the IBM
45 scraping was written by me based on the Dell code. I know the HTML
46 parsing could be done using nice libraries, but did not want to
47 introduce more dependencies. This is the current incarnation:&lt;/p&gt;
48
49 &lt;pre&gt;
50 use LWP::Simple;
51 use POSIX;
52 use WWW::Mechanize;
53 use Date::Parse;
54 [...]
55 sub get_support_info {
56 my ($machine, $model, $serial, $productnumber) = @_;
57 my $str;
58
59 if ( $model =~ m/^Dell / ) {
60 # fetch website from Dell support
61 my $url = &quot;http://support.euro.dell.com/support/topics/topic.aspx/emea/shared/support/my_systems_info/no/details?c=no&amp;amp;cs=nodhs1&amp;amp;l=no&amp;amp;s=dhs&amp;amp;ServiceTag=$serial&quot;;
62 my $webpage = get($url);
63 return undef unless ($webpage);
64
65 my $daysleft = -1;
66 my @lines = split(/\n/, $webpage);
67 foreach my $line (@lines) {
68 next unless ($line =~ m/Beskrivelse/);
69 $line =~ s/&amp;lt;[^&gt;]+?&gt;/;/gm;
70 $line =~ s/^.+?;(Beskrivelse;)/$1/;
71
72 my @f = split(/\;/, $line);
73 @f = @f[13 .. $#f];
74 my $lastend = &quot;&quot;;
75 while ($f[3] eq &quot;DELL&quot;) {
76 my ($type, $startstr, $endstr, $days) = @f[0, 5, 7, 10];
77
78 my $start = POSIX::strftime(&quot;%Y-%m-%d&quot;,
79 localtime(str2time($startstr)));
80 my $end = POSIX::strftime(&quot;%Y-%m-%d&quot;,
81 localtime(str2time($endstr)));
82 $str .= &quot;$type $start -&gt; $end &quot;;
83 @f = @f[14 .. $#f];
84 $lastend = $end if ($end gt $lastend);
85 }
86 my $today = POSIX::strftime(&quot;%Y-%m-%d&quot;, localtime(time));
87 tag_machine_unsupported($machine)
88 if ($lastend lt $today);
89 }
90 } elsif ( $model =~ m/^HP / ) {
91 my $mech = WWW::Mechanize-&gt;new();
92 my $url =
93 &#39;http://www1.itrc.hp.com/service/ewarranty/warrantyInput.do&#39;;
94 $mech-&gt;get($url);
95 my $fields = {
96 &#39;BODServiceID&#39; =&gt; &#39;NA&#39;,
97 &#39;RegisteredPurchaseDate&#39; =&gt; &#39;&#39;,
98 &#39;country&#39; =&gt; &#39;NO&#39;,
99 &#39;productNumber&#39; =&gt; $productnumber,
100 &#39;serialNumber1&#39; =&gt; $serial,
101 };
102 $mech-&gt;submit_form( form_number =&gt; 2,
103 fields =&gt; $fields );
104 # Next step is screen scraping
105 my $content = $mech-&gt;content();
106
107 $content =~ s/&amp;lt;[^&gt;]+?&gt;/;/gm;
108 $content =~ s/\s+/ /gm;
109 $content =~ s/;\s*;/;;/gm;
110 $content =~ s/;[\s;]+/;/gm;
111
112 my $today = POSIX::strftime(&quot;%Y-%m-%d&quot;, localtime(time));
113
114 while ($content =~ m/;Warranty Type;/) {
115 my ($type, $status, $startstr, $stopstr) = $content =~
116 m/;Warranty Type;([^;]+);.+?;Status;(\w+);Start Date;([^;]+);End Date;([^;]+);/;
117 $content =~ s/^.+?;Warranty Type;//;
118 my $start = POSIX::strftime(&quot;%Y-%m-%d&quot;,
119 localtime(str2time($startstr)));
120 my $end = POSIX::strftime(&quot;%Y-%m-%d&quot;,
121 localtime(str2time($stopstr)));
122
123 $str .= &quot;$type ($status) $start -&gt; $end &quot;;
124
125 tag_machine_unsupported($machine)
126 if ($end lt $today);
127 }
128 } elsif ( $model =~ m/^IBM / ) {
129 # This code ignore extended support contracts.
130 my ($producttype) = $model =~ m/.*-\[(.{4}).+\]-/;
131 if ($producttype &amp;amp;&amp;amp; $serial) {
132 my $content =
133 get(&quot;http://www-947.ibm.com/systems/support/supportsite.wss/warranty?action=warranty&amp;amp;brandind=5000008&amp;amp;Submit=Submit&amp;amp;type=$producttype&amp;amp;serial=$serial&quot;);
134 if ($content) {
135 $content =~ s/&amp;lt;[^&gt;]+?&gt;/;/gm;
136 $content =~ s/\s+/ /gm;
137 $content =~ s/;\s*;/;;/gm;
138 $content =~ s/;[\s;]+/;/gm;
139
140 $content =~ s/^.+?;Warranty status;//;
141 my ($status, $end) = $content =~ m/;Warranty status;([^;]+)\s*;Expiration date;(\S+) ;/;
142
143 $str .= &quot;($status) -&gt; $end &quot;;
144
145 my $today = POSIX::strftime(&quot;%Y-%m-%d&quot;, localtime(time));
146 tag_machine_unsupported($machine)
147 if ($end lt $today);
148 }
149 }
150 }
151 return $str;
152 }
153 &lt;/pre&gt;
154
155 &lt;p&gt;Here are some examples on how to use the function, using fake
156 serial numbers. The information passed in as arguments are fetched
157 from dmidecode.&lt;/p&gt;
158
159 &lt;pre&gt;
160 print get_support_info(&quot;hp.host&quot;, &quot;HP ProLiant BL460c G1&quot;, &quot;1234567890&quot;
161 &quot;447707-B21&quot;);
162 print get_support_info(&quot;dell.host&quot;, &quot;Dell Inc. PowerEdge 2950&quot;, &quot;1234567&quot;);
163 print get_support_info(&quot;ibm.host&quot;, &quot;IBM eserver xSeries 345 -[867061X]-&quot;,
164 &quot;1234567&quot;);
165 &lt;/pre&gt;
166
167 &lt;p&gt;I would recommend this approach for tracking support contracts for
168 everyone with more than a few computers to administer. :)&lt;/p&gt;
169
170 &lt;p&gt;Update 2009-03-06: The IBM page do not include extended support
171 contracts, so it is useless in that case. The original Dell code do
172 not handle extended support contracts either, but has been updated to
173 do so.&lt;/p&gt;
174 </description>
175 </item>
176
177 <item>
178 <title>Using bar codes at a computing center</title>
179 <link>http://people.skolelinux.org/pere/blog/Using_bar_codes_at_a_computing_center.html</link>
180 <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Using_bar_codes_at_a_computing_center.html</guid>
181 <pubDate>Fri, 20 Feb 2009 08:50:00 +0100</pubDate>
182 <description>&lt;p&gt;At work with the University of Oslo, we have several hundred computers
183 in our computing center. This give us a challenge in tracking the
184 location and cabling of the computers, when they are added, moved and
185 removed. Some times the location register is not updated when a
186 computer is inserted or moved and we then have to search the room for
187 the &quot;missing&quot; computer.&lt;/p&gt;
188
189 &lt;p&gt;In the last issue of Linux Journal, I came across a project
190 &lt;a href=&quot;http://www.libdmtx.org/&quot;&gt;libdmtx&lt;/a&gt; to write and read bar
191 code blocks as defined in the
192 &lt;a href=&quot;http://en.wikipedia.org/wiki/Data_Matrix&quot;&gt;The Data Matrix
193 Standard&lt;/a&gt;. This is bar codes that can be read with a normal
194 digital camera, for example that on a cell phone, and several such bar
195 codes can be read by libdmtx from one picture. The bar code standard
196 allow up to 2 KiB to be written in the tag. There is another project
197 with &lt;a href=&quot;http://www.terryburton.co.uk/barcodewriter/&quot;&gt;a bar code
198 writer written in postscript&lt;/a&gt; capable of creating such bar codes,
199 but this was the first time I found a tool to read these bar
200 codes.&lt;/p&gt;
201
202 &lt;p&gt;It occurred to me that this could be used to tag and track the
203 machines in our computing center. If both racks and computers are
204 tagged this way, we can use a picture of the rack and all its
205 computers to detect the rack location of any computer in that rack.
206 If we do this regularly for the entire room, we will find all
207 locations, and can detect movements and removals.&lt;/p&gt;
208
209 &lt;p&gt;I decided to test if this would work in practice, and picked a
210 random rack and tagged all the machines with their names. Next, I
211 took pictures with my digital camera, and gave the dmtxread program
212 these JPEG pictures to see how many tags it could read. This worked
213 fairly well. If the pictures was well focused and not taken from the
214 side, all tags in the image could be read. Because of limited space
215 between the racks, I was unable to get a good picture of the entire
216 rack, but could without problem read all tags from a picture covering
217 about half the rack. I had to limit the search time used by dmtxread
218 to 60000 ms to make sure it terminated in a reasonable time frame.&lt;/p&gt;
219
220 &lt;p&gt;My conclusion is that this could work, and we should probably look
221 at adjusting our computer tagging procedures to use bar codes for
222 easier automatic tracking of computers.&lt;/p&gt;
223 </description>
224 </item>
225
226 <item>
227 <title>Kart over overvåkningskamera i Norge</title>
228 <link>http://people.skolelinux.org/pere/blog/Kart_over_overv_kningskamera_i_Norge.html</link>
229 <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Kart_over_overv_kningskamera_i_Norge.html</guid>
230 <pubDate>Sun, 15 Feb 2009 22:30:00 +0100</pubDate>
231 <description>&lt;p&gt;I regi av
232 &lt;a href=&quot;http://www.personvern.no/&quot;&gt;personvernforeningen&lt;/a&gt; har jeg
233 startet på
234 &lt;a href=&quot;http://personvern.no/wiki/index.php/Kameraovervåkning&quot;&gt;et
235 kart over overvåkningskamera i Norge&lt;/a&gt;. Bakgrunnen er at det etter
236 min mening bærer galt avsted med den massive overvåkningen som
237 finner sted i Norge i dag, og at flere og flere overvåkningskamera
238 gjør det vanskeligere og vanskeligere å gå igjennom livet uten at
239 små og store brødre trenger inn i ens private sfære. Datatilsynet
240 har et register over kameraovervåkning, men det viser seg å være
241 ubrukelig både til å finne ut hvor det er kamera plassert, og til å
242 sjekke om et kamera en kommer over er registrert. Dette nye kartet
243 fikser en av disse manglene, men det vil fortsatt være umulig å vite
244 om et kamera er registrert etter lovens krav eller ikke. Pr. nå er
245 22 kamera i Oslo registrert, og det trengs flere til å registrere
246 alle. Informasjonen registreres direkte inn i &lt;a
247 href=&quot;http://www.openstreetmap.org/&quot;&gt;OpenStreetmap&lt;/a&gt;, så hentes det
248 automatisk over i spesialkartet.&lt;/p&gt;
249 </description>
250 </item>
251
252 <item>
253 <title>Endelig er Debian Lenny gitt ut</title>
254 <link>http://people.skolelinux.org/pere/blog/Endelig_er_Debian_Lenny_gitt_ut.html</link>
255 <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Endelig_er_Debian_Lenny_gitt_ut.html</guid>
256 <pubDate>Sun, 15 Feb 2009 11:50:00 +0100</pubDate>
257 <description>&lt;p&gt;Endelig er &lt;a href=&quot;http://www.debian.org/&quot;&gt;Debian&lt;/a&gt;
258 &lt;a href=&quot;http://www.debian.org/News/2009/20090214&quot;&gt;Lenny&lt;/a&gt; gitt ut.
259 Et langt steg videre for Debian-prosjektet, og en rekke nye
260 programpakker blir nå tilgjengelig for de av oss som bruker den
261 stabile utgaven av Debian. Neste steg er nå å få
262 &lt;a href=&quot;http://www.skolelinux.org/&quot;&gt;Skolelinux&lt;/a&gt; /
263 &lt;a href=&quot;http://wiki.debian.org/DebianEdu/&quot;&gt;Debian Edu&lt;/a&gt; ferdig
264 oppdatert for den nye utgaven, slik at en oppdatert versjon kan
265 slippes løs på skolene. Takk til alle debian-utviklerne som har
266 gjort dette mulig. Endelig er f.eks. fungerende avhengighetsstyrt
267 bootsekvens tilgjengelig i stabil utgave, vha pakken
268 &lt;tt&gt;insserv&lt;/tt&gt;.&lt;/p&gt;
269 </description>
270 </item>
271
272 <item>
273 <title>Første vellykkede videostrøm fra NUUG</title>
274 <link>http://people.skolelinux.org/pere/blog/F_rste_vellykkede_videostr_m_fra_NUUG.html</link>
275 <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/F_rste_vellykkede_videostr_m_fra_NUUG.html</guid>
276 <pubDate>Wed, 11 Feb 2009 06:30:00 +0100</pubDate>
277 <description>&lt;p&gt;Jeg ble glad for å se under
278 &lt;a href=&quot;http://www.nuug.no/aktiviteter/20090210-compiz/&quot;&gt;gårdagens
279 medlemsmøte&lt;/a&gt; i NUUG Oslo at utsending av live-video fra møtet
280 fungerte for første gang. Forrige gang ble det ved en teknisk tabbe
281 sendt video uten lyd. Vi kan takke Ole Kristian Lien og resten av
282 videogruppen i NUUG for at nå NUUG-medlemmer over det ganske land
283 kunne se foredraget samtidig med oss i Oslo. Vi opplevde til og med
284 under møtet å motta spørsmål via IRC som ble besvart der og da.
285 Opptaket publiseres så snart det er kopiert over til NUUGs
286 webserver og komprimert.&lt;/p&gt;
287 </description>
288 </item>
289
290 <item>
291 <title>Min reprap tar sakte form</title>
292 <link>http://people.skolelinux.org/pere/blog/Min_reprap_tar_sakte_form.html</link>
293 <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Min_reprap_tar_sakte_form.html</guid>
294 <pubDate>Tue, 3 Feb 2009 13:30:00 +0100</pubDate>
295 <description>&lt;p&gt;Min reprap begynner å ta form. Den er nå kommet så langt at den er
296 blitt en kubisk ramme. Z-aksen er montert men ikke kalibrert, og det
297 hele er klart for litt enkel testing. Har møtt på to problemer som
298 blokkerer videre montering, men har oppnått kontakt med Audun Vaaler
299 ved Høgskolen i Østfold som forteller at de er nesten ferdig med et
300 tilsvarende byggesett som det jeg tar utgangspunkt i, og håper de kan
301 forklare hvordan de kom rundt problemene. De to problemene er
302 relatert til Z-aksen og Y-aksen. &lt;/p&gt;
303
304 &lt;p&gt;For Z-aksen, er det et stjernehjul som festes på motoraksen ved
305 tannjulet som driver z-aksebåndet og som skal holde båndet på plass.
306 Problemet med det nederste stjernejulet er at det er helt løst, og
307 blir liggende på motoren 5 mm nedenfor tannjulet, i stedet for å ligge
308 inntil tannjulet slik det skal. Mulig løsningen er å borre i
309 stjernehjulet, eller lime det fast.&lt;/p&gt;
310
311 &lt;p&gt;For Y-aksen, er det en plastdel som ser ut til å mangle som skulle
312 dekket to skruver som kommer i veien for kraftoverføringsmekanismen
313 fra motoren til selve aksen, slik at mekanismen kan snurre fritt.&lt;/p&gt;
314
315 &lt;p&gt;Når det gjelder elektronikken til min reprap, så er min gode venn
316 Anders Rosnes igang med å lodde sammen delene og han forteller at
317 koblingsbordet for Arduino er klart, og en temperatursensor og en
318 optoswitch er også klar. Gleder meg til å teste dem. Må bare finne
319 ut hvordan jeg laster opp firmware i Arduino-en. :)&lt;/p&gt;
320
321 &lt;p&gt;Når det gjelder NUUGs reprap-prosjekt, så er det framgang og Ole
322 Kristian, Tollef og Ketil besøke IFI for å få fortgang i produksjon av
323 plastdeler, og Ole Kristian forteller at han har funnet en kilde til
324 de fleste metalldelene. Gleder meg til å se resultaten av det
325 arbeidet.&lt;/p&gt;
326 </description>
327 </item>
328
329 <item>
330 <title>Norge trenger en personvernforening</title>
331 <link>http://people.skolelinux.org/pere/blog/Norge_trenger_en_personvernforening.html</link>
332 <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Norge_trenger_en_personvernforening.html</guid>
333 <pubDate>Sun, 1 Feb 2009 18:35:00 +0100</pubDate>
334 <description>&lt;p&gt;De siste årene har jeg forsøkt å få liv i
335 &lt;a href=&quot;http://www.personvern.no/&quot;&gt;foreningen Personvern i Norge&lt;/a&gt;. Norge
336 trenger en organisasjon som jobber med å sette personvern på agendaen
337 og som kan være en motvekt til de mange som gjerne raderer bort
338 personvernet av behagelighetshensyn eller ut fra villfarelsen om at en
339 får økt sikkerhet av å redusere personvernet. Foreløbig har det ikke
340 lykkes å få på plass kritisk masse av interesserte på epostlisten, og
341 nå tror jeg det er på tide å endre tilnærming. I stedet for å forsøke
342 å rekruttere folk til epostlisten og håpe at når nok folk er samlet
343 vil noen ta initiativ og sørge for at det begynner å skje ting, så
344 tror jeg det er en ide å ta utgangspunkt i de som er der i dag og
345 sette sammen et interrimstyre. Forslaget er sendt til epostlisten, så
346 nå får vi se om noen er enig.&lt;/p&gt;
347 </description>
348 </item>
349
350 <item>
351 <title>Intellektuelt privilegium - et bedre IP-begrep</title>
352 <link>http://people.skolelinux.org/pere/blog/Intellektuelt_privilegium___et_bedre_IP_begrep.html</link>
353 <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Intellektuelt_privilegium___et_bedre_IP_begrep.html</guid>
354 <pubDate>Sun, 1 Feb 2009 15:06:00 +0100</pubDate>
355 <description>&lt;p&gt;Ofte brukes intellektuell eiendom som samlebegrep for opphavsrett,
356 patenter, varemerker og forretningshemmeligheter. Problemet med dette
357 begrepet er at det er svært misvisende. For det første er ingen av de
358 begrensede monopolene det her er snakk om som kan kalles eiendom, og
359 for det andre er egenskapene til de ulike monopolene så forskjellige
360 at det er mer tilslørende enn opplysende å gruppere dem sammen i et
361 sekkebegrep. Blant annet Richard Stallman har
362 &lt;a href=&quot;http://www.gnu.org/philosophy/not-ipr.html&quot;&gt;skrevet litt om dette&lt;/a&gt;.&lt;/p&gt;
363
364 &lt;p&gt;I dag kom jeg over
365 &lt;a href=&quot;http://blogs.sun.com/webmink/entry/intellectual_privilege&quot;&gt;en
366 bloggpost fra Simon Phipps&lt;/a&gt; som foreslår å bruke intellektuelt
367 privilegium som begrep i stedet, da det gjør det klarere at det ikke
368 er snakk om eiendom, men et tidsbegrenset monopol. Simon Phipps
369 forteller videre at noen jobber med å skrive
370 &lt;a href=&quot;http://www.intellectualprivilege.com/book.html&quot;&gt;en bok med
371 tittel Intellectual Privilege&lt;/a&gt;, og at boken er anbefalt av Lawrence
372 Lessig. Jeg tror jeg skal begynne å bruke begrepet intellektuelt
373 privilegium når jeg snakker om opphavsrett, patenter, varemerker og
374 forretningshemmeligheter framover.&lt;/p&gt;
375 </description>
376 </item>
377
378 </channel>
379 </rss>