pages tagged osdkBatmules bloghttp://blog.batmule.dk/tags/osdk/Batmules blogikiwiki2012-07-27T09:43:48ZEncrypted ZFS on FreeBSDhttp://blog.batmule.dk/posts/2012/encrypted_zfs/fj2012-07-27T09:43:48Z2012-07-27T09:40:03Z
<p><em>If you are an intermediate or advanced user of ZFS, then this post is
probably not for you.</em></p>
<h3>Introduction</h3>
<p>I only recently started looking seriously at ZFS. So far general skepticism
about "new stuff" taking care of my precious files, has kept ZFS from being
used by me.</p>
<p>But no more. I am going to convert my home server to ZFS, when I get home from
<a href="http://www.thecamp.dk">The Camp</a>. This post will document some of the
decisions and solutions I arrived at while at The Camp.</p>
<p>My requirements for storage are:</p>
<ul>
<li>Full disk encryption</li>
<li>Resilience for single drive failures</li>
<li>Rock solid filesystem</li>
</ul>
<p>So far these have been met by gmirror + GBDE + ufs2. But the possibility of
having my filesystems share a pool of free space, have had me thinking about
ZFS for some time. It would be nice not to have to move stuff around
when one filesystem runs out of space.</p>
<p>I was a little worried about how disk failures would manifest themselves,
and how they should be handled in order not to loose data. Thus I brought
3 USB disks to The Camp - one with known bad blocks.</p>
<p><a href="http://sven.esbjerg.name/">Sven Esbjerg</a> held a great ZFS workshop at
The Camp, which I attended. It provided a nice crash course in ZFS.
During the workshop, I played with setting up two disks as a mirror.
When the one with bad blocks gave errors when adding data to the
mirror, I could play with replacing it with the spare disk.
All worked as expected.</p>
<p>While my requirements included full disk encryption, I also wanted raidz in order
to gain more usable disk space.</p>
<p>Looking around I found
<a href="http://0xfeedface.org/blog/lattera/2011-12-19/encrypted-zfs-freebsd">this convoluted way of doing it</a>,
but I wanted to keep it (more) simple - even at the cost of not giving
ZFS direct control of the disks.
<a href="http://blog.experimentalworks.net/2008/03/setting-up-an-encrypted-zfs-with-freebsd/">This blog post</a>
gave me a nice starting point.</p>
<p>In the end I opted for encrypting the devices with geli, and adding ZFS on
top of that.</p>
<h3>Configuring ZFS and testing failure</h3>
<p><em>This is done on a laptop, using USB drives, called /dev/daN.
Devices on a server would be something like /dev/adaN or /dev/adN.</em></p>
<p>I will create 3 encrypted devices, tell ZFS to use them, and create a pool spanning them all.</p>
<pre><code># Create encrypted devices
geli init -s 4096 /dev/da0 # Using a blocksize of 4096 to be prepared
geli init -s 4096 /dev/da1 # for future disks that use 4K blocks
geli init -s 4096 /dev/da2 # da2 is the bad disk
# Attach the devices for use
geli attach /dev/da0
geli attach /dev/da1
geli attach /dev/da2
# Create the zpool (called "tank"), spanning all 3 devices
zpool create tank raidz1 /dev/da0.eli /dev/da1.eli /dev/da2.eli
</code></pre>
<p>I then started to fill-up the pool in order to trigger errors from the bad disk.</p>
<pre><code>for i in `jot 10` ; do dd if=/dev/zero bs=1m count=10240 of=/tank/zero1.$i; done
for i in `jot 10` ; do dd if=/dev/zero bs=1m count=10240 of=/tank/zero2.$i; done
# ... etc ...
</code></pre>
<p>When the bad blocks were used, errors started to be logged in /var/log/messages, but
nothing was registering in ZFS.</p>
<pre><code>From /var/log/messages:
# ...
Jul 25 22:03:39 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): WRITE(10). CDB: 2a 0 c d0 64 20 0 0 80 0
Jul 25 22:03:39 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): CAM status: CCB request completed with an error
Jul 25 22:03:39 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): Retrying command
Jul 25 22:04:53 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): WRITE(10). CDB: 2a 0 c d0 64 20 0 0 80 0
Jul 25 22:04:53 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): CAM status: CCB request completed with an error
Jul 25 22:04:53 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): Retrying command
Jul 25 22:06:06 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): WRITE(10). CDB: 2a 0 c d0 64 20 0 0 80 0
Jul 25 22:06:06 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): CAM status: CCB request completed with an error
Jul 25 22:06:06 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): Retrying command
Jul 25 22:07:20 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): WRITE(10). CDB: 2a 0 c d0 64 20 0 0 80 0
Jul 25 22:07:20 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): CAM status: CCB request completed with an error
Jul 25 22:07:20 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): Retrying command
Jul 25 22:08:34 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): WRITE(10). CDB: 2a 0 c d0 64 20 0 0 80 0
Jul 25 22:08:34 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): CAM status: CCB request completed with an error
Jul 25 22:08:34 <kern.crit> guide kernel: (da2:umass-sim2:2:0:0): Error 5, Retries exhausted
Jul 25 22:08:34 <kern.crit> guide kernel: GEOM_ELI: Crypto WRITE request failed (error=5). da2.eli[WRITE(offset=110071791616, length=131072)]
Jul 25 22:08:34 <kern.crit> guide kernel: GEOM_ELI: Crypto WRITE request failed (error=5). da2.eli[WRITE(offset=110071922688, length=131072)]
Jul 25 22:08:34 <kern.crit> guide kernel: GEOM_ELI: Crypto WRITE request failed (error=5). da2.eli[WRITE(offset=110072053760, length=131072)]
Jul 25 22:08:34 <kern.crit> guide kernel: GEOM_ELI: Crypto WRITE request failed (error=5). da2.eli[WRITE(offset=110072184832, length=131072)]
Jul 25 22:08:34 <kern.crit> guide kernel: GEOM_ELI: Crypto WRITE request failed (error=5). da2.eli[WRITE(offset=110072315904, length=131072)]
Jul 25 22:08:34 <kern.crit> guide kernel: GEOM_ELI: Crypto WRITE request failed (error=5). da2.eli[WRITE(offset=110072446976, length=131072)]
Jul 25 22:08:34 <kern.crit> guide kernel: GEOM_ELI: Crypto WRITE request failed (error=5). da2.eli[WRITE(offset=110072578048, length=131072)]
Jul 25 22:08:34 <kern.crit> guide kernel: GEOM_ELI: Crypto WRITE request failed (error=5). da2.eli[WRITE(offset=110072709120, length=131072)]
Jul 25 22:08:34 <kern.crit> guide kernel: GEOM_ELI: Crypto WRITE request failed (error=5). da2.eli[WRITE(offset=110071529472, length=131072)]
Jul 25 22:08:34 <kern.crit> guide kernel: GEOM_ELI: Crypto WRITE request failed (error=5). da2.eli[WRITE(offset=110071660544, length=131072)]
# ...
</code></pre>
<p>This kept going for a couple of hours (I kept adding data),
while ZFS claimed that all was fine. Finally
ZFS saw enough errors, and dropped the bad disk (i forgot to save the output of
'zpool status' here).</p>
<p>I detached the disk from the USB port, and ZFS shows:</p>
<pre><code>guide ~ 90# zpool status
pool: tank
state: DEGRADED
status: One or more devices has been removed by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scan: scrub in progress since Wed Jul 25 22:45:40 2012
188G scanned out of 312G at 38.7M/s, 0h54m to go
0 repaired, 60.17% done
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
da0.eli ONLINE 0 0 0
da1.eli ONLINE 0 0 0
17292134696089706765 REMOVED 0 0 0 was /dev/da2.eli
</code></pre>
<p>I have lost a disk, but raidz allows for that, while still allowing access to all
data.</p>
<h3>Getting access to the pool after reboot</h3>
<p>After reboot, the state is:</p>
<pre><code>guide ~ 1# zpool status
pool: tank
state: UNAVAIL
status: One or more devices could not be opened. There are insufficient
replicas for the pool to continue functioning.
action: Attach the missing device and online it using 'zpool online'.
see: http://illumos.org/msg/ZFS-8000-3C
scan: none requested
config:
NAME STATE READ WRITE CKSUM
tank UNAVAIL 0 0 0
raidz1-0 UNAVAIL 0 0 0
7434867841503891175 UNAVAIL 0 0 0 was /dev/da0.eli
2223752624539388409 UNAVAIL 0 0 0 was /dev/da1.eli
17292134696089706765 UNAVAIL 0 0 0 was /dev/da2.eli
</code></pre>
<p>Without having attached the geli devices, ZFS cannot find its data, and the pool is offline.</p>
<p>Attach the devices for use:</p>
<pre><code>guide ~ 3# geli attach /dev/da0
Enter passphrase:
guide ~ 4# geli attach /dev/da1
Enter passphrase:
</code></pre>
<p>ZFS now finds the devices, but does not mount the data sets.</p>
<pre><code>guide ~ 5# zpool status
pool: tank
state: DEGRADED
status: One or more devices has been removed by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scan: scrub repaired 0 in 1h58m with 0 errors on Thu Jul 26 00:43:43 2012
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
da0.eli ONLINE 0 0 0
da1.eli ONLINE 0 0 0
17292134696089706765 REMOVED 0 0 0 was /dev/da2.eli
</code></pre>
<p>Mount the datasets.</p>
<pre><code>guide ~ 8# zfs mount -a
</code></pre>
<p>My data are ready to be used again.</p>
<p>If this was not just a test setup, I would get a new drive and add it to the pool.</p>
<pre><code>geli init -s 4096 /dev/da2 # Assuming that da2 was the new drive
geli attach /dev/da2
zpool replace tank 17292134696089706765 /dev/da2.eli
</code></pre>
<p>ZFS would now resilver the pool, and after a while the new drive would have all the needed data copied to it,
and the pool would again have enough redundancy to allow for the loss of one drive.</p>
<h3>Keeping an eye on ZFS</h3>
<p>In order to get reminders about the state of ZFS in the nightly emails, I have added
ZFS status to /etc/periodic.conf. Furthermore, I have asked the system to run scrub
on the pool every 8 days.</p>
<pre><code>guide ~ 22# cat /etc/periodic.conf
daily_status_zfs_enable="YES"
daily_status_zfs_zpool_list_enable="YES"
daily_scrub_zfs_enable="YES"
daily_scrub_zfs_default_threshold=8
</code></pre>
<p>Had this been my server, I would now have a good feeling about being informed about
the state of my filesystems.</p>
<h3>Further thoughts</h3>
<p>It is my experience from these tests, that ZFS does not like it when
drives belonging to a pool disappear, not even when all filesystems in
that pool has been unmounted.
Thus I would not recommend using USB drives as removable storage with ZFS for production use.</p>
<p>When replacing a failed drive in a raidz (or a mirror), the new drive should be the same size
or larger than the smallest drive at creation of the pool. This should surprise no one.</p>
<p>In practice large drives will differ slightly in size (unless they have the same partnumber).
It is therefore prudent to not use the full drive, but leave, say, 100MB-1GB unused at the end.
That way it is certain that the new 2TB drive - that you managed to get after
hours - will not be 20 sectors too small.</p>
<p>With this in mind, my creation above would have been something like:</p>
<pre><code>guide ~ 2> fgrep sectors: /var/log/messages
Jul 26 18:13:45 <kern.crit> guide kernel: da1: 953869MB (1953525167 512 byte sectors: 255H 63S/T 121601C)
# ... # This time my phone was da0
guide ~ 1# gpart destroy -F da1
guide ~ 2# gpart create -s GPT da1
guide ~ 3# gpart add -b 2048 -s 1953000000 -t freebsd-zfs da1 # (1953525167-1953000000)/2/1024 = 256MB free
# Start at block 2048 means ready for 4K drives
guide ~ 5# gpart show da1
=> 34 1953525100 da1 GPT (931G)
34 2014 - free - (1M)
2048 1953000000 1 freebsd-zfs (931G)
1953002048 523086 - free - (255M)
# Repeat for da2 and da3
guide ~ 10# geli init -s 4096 /dev/da1p1 # Note the use of "p1"
# Repeat for da2 and da3
guide ~ 15# geli attach /dev/da1p1
# Repeat for da2 and da3
guide ~ 20# zpool create tank raidz1 /dev/da1p1.eli /dev/da2p1.eli /dev/da3p1.eli
</code></pre>
<p>And we are now ready with .5G space less in tank (256M less at 3 drives,
of which 1/3 would have been used for redundancy).</p>
<h3>Conclusion</h3>
<p>I feel that this way of adding crypto to ZFS is the best way, at least until the day Oracle decides
to opensource the changes from v28 to v33. It does encrypt the data plus the redundancy,
but I see no real alternative to this, if I want the extra benefits of ZFS.</p>
Husk Backuphttp://blog.batmule.dk/posts/2011/husk_backup/fj2011-06-06T21:37:54Z2011-06-06T20:03:15Z
<p>Jeg fandt dette opslag på min gadedør, da jeg kom hjem fra arbejde idag.</p>
<p><a href="http://blog.batmule.dk/Pics/IMAG0215.anonymized.jpg"><img alt="IMAGE" src="http://blog.batmule.dk/Pics/IMAG0215.anonymized.small.jpg" /></a> <br />
(Klik for større version)</p>
<p>Jeg skal ikke gøre mig klog på baggrunden for situationen. <br />
Bare konstatere at nogen gange går det galt for vores vigtige data.</p>
<p>Og så er godt at have en backup. <br />
Vi, der arbejder professionelt med IT, er sjældent i tvivl om at det er
en god ide at have en grundig backup strategi. En del af os har endda
implementeret noget backup for vores private data.</p>
<p>For vores venner og bekendte, der bruger computere som et nødvendigt redskab,
så er det ikke altid indlysende at man bør sikre sig. Og derved kommer de
indimellem i klemme, som M. i ovenstående opslag.</p>
<h3>Backup strategi</h3>
<p>En god strategi ved projektarbejde er at have en USB stick med 7 underkataloger
- et for hver ugedag. Hver aften, når man er færdig med dagens arbejde,
kopieres alle de projekt relevante filer til dagens katalog. </p>
<p>USB sticken skal derefter placeres et sted der er uafhængigt af computeren,
og hvor evt. tyve ikke vil finde den. Hvis både laptop og USB stick mistes
samtidig, så er backupen jo intet værd. </p>
<p>Menneskelige fejl i editering og deciderede fejl i den anvendte software
kan ødelægge teksten man skriver på. Dette kan oftest reddes ved at gå tilbage
til en af de 7 kopier man har tilbage i tiden.</p>
<p>Om man også vil beskytte sig mod brand, eller om man synes at, hvis ens hjem
er brændt af, så er projektet det mindste problem, må man tage stilling til. <br />
Hvis man vil beskytte sig mod brand, så bør man have yderligere to USB sticks.
Den ene har man hjemme og hver gang det er belejligt, så kopierer man alle
projekt relaterede filer til den, og bytter den med den man har liggende
uden for hjemmet (på arbejde, på skolen, hos en ven, ...). På denne måde
roteres de to USB sticks så ofte man kan.</p>
<p>En anden god strategi er at sende alle filerne til sin egen gmail konto
hver aften. <br />
Så ligger data på googles servere, og er altid til at få fat på.</p>
<h3>Vejled venner og bekendte om backup</h3>
<p>Ovenstående er næppe særligt nyt eller overraskende for læserne af denne blog. <br />
Men for mange af jeres venner er det måske - så det er op til jer at sikre,
at de ikke ender som M. her.</p>
<p>Brug evt. dette opslag som en øjenåbner for de, der ikke umiddelbart kan se
pointen i at tage backup.</p>
Open Source Days - vel overståethttp://blog.batmule.dk/posts/2010/open_source_days_-_vel_overstaet/fj2011-03-27T15:55:55Z2010-03-07T15:00:46Z
<p>Det er altid en underlig tom fornemmelse at vågne søndag morgen efter <a href="http://opensourcedays.org/2010/">Open Source Days</a>.</p>
<p>Flere måneders målrettet indsats er kulmineret. Og festen er nu vel overstået. <br />
Pludselig er der ikke en mulliard opgaver der skal huskes, og en zillion ting der skal koordineres med 'de andre'[1].</p>
<p>Morgenen (dvs. formiddagen/middagen) er foregået halvt i zombie tilstand. <br />
Det lokale brunch sted havde lukket, så jeg har holdt den gående på bagerbrød og Red Bull. <br />
Jeg er helt klart blevet for gammel til at tage 4 pre-konference dage og 2 16 timers konferencedage (incl. en pæn del efter-konference-øl) uden men.</p>
<p>Jeg stod som de foregående år for at sikre at der var net og strøm til udstillere og brugergrupper. <br />
Til at hjælpe med dette havde jeg igen iår et super Net-crew, bestående af: <br />
Lars Thegler, Jenny Hadfield, Henrik Andersen, Jesper Frilund, Michel "Yuki" Inoue,
Jon Erichsen, Asbjørn Thegler & Søren Schrøder [2] <br />
Tak gutter, det var igen iår en fornøjelse at arbejde sammen med jer. <br />
(Det skal kraftigt understreges at vi ikke havde noget med det trådløse net at gøre. Det er 100% konfigureret og administreret af IT-U.)</p>
<p>Også tak til alle vores konference hjælpere.
Det er jeres fortjeneste at alt det praktiske under konferencen har forløbet så glat som det gjorde. I er alt for mange til at nævne her, men i ved hvem i er.</p>
<p>Det er min opfattelse, at alt på konferencen forløb uden reelle problemer. <br />
Jeg havde derfor tid til at se flere af foredragene. Og de jeg var nødt til at misse håber jeg at DKUUGs video team fik båndet. Hold øje med <a href="http://opensourcedays.org/2010/">websiden</a> for at se når de er online.</p>
<p>Tilbage er nu at få klaret de løse administrative ender, hvor den vigtigste er at sikre at vi får aflagt regnskab til vores ejere, <a href="http://www.dkuug.dk">DKUUG</a>. Uden DKUUGs velvillige økomnomiske backing havde der ikke været nogen Open Source Days konference.</p>
<p>På det mere personlige plan er det pludselig gået op for mig, at vasketøjskurven har fået rekord top på, og at de steder min Roomba ikke kan nå, har et decideret gråt og let uldent skær i forårssolen. Papirene i TODO bunken på skrivebordet ser ud til at være i akut fare for at komme i skred og planterne ser temmeligt indtørrede ud. Afgjort en god plan også at tage en fridag mandag.</p>
<p><img alt="spacer.png" src="http://blog.batmule.dk/Pics/spacer.png" width="30" height="30" /></p>
<p>[1] Hanne, Kristian, Peter og Sidsel <br />
[2] Sorteret efter 2. bogstav i fornavn. Hvorfor ikke?</p>
Open Source Days og forårhttp://blog.batmule.dk/posts/2010/open_source_days_og_forar/fj2011-03-27T15:55:55Z2010-03-03T16:21:27Z
<p>Billedet herunder viser IT-universitetet i forårssolen. </p>
<p>Det er her <a href="http://opensourcedays.org/2010">Open Source Days 2010</a> løber af stabelen fredag og lørdag. </p>
<p>Open Source Days[1] er for mig en af de vigtige events, der bebuder forårets komme. Og arbejdet med at få konferencen op at stå, har altid hjulpet med at få de kedelige og triste vintermåneder til at gå hurtigere.</p>
<p>Nu er der kun de sidste hektiske 1½ dage tilbage til festen begynder.</p>
<p>Kommer du?</p>
<p><a href="http://blog.batmule.dk/Pics/img_4308.jpg"><img alt="img_4308.jpg" src="http://blog.batmule.dk/assets_c/2010/03/img_4308-thumb-512x384-87.jpg" width="512" height="384" /></a></p>
<p><img alt="spacer.png" src="http://blog.batmule.dk/Pics/spacer.png" width="30" height="30" /></p>
<p>[1] inklusive de tidligere konferencer under LinuxForum navnet.</p>
Marketing failhttp://blog.batmule.dk/posts/2010/marketing_fail/fj2011-03-27T15:55:55Z2010-02-21T15:09:14Z
<p>While driving with my friend <a href="http://www.andersjensen.dk">Anders</a>, we passed this truck. <br />
Luckily the highway was busy, and i could make him slow down a little, and get in behind it for pictures.</p>
<p><img alt="it-rental.jpg" src="http://blog.batmule.dk/Pics/it-rental.jpg" width="400" height="515" /></p>
<p>My apoligies for the shaky picture. It is the best of the 30 odd pictures I took. I blame Anders car and his driving skills <img src="http://blog.batmule.dk/smileys/smile.png" alt=":-)" /> <br />
The text is "www.@it-rental.dk". </p>
<p>According to whois, the it-rental.dk domain does not exist anymore. I wonder why ...</p>
<p><strong>Update:</strong> <br />
<a href="http://new.czar.dk/">Peter Larsen</a> has spotted that the domain is lt-rental.dk, which seems to be very much alive.</p>
Når kunderne må fejlfinde post.dk's systemerhttp://blog.batmule.dk/posts/2010/nar_kunderne_ma_fejlfinde_postdks_systemer/fj2011-03-27T15:55:55Z2010-01-09T13:12:36Z
<p>Tilbage i december, lige før jul, bestilte jeg en HD og noget RAM hos SHG. </p>
<p>Jeg får altid mine pakker sendt til den lokale døgnpost, idet jeg så kan hente dem, når det passer min kalender, istedet for når det passer post.dk at holde åbent. Jeg var blandt de første kunder på systemet, og det har generelt fungeret godt. <br />
Jeg har hver gang fået en mail med 2 pinkoder, og disse har jeg så indtastet på døgnposten, og fået min pakke udleveret.</p>
<p>Jeg fulgte ivrigt min pakke på Track&Trace, men den så ud til at være fanget i systemet med status "23/12 - Ankommet til 704 Københavns Pakkecenter". <br />
Så 2/1 ringede jeg til kundeservice, og spurgte til min pakke, og de mente at afsenderen skulle melde den bortkommet. <br />
Jeg sendte derfor en mail til SHG, hvor jeg bad dem sende mig en ny, siden nogen tilsyneladende havde hugget min pakke, nu hvor den stadig var markeret som liggende på pakkecenteret. <br />
I forbindelse med skriveriet med SHGs support slog jeg d. 7/1 pakken op på Track&Trace. Og nu var min pakke pludselig ankommet til døgnposten d. 23/12, og var returneret 4/1. <br />
Altsammen uden at jeg havde modtaget nogen form for besked fra post.dk.</p>
<p>Da jeg så 7/1 fik en mail om at SHG havde afsendt min DVB-T tuner, og jeg idag 9/1 stadig ikke havde modtaget nogen mail med pinkode til afhentning, men Track&Trace viste at pakken lå i døgnposten, begyndte jeg at kigge på problemet.</p>
<p>Jeg greppede i min mail log, og fandt følgende: </p>
<blockquote>
<p>Jan 8 10:18:51 <mail.notice> fj sendmail[86279]: o089IpR1086279: ruleset=check_mail, arg1=<jboss@dp-adbprod1>, relay=mailgw2.post.dk [193.3.69.5], reject=553 5.1.8 <jboss@dp-adbprod1>... Domain of sender address jboss@dp-adbprod1 does not exist</p>
</blockquote>
<p>Og det er jo klar snak. Post.dk kan ikke finde ud af at sætte en korrekt afsender på deres mails. <br />
Og det er formentlig også grunden til at jeg aldrig modtog en mail om min julepakke.</p>
<p>Jeg ville egentlig gerne have min pakke her til weekenden, så jeg tænkte at jeg bare ville bede om at få pinkoderne til døgnposten gensendt til min mobil telefon. Jeg loggede ind på post.dk, og lagde mit mobilnummer ind. <br />
Desværre kan man ikke få gensendt pinkoder i post.dk's system, så jeg var tvunget til at ringe til deres kundeservice.</p>
<p>Hos kundeservice snakkede jeg med en flink og serviceminded ung mand, som forklarede at de havde store problemer med at deres mails ikke blev modtaget hos kunderne, og han tilbød mig at få pinkoderne over telefonen. Jeg fik mine pinkoder, og kvitterede med at forklare ham hvorfor deres mails blev væk, og hvad han skulle slå udviklingsafdelingen oven i hovedet med. Han lød noget forundret, men ville give beskeden videre. <br />
Jeg håber at de meget snart fixer problemet - men jeg beholder nu mit mobilnummer i systemet, bare for lige at være sikker ...</p>
<p>Tilbage er spørgsmålet så, hvorfor post.dk ikke tester deres nye systemer? <br />
Hvordan kan en så grel fejl få lov til at eksistere i produktion i så lang tid? <br />
Alle moderne mailservere nægter jo at modtage mails fra en afsender, hvis domæne ikke kan slås op. <br />
Hvis man har lavet den mindste smule overvågning af det nye system, så ville man have set 90+% af alle mails blive afvist med en fejlmelding, lignende den min mailserver har leveret tilbage. <br />
Især når man <em>er</em> nået til den konklusion at mails ikke når frem, så ville det da være indlysende at debugge lokalt som det første - det er jo her man har skiftet system, og det er her man har de bedste muligheder.</p>
<p>Men nej, det var altså en kunde, der skulle gøre arbejdet.</p>
<p>Og jeg har stadig ikke fået min HD og min RAM. Jeg håber at SHG snart gensender. <br />
Og min DVB-T tuner ligger stadig i døgnposten, for fyren i kundeservice fortalte mig at han lige havde fejlmeldt min døgnpost, med at brugerinterfacet var frosset/crashet ...</p>
<p>Suk!</p>
Civil ulydighedhttp://blog.batmule.dk/posts/2009/civil_ulydighed/fj2011-03-27T15:55:55Z2009-12-17T19:54:15Z
<p>Min arbejdsplads ligger i sydhavnen.</p>
<p>Politiet transporterer de forskellige COP15 ping'er mellem Bella og City via Sydhavnsgade - dvs. samme route man brugte da man gennemførte den latterlige ide at fragte Obama til Christiansborg, istedet for at fragte Christiansborg politikerne til Bella Centeret.</p>
<p>Under Obama-i-København hysteriet fandt politiet at det var nødvendigt, at forbyde folk at benytte de parkeringspladser der lå indenfor ca. 30m af Sydhavnsgade (bilbomber er så ubehagelige - bare spørg de stakkels mennesker i Irak). <br />
Man havde ydermere haft folk og bombehunde ved/i alle brønde i vejen på routen, og derefter "forseglet" dem. <br />
Og op til transporterne af Obama, blev alle biler, der ikke respekterede parkeringsforbudet, bare fjernet. Man havde en hel flåde af kranvogne til at hænge ud på den nærliggende tankstation, og de ventede bare på at få noget at lave. <br />
Alt i alt et rimeligt afbalanceret valg af forholdsregler, givet trusselsbilledet i forbindelse med Obamas besøg. Men jeg gætter også på, at de havde PET og Secret Service til at hjælpe. Både med sikkerhedsvurderingen og med at sikre at der blev indført forholdsregler, der dækkede truslerne i en grad, der sikrede at det rette sikkerhedsniveau også blev nået i praksis. </p>
<p>Mine kollegaer, der til hverdag pendler i bil, var naturligvis ikke begejstrede over i praksis at miste halvdelen af P-pladserne i området, men jeg fornemmede at de fleste godt kunne se det fornuftige i politiets handlemåde. Og ydermere havde politiet annonceret det i god tid, så alle kunne nå at indrette sig.</p>
<p>Nu under COP15 var der så tilsyneladende en eller anden halvstuderet papirskubber i etaten, der hentede planen frem igen som basis for de forholdsregler, der skulle tages denne gang. <br />
Planen bliver læst igennem, budgettet studeres, og det konstateres at de to ting tydeligvis ikke hænger sammen. Man begynder derefter at klippe i planen, hvorved kontrol af brønde forsvinder, idet det er dyrt og mandskabskrævende (og det kan jo heller ikke ses af de besøgende at her er sparet), helikopter eskorte af konvojerne ser jo flot ud, omend det er lidt dyrt, så det beholdes (det er jo ret tydeligt for de besøgende med sådan en helikopter over hovedet), blokering af P-pladser er jo reelt gratis (og de besøgende der er lidt observante vil måske bemærke det), fjernelse af biler der overtræder parkeringsforbudet er jo dyrt med alle de kranvogn-timer, så det forsvinder (og det bemærkes næppe gennem de tonede ruder).</p>
<p>Vi ender altså med at der igen indføres parkerings forbud, mens <em>ingen</em> af de andre forholdsregler mod bomber gennemføres. <br />
Dette forbud annonceres lige inden fyraften mandag, og gælder så ikke kun een dag som under Obama besøget, nej, det gælder tirsdag til fredag. <br />
Med andre ord, mine stakkels bil-pendlende kollegaer har reelt intet varsel for en meget væsentlig indgriben i deres arbejdsdag.</p>
<p>Og det nytter jo ingenting. Fordi de biler, der allerede var parkeret, blev ikke fjernet. De biler, der ignorerede forbudet, bliver ikke fjernet. Man har opnået chikanen af de almindelige borgere, og absolut ingen af de fordele der kunne have været.</p>
<p>Dette bringer mig til titlen på dette rant. <br />
Nogle i nabobygningen fik åbenbart nok, og besluttede sig for, i den for tiden så populære 'civil ulydighed'-stil, at ignorere idiotien.<br />
<a href="http://blog.batmule.dk/Pics/img_4011.blur.jpg"><img alt="img_4011.blur.jpg" src="http://blog.batmule.dk/assets_c/2009/12/img_4011.blur-thumb-512x384-79.jpg" width="512" height="384" /></a></p>
<p>De parkerede biler er kørt hen over de opsatte rød-hvide politi afspærrings bånd i morges. <br />
Betjenten, der ses på billedet, har lige fixet afspærringen og sat nyt bånd op bag bilerne. <br />
Meget <a href="http://www.passiveaggressivenotes.com/">passivt aggressivt</a> </p>
<p>Som det ses herunder, er det tydeligt kun eet firma, hvor man er civilt ulydige.
<a href="http://blog.batmule.dk/Pics/img_4014.jpg"><img alt="img_4014.jpg" src="http://blog.batmule.dk/assets_c/2009/12/img_4014-thumb-512x384-81.jpg" width="512" height="384" /></a></p>
<p>Og billede taget den modsatte vej.
<a href="http://blog.batmule.dk/Pics/img_4013.jpg"><img alt="img_4013.jpg" src="http://blog.batmule.dk/assets_c/2009/12/img_4013-thumb-512x384-83.jpg" width="512" height="384" /></a></p>
<p>Bemærk bilen der stikker ud ved det blå skilt. Den er ikke ved at køre, den kunne ikke komme længere ind på den stopfulde parkeringsplads.</p>
<p>Jeg håber egentlig, at der er flere i sydhavnen, der imorgen viser de voldelige venstreekstremister hvad fredelig civil ulydighed helt præcist er. <br />
For i dette tilfælde kan jeg kun støtte bilisterne i deres 'Fuck Politiet' holdning. <br />
Politiets holdning til den almindelige borgers tid, fortjener ganske enkelt ingen respekt.</p>
<p>Som sikkerhedsprofessionel kan jeg kun grine (eller måske endda græde) over en politietat, der åbenlyst ikke er istand til at implementere en sammenhængende plan, mod et trusselsbillede der er gennemanalyseret tidligere. </p>
<p>De vælger istedet hovedløst at plukke i forholdsreglerne, tydeligvis ud fra hvad der ser godt ud, og hvad der er gratis for etaten. Dette gøres uden at anerkende at tiltag, der generer borgerne, reelt også har en pris. <br />
Hvor det rigtige havde været at se hvad budgettet rakte til af sikkerhedsniveau, og så implementere efter det - og dermed nå et reelt niveau uden ressourcespild. Så ender man her med sikkerhed der når et (forhåbentligt korrekt) niveau, med ekstra klasket på, der er helt uden værdi i praksis, men som har en høj pris.</p>
<p>Ynkeligt!</p>
Det skal bare forklares på manager sproghttp://blog.batmule.dk/posts/2009/det_skal_bare_forklares_pa_manager_sprog/fj2011-03-27T15:55:55Z2009-12-16T14:12:42Z
<p>Jeg står ved mit bord og arbejder, og min chefs tidligere chef kommer forbi med en USBstick med nogle dokumenter, han skal have printet til et møde. <br />
Da jeg arbejder ved min FreeBSD workstation, så låner han bare min Windows laptop.</p>
<p>Manager: Hvorfor skal du egentlig have så mange computere? <br />
FJ: Den der [peger på Windows maskine] kører Windows, den bruger jeg til at læse mail på. <br />
FJ: Den der [peger på FreeBSD maskine] kører Unix. Den har jeg, så jeg kan arbejde. <br />
Manager: Det lyder jo rimeligt nok, når du forklarer det sådan.</p>
<p>Det er næsten synd at han ikke er min chef-chef mere ...</p>
Horse breaks through security in Kastrup Airport (CPH)http://blog.batmule.dk/posts/2009/horse_breaks_through_security_in_kastrup_airport_cph/fj2011-03-27T15:55:55Z2009-10-07T17:27:42Z
<p>A Ritzau telegram tells about a horse which made it through the fence around CPH. <a href="http://nyhederne.tv2.dk/article.php/id-25601390.html">See TV2-nyhederne</a> for the story in Danish.</p>
<p>The horse apparently found an open gate, got scared by the planes, and ran out via a manned checkpoint - breaking it in the process. <br />
I guess this is the only reason anyone saw it ...</p>
<p>I am really happy that the average horse is way smarter than the average jihadist. Otherwise the implications of this would be staggering.</p>
<p>But it gives me something to ponder the next time I fly, while I wait in the security line, and have to put my 007-laptop in a separate tray, remove my ninja-belt and empty my pockets of all my magic weapons[1] prior to the security check.</p>
<p>Sigh!</p>
<p><img alt="spacer.png" src="http://blog.batmule.dk/Pics/spacer.png" width="30" height="30" /></p>
<p>[1] At which point I frantically check if I remembered to leave my <a href="http://www.leatherman.com/multi-tools/keychain-tools/squirt-p4.aspx">Leatherman Squirt P4</a> keychain multitool with the super deadly 4cm blade at home.</p>
FreeBSD system administration fail http://blog.batmule.dk/posts/2009/freebsd_system_administration_fail/fj2011-03-27T15:55:55Z2009-09-28T20:51:21Z
<p>I usually pride myself of being a very good FreeBSD admin, but sometimes pride goes before a fall.</p>
<p>Yesterday I remote upgraded a server for DKUUG from FreeBSD-6.3-pN via 6-stable
to 7-stable.
The first step (6.3 to 6-stable) went fine. The second step can only be described as fail.</p>
<p>I did the usual buildworld, buildkernel, installkernel, reboot dance - only
to realize that the server did not come up again. <br />
And tonight in the server room I realized why. <br />
The make.conf file had MODULES_WITH_WORLD set, which means that no KLDs are built during buildkernel or installed during installkernel (which used to be a neat trick back in the 4.x to 6.x days, when doing small kernel tweaks). Which meant that no KLD had been installed (and the old ones could not be used, obviously). <br />
And when the boot disk uses gmirror for mirroring, then the (missing) geom_mirror.ko KLD is very much missed, and the kernel can not find its filesystems.</p>
<p>First step was to tell the boot loader to boot from ufs:ad0s1a - the first half of the mirrored disk[1]. <br />
Second step was to mount the /usr filesystem from ad0s1f by hand. <br />
I located the KLDs (built during buildworld) in /usr/obj/usr/src/sys/modules and copied the GEOM relevant ones to /boot/kernel. </p>
<p>Now I could boot the system normally again. <br />
After boot the system decided that the two halves of the mirror did not match (after all
I just updated the first disk), decided that the second half was the better one, and thus undid my changes. But I did not care much, as the kernel at that time had loaded the needed KLDs, and was running fine.</p>
<p>I removed the MODULES_WITH_WORLD option and started a new kernel build and install, while I went to eat tapas at Panzon - a really nice tapas restaurant near the
server room. <br />
I could probably have found a quicker way, but I figured that I would opt for the safe path - and dinner now (which was probably the main reason, as I was hungry).</p>
<p>After dinner i did the reboot, installworld, mergemaster, reboot dance. <br />
Everything came up fine.</p>
<p>Morale of the story: <br />
When upgrading across major releases, then pay close attention to details, even if you have done the upgrade a thousand times before. <br />
<em>Don't panic</em>. Mishaps like this one can be fixed fairly easily.</p>
<p><img alt="spacer.png" src="http://blog.batmule.dk/Pics/spacer.png" width="30" height="30" /></p>
<p>[1] GEOM mirror keeps all metadata at the end of the disk, which means that the disks can be used as individual disks, without using the mirroring software, with very little trouble.</p>