<?xml version="1.0" encoding="UTF-8"?>
<posts type="array">
  <post>
    <body>Det er en stor forn&#248;jelse at v&#230;re tilbage p&#229; &quot;Mandriva Linux distribution&quot;:http://www.mandriva.com  I mere end seks m&#229;neder har jeg haft &quot;Ubuntu Linux distribution&quot;:http://www.ubuntu.com  p&#229; min serverfarm. Uden den store success m&#229; jeg sige. 

Mandriva Linux PowerPack 2009 er det fulde navn p&#229; distributionen og i forhold til Ubuntu er den rock stabel. Siden 2001 har jeg v&#230;ret platinmedlem hos Mandriva og dermed kunne f&#229;r de nyeste version af deres software med mulighed for at specificere nye tiltag til udviklingen. Jeg fik dog lyst til at pr&#248;ve en anden distribution da de gik over til &#229;rlige udgivelser. Ubuntu har v&#230;ret beh&#230;ftet med alt for mange fejl og mangler men det v&#230;rste er dog at den er ustabilt. 

Ubuntu er dog nem og logisk, nok bedre for begyndere p&#229; Linux platformen. Den har en l&#230;kker brugergr&#230;nseflade og masser af processer som scanner for USB, kamera og andet desktop pop. 

Mandriva Linux er lidt mere basic i sin bruger interaktion, lidt mere h&#229;ndarbejde men den er stabil og gennemtestet som en helhed inden man sender den p&#229; gaden. Mandriva f&#229;s som en samlet pakke der f&#248;les f&#230;rdig og gennemf&#248;rt distribution. PowerPack versionen ligger som standart p&#229; en DVD med 4.3 GB og ca. 4400 applikationer.   

Operativsystem installation  

Installationen af Mandriva er ligetil. Network og USB Wifi findes uden problemer. Efter installation er det f&#248;rste man skal at ops&#230;tte de medier hvorfra systemer skal hente efterf&#248;lgere opdateringer og applikationer. 

Det foreg&#229;r let gennem drakconf men kan ogs&#229; bruge &quot;easyurpmi&quot;:http://easyurpmi.zarb.org
Dern&#230;st skal jeg blot installere og starte de services og processer jeg almindeligvis benytter i min hverdag. 

For mig er en typisk karakteristika at jeg arbejder &#8220;cross platform&#8221; som Mac OSX, Linux og, hvis jeg ikke kan snige mig udenom, Windows. For at dele dokumenter mellem de forskellige platforme bruger jeg &#8221;Dropbox&#8221;:www.getdropbox.com Desv&#230;rre har den en afh&#230;ngighed til Gnome/Nautilus milj&#248;et mens jeg foretr&#230;kker KDE. Derfor m&#229; man downloade en s&#230;rlig pakke. N&#229;r filen er udpakket kan starte processen med dropboxd. Hvis man overlader starten til KDE's autostart kommer den lille fine dropbox ikon frem i opgavelinjen og alt er hocket op.  
&lt;pre&gt;
$ wget http://www.getdropbox.com/download?plat=lnx.x86
$ tar xzfv dropbox-lnx.x86-0.6.416.tar.gz
$ ~/.dropbox-dist/dropboxd
&lt;/pre&gt;

Firewall 

Mandriva kommer med &quot;Shorewall&quot;:http://www.shorewall.net Det er en slags wrapper over iptables og det virker perfekt. Man skal lave de f&#248;rste regler (rules) hvis man vil logge ind over ssh(22). Den er hermetisk lukket fra starten men man kan nemt &#230;ndre/tilf&#248;re en regel i /etc/shorewall/rules.drake. 

GIT Fast version control system

Git er et opensource, distribueret &quot;versionsstyringsystem&quot;:http://git-scm.com skrevet af Linus Torvalds. Min ops&#230;tning skal have et &#8220;central repository&#8221; placeret p&#229; server og flere &#8220;distrbuted repository&#8221;(locals) p&#229; mine udviklingsmaskiner.  

Ops&#230;tningen af Git remote server er nemt. Den metode jeg benytter er at oprette en bruger &#8220;git&#8221; med en hjemmemappe hvori alle repositories vil blive gemt. P&#229; den m&#229;de kan jeg udgive ssh public keys til evt. committere uden at sl&#230;kke p&#229; sikkerheden. 

