| 1 |
root |
1.1 |
=head1 GOOFED - Generic Object Oriented Flexible Extensible Daemon |
| 2 |
|
|
|
| 3 |
|
|
=head2 Abstract |
| 4 |
|
|
|
| 5 |
root |
1.2 |
Perl ist eine tolle Sprache. Leider hat sie auch viele |
| 6 |
|
|
Abhängigkeiten. Besonders bei Embedding muss man im Allgemeinen eine |
| 7 |
|
|
ganze Perl-Installation "mitschleppen". Bei einem bestimmten Projekt |
| 8 |
|
|
musste ich ohne externe Dateien oder andere Abhängigkeiten auskommen. Um |
| 9 |
|
|
trotzdem Perl einsetzen zu können, musste alles in das Binary |
| 10 |
|
|
wandern. Die Probleme und Lösungen, die ich fand, sind im Folgenden |
| 11 |
|
|
beschrieben. |
| 12 |
root |
1.1 |
|
| 13 |
root |
1.2 |
=head1 Wozu, weshalb und warum? |
| 14 |
|
|
|
| 15 |
|
|
Das Projekt, für das Goofed entstand, bestand darin, den Radius-Server |
| 16 |
|
|
eines großen Internet-Providers in einigen Funktionen zu ersetzen. Da die |
| 17 |
|
|
Anforderungen durch viele Jahre hinweg sehr speziell wurden (ein typisches |
| 18 |
|
|
"I<Wir> setzen den Standard"-Phänomen) und die alte Codebasis neuen |
| 19 |
|
|
Anforderungen nicht mehr gut gewachsen war, musste ein neuer Daemon her. |
| 20 |
|
|
|
| 21 |
|
|
Recht früh kam die Idee, im Kern für die komplizierten Regeln eine |
| 22 |
|
|
High-Level-Skriptsprache zu verwenden und nur für das eigentliche |
| 23 |
|
|
Radius-Paket-Management C zu verwenden. |
| 24 |
|
|
|
| 25 |
|
|
Perl schien zuerst an vielen Gründen zu scheitern: kompliziertes |
| 26 |
|
|
Build-System, viele Abhängigkeiten und Dateien, keine gute Kontrolle |
| 27 |
|
|
über den Speicherbedarf (Leaks wären tödlich für einen Daemon, der |
| 28 |
|
|
meherre Monate durchhalten muss) und Last-not-Least stand zu befürchten, |
| 29 |
|
|
daß die Server-Abteilung die Lösung sofort ablehnen würde, sobald |
| 30 |
|
|
bekannt würde, das sie Perl benutzt (typisches "Real-World - macht keinen |
| 31 |
|
|
Sinn"-Phänomen). |
| 32 |
|
|
|
| 33 |
|
|
=head1 Eckpunkte der Implementierung |
| 34 |
root |
1.1 |
|
| 35 |
|
|
=head1 Implementation |
| 36 |
|
|
|
| 37 |
|
|
=head2 Perl? .... Microperl! |
| 38 |
|
|
|
| 39 |
|
|
=head2 Module Embedden |
| 40 |
|
|
|
| 41 |
|
|
=head2 Bibliothek |
| 42 |
|
|
|
| 43 |
|
|
=head2 Bootstrapping |
| 44 |
|
|
|