&lt;pre&gt;
$ ssh root@server
$ urpmi git-core
$ adduser git
$ exit
$ ssh git@server
$ mkdir project.git
$ cd project.git
$ git --bare init
&lt;/pre&gt;

S&#229;dan. Bem&#230;rk at remote repository er post-fixed med .git og at man bruger &#8220;bare&#8221; optionen. Git repository beh&#248;ver ikke have lokale kopier af .git biblioteket, derfor kan man med &#8220;bare&#8221; optionen fort&#230;lle Git skal gemme binary objekter. 

P&#229; client siden kan jeg lave et nyt Git projekt: 
&lt;pre&gt;
$ cd ~/projects/project
$ echo &#8220; log/*.log \n tmp/**/* \n .DS_Store \n &#8221; &gt;&gt; .gitignore
$ git init
$ touch README
$ git add README
$ git commit -m 'commit project readme file'
$ git remote add origin git@server:project.git
$ git push origin master
&lt;/pre&gt;

Eller hvis du allerede har et eksisterende projekt kan du clone det med:
&lt;pre&gt;
$ git clone git@odin:project.git
# edit 
$ git push 
&lt;/pre&gt;

Du kan f&#229; code completion til Git hvis du kan finde &#8220;.git-completion.bash&#8221; p&#229; din Linux box. Den skal flyttes til hjemmebiblioteket og tilf&#248;re en linje til sin .profile fil. 
&lt;pre&gt;
[ -f ~/.git-bash-completion.sh ] &amp;&amp; . ~/.git-bash-completion.sh
$ source .profile 
&lt;/pre&gt;
S&#229; virker &#8220;code completion&#8221; til Git. Det virker ogs&#229; p&#229; Mac.

Sqlite3 Databasen

Databasen &quot;SQLite&quot;:http://www.sqlite.org er et software bibliotek, der implementer en serverless, nul-konfiguration, transaktions SQL database. SQLite er den mest udbredte SQL database i verden. Jeg v&#230;lger denne fordi den er god og r&#230;kker nemt til eksperimenterne softwareudvikling. 

M&#229;ske skulle jeg ogs&#229; sige at hele den hype omkring databaser er mig fuldst&#230;ndigt ligegyldig. Jeg operere med objekter og er ligeglad om man vil mappe til redaktionelle modeller eller grafer.  

I Mandriva er pakkerne lidt underligt fordelt. Man kan ikke &#8221;urpmi sqlite3&#8221; som under andre distributioner. 
&lt;pre&gt;
$ sudo urpmi ruby-sqlite3
$ sudo urpmi libsqlite3-devel
$ sudo urpmi sqlite3-tools
$ sqlite3
&lt;/pre&gt;

Det er vigtigt at installer SQLite databasen og ruby-sqlite3 broen f&#248;r Rails og Gems ellers f&#229;r man en fejl med &#8220;Failed to build gem native extension&#8221;

RubyGems and Rails

Hvis man vil lave en webfrontend er rails sagen. Rails f&#229;r og gamle Java teknon&#248;rder til at se h&#229;bl&#248;st gammeldags ud. Ruby sproget nedeunder er vidunderligt og supersmidigt mens man kun skriver 10 gange mindre antal kodelinjer set i forhold til fx Java. 

Mange af modstanderne siger at Java fx er langt overlegen n&#229;r det g&#230;lder hastighed men det er mange &#229;r siden jeg p&#229; en Java installation rent faktisk er hurtig. Det skyldes nu mere de folk som udvikler applikationerne der &#248;del&#230;gger dem med overengineered arkitektur og bloadet tredieparts frameworks og elendige sprogkonstruktioner. Java kan v&#230;re hurtigt men meget f&#229; mennesker ved noget om virkeligt kr&#230;vende high performent applikationer.  

Ruby er programmeringssproget og rubygems er ruby&#8217;s pakke manager med hvilken man installer rubyonrails. 

&lt;pre&gt;
$ sudo urpmi ruby
$ sudo urpmi ruby-dev # header soruce files
$ gem install sqlite3-ruby # sqlite ruby bro
$ ruby -v # Ruby 1.8.7
$ sudo urpmi gems # pakke system
$ gem -v # 1.0.1
$ gem update --system # rails requires rubygems &gt;= 1.3.1 
$ gem -v # 1.3.1
$ gem install rails # rails pakken
$ rails -v # 2.2.2
$ gem install mongrel # server
&lt;/pre&gt;

All my stuff

I 1998 fik jeg min f&#248;rste rigtige l&#230;restreg. Jeg fyrede en unix command af mens jeg stod i et forkert bibliotek. Siden dengang har jeg gerne haft mindst to diske med alle gamle dokumenter og fotos, konfigurationsfiler og andet. Jeg bruger rsync til at hente og opdatere(pull/push): 
&lt;pre&gt;
rsync -av external/stuff .
&lt;/pre&gt;
</body>
    <category-id type="integer" nil="true"></category-id>
    <created-at type="datetime">2009-01-30T08:33:07Z</created-at>
    <id type="integer">132</id>
    <post-id type="NilClass">132</post-id>
    <published type="boolean">true</published>
    <tag-id type="NilClass">17</tag-id>
    <title>Finally back on Mandriva Linux</title>
    <updated-at type="datetime">2009-02-07T05:37:23Z</updated-at>
  </post>
  <post>
    <body>I disse gr&#248;nne milj&#248; tider m&#229; man som udvikler t&#230;nke p&#229; mange ting. Denne gang vil jeg f&#248;rst og fremmest t&#230;nke p&#229; str&#248;mforbrug og etiske regels&#230;t n&#229;r man konstruere og drifter systemer. Det ville v&#230;re fedt at have sm&#229; super hurtige systemer som kan fungere ved at minimalt energiforbrug. Jeg har i mange &#229;r haft mine egen dedikeret serverer men i lange tider st&#229;r de faktisk n&#230;sten ubenyttet hen. 

Nu beh&#248;ver jeg ikke et top moderen drift center til mine sm&#229; webapplikationer og EDI udveksling men jeg har alligevel sat et par m&#229;l. 

* Hardwaren m&#229; ikke bruge mere en 10 Watt. 
* Hardwaren m&#229; ikke v&#230;re h&#248;rbar p&#229; en meter. 
* Inge service m&#229; tage mere end et halvt sekund. 

Normalt vil de fleste bare have maksimal hastighed men det er faktisk ikke s&#230;rligt sjovt, og det forbruger en masse str&#248;m og udvikler dermed ogs&#229; en masse varme. Jeg har fx en Dell Laptop der bliver s&#229; varm at jeg ikke kan se film og samtidig ha den p&#229; l&#229;rene. 

Ved at g&#229; lidt ned i CPU hastighed og i stedet indf&#248;re multi-core chiplevel Multi Processor(CMP) kan man opn&#229;r en betragtelig udnyttelsesgrad men n&#230;sten ingen &#248;gning i str&#248;mforbrug. 

Nu er det selvf&#248;lgelig s&#229;dan at n&#230;sten ingen applikationer kan udnytte flere CPU kerner til fulde. Fx kan man se en Java proces udnytte den ene proces 100% p&#229; en dual core maskine mens den anden st&#229;r ubenyttet i dvale.   

Jeg har k&#248;bt en linutop. Det er en lille box med superlavt str&#248;mforbrug og den er lydl&#248;s fordi der ikke er bev&#230;gelige dele i den. Reelt set er det kun et stykke printplade med nogle chips samlet i en aluminiums kasse. Den har ikke nogen harddisk eller andet som &#230;der str&#248;m eller skaber varme, kun CPU'en laver lidt varme. Boxen har en AMD Geode LX700 processor med 256 MB RAM og 4x USB 2.0 porter, audio og 10/100baseT Ethernet og VGA output. Den forbruger 5W.  

Der findes ikke et operativ i boxen men jeg vil have linux p&#229; den. Derfor har jeg prepereret en USB n&#248;gle med Mandriva, mit favorit linux styresystem gennem mange &#229;r. Mandiva kan installeres som fuld desktop eller server installation. 

&lt;a href=&quot;http://store.mandriva.com&quot;&gt;
&lt;img width=&quot;100&quot; src=&quot;http://store.mandriva.com/images/Mandriva-linutop2.jpg&quot;&gt;&lt;/a&gt;

N&#229;r Linutop&#8217;en modtager en bootable USB med et operativsystem starter den en lille fin distribution op med linux kernel 2.6.22.9-desktop586-1mdv med grafisk KDE 3.5 gr&#230;nseflade. USB'en k&#248;re perfekt p&#229; alle mine computere s&#229; l&#230;nge den bruger de respektive interne ressource men p&#229; linutop er problemet den lille AMD processor og de kun 256 MB RAM. 

Mandriva booter ikke default med sshd installeret og derudover er firewallen hermetisk lukket. Af gammel vane og for lidt ram skifter jeg ved samme lejlighed til et lavere runlevel i /etc/inittab, jeg har ikke brug for at logge grafisk ind over X. 

S&#229; er det ssh til boxen og installere noget software. Da softwaren er en fuldfed desktop udgave med 100vis af processer k&#248;rende og det tager lidt tid at finde alle de processer som jeg kan slukke uden det betyder noget for serveren. Her er resultatet, ca. 50 processer tilbage og lige over 60 MB fri mem. N&#229;r man ssh til boxen kan man fx starte drakconf, applikationen k&#248;re lynhurtige og kaster sit images p&#229; p&#229; den box hvor jeg er logget ind fra. 

&lt;pre&gt;
top - 01:45:20 up 45 min,  1 user,  load average: 0.00, 0.00, 0.07
Tasks:  52 total,   1 running,  51 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.3%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    235792k total,   171112k used,    64680k free,    15904k buffers
Swap:        0k total,        0k used,        0k free,   131304k cached
&lt;/pre&gt;

S&#229; er min lydl&#248;se USB computer ved at v&#230;re parat til at f&#229; installeret software, jeg vil k&#248;re med ruby on rails, en webserver instans, en database og nogle kontrolstrukture til vedligehold og genstart af serverne. 

&lt;pre&gt;
frank@linutop www]# free -m
             total       used       free     shared    buffers     cached
Mem:           230        176         53          0         16        110
-/+ buffers/cache:         49        181
Swap:            0          0          0
&lt;/pre&gt;

N&#229;r det hele k&#248;re m&#229; det helst ikke fylder mere end ca. 40MB mem. Ruby er standard p&#229; mandiva men rubygems og ruby on rails er ikke. P&#229; samme m&#229;de skal der v&#230;lges en database. hmmm gerne en med lille footprint.   

Normalt ville jeg benytte Apaches httpd server som webserver men da RAM er lidt begr&#230;nset vil jeg udskifte den med noget andet. Ofte fylder et kald til en apache instans op til ca. 20MB og det ville hurtigt slukke serveren. Min andet bud p&#229; en webserver er lighttpd, den er kendt for et specielt lille foodprint. 

Mongrel er en hurtig HTTP server for Ruby som benytter ren HTTP fremfor FastCGI som de to andre bruger. Da alt software ligger p&#229; en USB n&#248;gle vil jeg gerne undg&#229; at compliere yderligere pakker som fx fcgi. 

Thin er en ret ny og ret upr&#248;vet webserver men da den er udviklet i ren ruby vil jeg alligevel fors&#248;ge mig med den. Den skulle v&#230;re endnu hurtigere end Mongrel men jeg har ogs&#229; erfaret at den mister en tr&#229;d en gang i mellem. Det betyder at operativsystemet fanger en tr&#229;d som bruger en 10 til 15 procent af CPU&#8217;en. Efter 1 min bliver den piggybacked. Mongrel serveren bruger ca. 25 til 40MB i min opstilling her og det overrasker mig en smule at Thin bruger lidt mere. Om den i virkeligheden er hurtigere ved jeg ikke. 

Som database v&#230;gler jeg Sqlite. Rails 2 v&#230;lger den som default og jeg er med p&#229; noget nyt, eneste rigtige showstopper med sqlite er for mange clienter til samme database men det er ikke et problem her. 

Migrate af data fra mine gamle databaser til sqlite bliver ogs&#229; h&#229;ndteret af ruby. Se post Mutible ActiveRecord. Som det ses er databasen p&#229; lige over 3 GB. Lidt sejt n&#229;r der ogs&#229; er et linux system p&#229; flash n&#248;glen. 

&lt;pre&gt;
[frank@linutop db]$ ll -h
total 332K
-rw-r--r-- 1 frank frank  10K 2007-01-25 01:09 dev.sqlite3
drwxr-xr-x 2 frank frank 4.0K 2008-01-02 23:04 migrate/
-rw-r--r-- 1 frank frank 3,6G 2008-01-04 15:04 production.sqlite3
-rw-r--r-- 1 frank frank 1.6K 2008-01-03 14:56 schema.rb
&lt;/pre&gt;

S&#229; er det tid til at starte hele dynen. Jeg har lavet nogle scrips til start og stop af serveren og sat cron til at checke om den k&#248;re og hvis ikke starte den. I f&#248;rste omgang vil jeg bare k&#248;re en enkelt instans men det ser ud til jeg kan k&#248;re flere hvis det beh&#248;ves. Underligt nok fylder en enkelt instans ca. 35 MB mens to fylder kun lidt mere? 

Ulempen er hastigheden grunden den relativt lille m&#230;nge RAM. Stabiliteten har indtil videre v&#230;re utrolig h&#248;j. Her er en k&#248;rsel efter n&#230;sten 4 d&#248;gn. Man kan se kthreadd har v&#230;re aktiv, nok en tabt tr&#229;d fra Thin. Thin serveren bruger 33M og ser aktiv ud. 
&lt;pre&gt;
top - 21:54:36 up 9 days,  2:16,  1 user,  load average: 0.12, 0.04, 0.01
Tasks:  57 total,   1 running,  55 sleeping,   1 stopped,   0 zombie
Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    235792k total,   231660k used,     4132k free,    22328k buffers
Swap:        0k total,        0k used,        0k free,   133180k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
    1 root      20   0  1652  564  492 S  0.3  0.2   0:16.59 init               
10899 root      20   0 42596  37m 3088 S  0.3 16.3  89:30.20 thin               
11576 frank     20   0  2160  972  796 R  0.3  0.4   0:00.09 top                
    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.01 kthreadd           
    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0        
    4 root      15  -5     0    0    0 S  0.0  0.0   0:01.61 ksoftirqd/0     
&lt;/pre&gt;

h5. Update 

&lt;pre&gt;
top - 18:46:21 up 43 days, 23:07,  1 user,  load average: 0.06, 0.06, 0.01
Tasks:  57 total,   1 running,  55 sleeping,   1 stopped,   0 zombie
Cpu(s):  0.3%us,  0.7%sy,  0.0%ni, 99.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    235792k total,   231824k used,     3968k free,    16220k buffers
Swap:        0k total,        0k used,        0k free,   117904k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
17282 frank     20   0  2160  976  796 R  0.7  0.4   0:01.71 top                
12344 root      20   0 56464  51m 3092 S  0.3 22.2 713:56.60 thin               
    1 root      20   0  1652  564  492 S  0.0  0.2   1:06.82 init               
    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.01 kthreadd           
    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0        
    4 root      15  -5     0    0    0 S  0.0  0.0   0:02.68 ksoftirqd/0        
    5 root      15  -5     0    0    0 S  0.0  0.0   2:54.08 events/0           
    6 root      15  -5     0    0    0 S  0.0  0.0   0:00.04 khelper            
   29 root      15  -5     0    0    0 S  0.0  0.0   0:00.82 kblockd/0          
   30 root      15  -5     0    0    0 S  0.0  0.0   0:00.05 kseriod            
&lt;/pre&gt;

Hvis du kan l&#230;se denne blog k&#248;re min linutop :-) Fascinerede lydl&#248;st    


&quot;Linutop&quot;:http://linutop.com/
&quot;Mandriva store&quot;:http://store.mandriva.com/
</body>
    <category-id type="integer">6</category-id>
    <created-at type="datetime">2008-01-09T22:18:00Z</created-at>
    <id type="integer">90</id>
    <post-id type="NilClass">90</post-id>
    <published type="boolean">false</published>
    <tag-id type="NilClass">17</tag-id>
    <title>Green Rails</title>
    <updated-at type="datetime">2008-03-10T01:40:50Z</updated-at>
  </post>
</posts>
