b6e8db1bca256bc937e76dfd6e872f0e2eedcaec
[p5sagit/local-lib.git] / lib / POD2 / DE / local / lib.pod
1 =encoding utf8
2
3 =head1 NAME
4
5 local::lib~[de] - Erschaffen und benutzen von Perl Modulen in einem lokalen lib/ Verzeichnis mit PERL5LIB
6
7 =head1 SYNOPSIS
8
9 Im Code -
10
11   use local::lib; # Benutzt das Verzeichnis ~/perl5 zum anlegen des lokalen lib/ Verzeichnisses
12
13   use local::lib '~/foo'; # das selbe, aber mit ~/foo
14
15   # Oder...
16   use FindBin;
17   use local::lib "$FindBin::Bin/../support";  # Applikationsspezifische Sammlung von Modulen
18
19 Von der Shell -
20
21   # Installiert LWP und alle notwendigen Abhängigkeiten in das '~/perl5' Verzeichnis
22   perl -MCPAN -Mlocal::lib -e 'CPAN::install(LWP)'
23
24   # Gibt die Shell Kommandos aus um die Umgebung vorzubereiten
25   $ perl -Mlocal::lib
26   export MODULEBUILDRC=/home/username/perl/.modulebuildrc
27   export PERL_MM_OPT='INSTALL_BASE=/home/username/perl'
28   export PERL5LIB='/home/username/perl/lib/perl5:/home/username/perl/lib/perl5/i386-linux'
29   export PATH="/home/username/perl/bin:$PATH"
30
31 =head2 Die Bootstrapping Methode
32
33 Ein typischer Weg um local::lib zu benutzen ist die sogenannte "Bootstrapping" Methode.
34 Diese Methode wird benutzt wenn noch kein local::lib auf dem System installiert ist.
35 In diesem Fall kannst du einfach local::lib direkt in deinem Home-Verzeichnis installieren.
36
37 Selbst wenn du administrative Rechte hast, ist es wichtig das die Umgebungsvariablen von
38 Schritt 4 in deinem Shell Startup Skript gesetzt werden. Ohne diesen Schritt werden die
39 Module von CPAN weiterhin im System installiert und auch Perl Skripte die du startest
40 würden das von local::lib erstellte lib/ Verzeichnis nicht nutzen.
41
42 Windows Benutzern müssen ausserdem dies hier lesen: 
43 L</Unterschiede bei Benutzung dieses Module mit Win32>.
44
45 1. Lade das Tar-Archiv von CPAN runter (Suche nach "Download" auf der CPAN Seite von
46 local::lib) und entpacke es in einem beliebigem Verzeichnis. Um das obige Problem zu
47 vermeiden, sollte man dies als normaler User tun und nicht als root oder Administrator.
48
49 2. Starte in dem entstandenen Verzeichnis folgenden Befehl:
50
51   perl Makefile.PL --bootstrap
52
53 Wenn das System dir vorschlägt gewisse Dinge eigenständig zu konfigurieren ist es in
54 fast allen Fällen vollkommen in Ordnung einfach "yes" zu antworten.
55
56 Falls du local::lib nicht in das Standard Verzeichnis installieren willst, musst du
57 dieses Verzeichnis als Parameter angeben:
58
59   perl Makefile.PL --bootstrap=~/foo
60
61 3. Danach folgenden Befehl starten: (local::lib erwartet make auf dem System)
62
63   make test && make install
64
65 4. Nun müssen wir die benötigten Umgebungsvariablen, damit Perl unser neu generiertes
66 lib/ Verzeichnis benutzt. Wenn du bash oder eine andere Bourne Shell benutzt, kannst 
67 du es über diesen Weg zu deinem Shell Startup Skript hinzufügen:
68
69   echo 'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)' >>~/.bashrc
70
71 Wenn du C Shell benutzt, du kannst das gleiche hiermit erreichen:
72
73   /bin/csh
74   echo $SHELL
75   /bin/csh
76   perl -I$HOME/perl5/lib/perl5 -Mlocal::lib >> ~/.cshrc
77
78 Wenn du beim bootstrappen ein anderes Verzeichnis benutzt als das Standardverzeichnis,
79 dann musst du dieses Verzeichnis als Parameter beim Laden des Modules local::lib angeben:
80
81   echo 'eval $(perl -I$HOME/foo/lib/perl5 -Mlocal::lib=$HOME/foo)' >>~/.bashrc
82
83 Nachdem diese Änderungen in deinem Shell Startup Skript gemacht wurden, ist es nun wichtig
84 das diese Umgebungsvariablen auch gesetzt sind in deiner aktuellen Umgebung. In Bourne
85 Shells macht man dies z.B. mit C<. ~/.bashrc>, und in C Shell würde man es mit: 
86 C<source ~/.cshrc> mit.
87
88 Wenn du eine sehr langsames System hast, oder du unter drakonischen Regulierungen des
89 Plattenplatz leben musst, kann man die automatische Generierung der manpages vom POD
90 bei der Installation des Moduls deaktivieren beim bootstrapping mit dem C<--no-manpages>
91 Parameter:
92
93   perl Makefile.PL --bootstrap --no-manpages
94
95 Um zu vermeiden das man mehrere bootstraps macht um z.B. für verschiedene Applikationen
96 eigene local::lib Installationen zu nutzen, kann man eine dieser Umgebungen benutzen
97 um einfach in beliebigen anderen Verzeichnis Module zu installieren und somit weitere
98 eigenständige lib/ Umgebungen zu bekommen:
99
100   cd ~/mydir1
101   perl -Mlocal::lib=./
102   eval $(perl -Mlocal::lib=./)  ### Um die Umgebungsvariablen für die
103                                 ### aktuelle Shell zusetzen
104
105   printenv                      ### Hier kannst du sehen das ~/mydir1
106                                 ### in der PERL5LIB Umgebungsvariable
107                                                                 ### steht
108
109   perl -MCPAN -e install ...    ### welche Module auch immer ...
110   cd ../mydir2
111
112   ... WIEDERHOLEN ...
113
114 Für mehrere Umgebungen in dieser Form brauch man eine Modifikation in der
115 Benutzung von C<< use FindBin >> in dem "Im Code" Beispiel oben.
116 Wenn du sowas machst, und du hast damit z.B. Perl Module nach C<<
117 ~/mydir1/lib >> installiert und du hast ein Script in C<< 
118 ~/mydir1/scripts/myscript.pl >>, du musst dort angeben das die Module
119 die es braucht im Verzeichnis C<< ~/mydir1/lib >> liegen.
120
121 In C<< ~/mydir1/scripts/myscript.pl >> steht dann:
122
123   use strict;
124   use warnings;
125   use local::lib "$FindBin::Bin/..";  ### zeigt auf ~/mydir1 und local::lib 
126                                       ### findet dort lib
127   use lib "$FindBin::Bin/../lib";     ### zeigt auf ~/mydir1/lib
128
129 Setze das vor jeden BEGIN { ... } Block der die Module braucht die du
130 installiert hast.
131
132 =head2 Unterschiede bei Benutzung dieses Module mit Win32
133
134 Um die nötigen Umgebungsvariablen für diese Variablen in der derzeitigen
135 Sitzung mit C<CMD.EXE> zu setzen, kann man folgendes kommando nutzen:
136
137   C:\>perl -Mlocal::lib
138   set MODULEBUILDRC=C:\DOCUME~1\ADMINI~1\perl5\.modulebuildrc
139   set PERL_MM_OPT=INSTALL_BASE=C:\DOCUME~1\ADMINI~1\perl5
140   set PERL5LIB=C:\DOCUME~1\ADMINI~1\perl5\lib\perl5;C:\DOCUME~1\ADMINI~1\perl5\lib\perl5\MSWin32-x86-multi-thread
141   set PATH=C:\DOCUME~1\ADMINI~1\perl5\bin;%PATH%
142   
143   ### Um die Umgebungsvariablen für diese Shell alleine zu setzen
144   C:\>perl -Mlocal::lib > %TEMP%\tmp.bat && %TEMP%\tmp.bat && del %TEMP%\temp.bat
145   ### anstelle von $(perl -Mlocal::lib=./) in bash.
146
147 Wenn du willst das die Umgebungsvariablen dauerhaft gesetzt sind, musst du diese
148 in Systemsteuerung / System dauerhaft selber eintragen oder 
149 L<App::local::lib::Win32Helper> benutzen.
150
151 Die "~" wird übersetzt zu dem Benutzer Profil Verzeichnis (das Verzeichnis was
152 beim User als "Dokumente und Einstellungen" bekannt ist unter Windows XP und
153 vorher oder das "Benutzer" Verzeichnis bei Windows Vista und später, solange
154 $ENV{HOME} nicht gesetzt ist. Das Verzeichnis wird hierbei zu dem korrekten
155 Kurznamen umgewandelt, und muss daher definitiv existieren, und wird um die
156 nötigen Unterverzeichnise erweitert.
157
158 =head1 GRUNDPRINZIP
159
160 Die Version von den Perl Paketen die man benötigt für spezifische Aufgaben sind
161 sehr häufig nicht die richtigen oder korrekten Versionen auf dem System
162 vorinstalliert. Ein Updaten von diesen Modulen ist in vielen Fällen einfach
163 nicht möglich weil die nötigen Rechte fehlen. Ausserdem ist es generell nicht
164 gut eigenständig die Versionen der Module auf dem System auszutauschen, weil
165 natürlich der Rest des Systems genau die Version erwartet die von der
166 Systemverwaltung auch installiert wurde.
167
168 local::lib löst dieses Problem, es erlaubt dir dein komplett eigenes Verzeichnis
169 für deine CPAN Module zu haben und bist so nicht genötigt die Module vom
170 System zu nutzen oder andersrum andere User nicht mit individuellen 
171 Modulwünschen zu Überarbeitung ihres Codes zu zwingen, weil bestimmte Module
172 zentral für alle auf neuere Version upgedatet werden. Die Installation findet
173 hierbei dann z.B. im Home Verzeichnis statt. Es werden nur Umgebungsvariablen
174 gesetzt die das installierte Perl dazu bewegen die im Homeverzeichnis 
175 installierten Module zu benutzen, zusätzlich und vorgezogen zu denen auf dem
176 System.
177
178 Daher muss man sich wenn man ein Paket System benutzt, wie z.b. Debian, garnicht
179 mehr Sorgen machen, irgendwas auf dem System zu verletzten nur durch die
180 Installation von Perl Modulen.
181
182 =head1 BESCHREIBUNG
183
184 Dieses Modul bietet eine schnelle und legitime Art und Weise ein sogenanntes
185 bootstrapping zu machen um in einem User Homeverzeichnis eine Sammlung von
186 Modulen zu installieren. Es erstellt auch die nötigen Umgebungsvariablen
187 die benötigt werden um diese Module zu nutzen, passend zu der Shell die der
188 User in der Umgebungsvariable C<SHELL> angegeben hat, um dann direkt passend
189 in die entsprechenden Konfigurationsdateien der Shell einfügt zu werden.
190
191 Weitergehend ist local::lib in der Lage Module zu nutzen die nicht im
192 standardmäßigen C<@INC> Pfad von Perl enthalten sind. Das macht es einfacher
193 für bestimmte Applikationen ein bestimmtes Set von Modulen zu installieren
194 ohne die anderen Module auf dem System in irgendeiner Art anzufassen.
195 Damit es z.B. auch sicherer Module zu installieren die vom Maintainer noch
196 nicht als Release verfügbar sind.
197
198 Beim Import setzt local::lib die folgenden Umgebungsvariablen zu den
199 nötigen Werten:
200
201 =over 4
202
203 =item MODULEBUILDRC
204
205 =item PERL_MM_OPT
206
207 =item PERL5LIB
208
209 =item PATH
210
211 Am PATH wird natürlich angehangen, und nicht ersetzt.
212
213 =back
214
215 Diese Werte sind dann verfügbar für jeden Code der danach importiert wurde.
216
217 =head1 CREATING A SELF-CONTAINED SET OF MODULES
218
219 C<Übersetzung fehlt...>
220
221 =head1 METHODS
222
223 C<Übersetzung fehlt...>
224
225 =head1 A WARNING ABOUT UNINST=1
226
227 Wenn man local::lib in Kombination mit "make install UNINST=1" benutzt, muss
228 man vorsichtig sein über die Tatsache das der Prozess über die Neuinstallation
229 eine nicht ausreichende Sicherheit hat bezüglich wo er nun installieren muss.
230 Hierdurch mann es passieren das beim deinstallieren eines Modul u.U. das
231 globale Modul deinstalliert wird (wenn die Rechte vorhanden sind) aber die
232 neue Version nur in der lokalen Version installiert ist. Es ist hier also sehr
233 wichtig das man "make install UNINST=1" und local::lib nur gleichzeitig
234 benutzt wenn man sehr sicher darüber ist welche Konsequenzen einem
235 entgegenkommen.
236
237 =head1 EINSCHRÄNKUNGEN
238
239 Die Shell Erkennung ist sehr primitiv. Derzeit ist es so das alles was "csh"
240 im Namen hat auch als C Shell eingeordnet wird, und alles andere wird als
241 Bourne Shell betrachet, ausser auf Win32 Systemen. Wenn die C<SHELL> Variable
242 nicht gesetzt ist, eine Bourne Shell wird angenommen.
243
244 Bootstrap ist leider ein Hack, und wird auf jedenfall CPAN.pm benutzen für
245 ExtUtils::MakeMaker, auch wenn CPANPLUS installiert ist.
246
247 Es setzt definitiv PERL5LIB, PERL_MM_OPT und MODULEBUILDRC neu und vernichtet
248 jeden Wert der vorher gesetzt war.
249
250 Es sollte vielleicht eine automatische Korrektur der CPAN Config machen, wenn
251 das nicht schon gemacht wurde.
252
253 "Patches Welcome" - Patches sind immer willkommen beim Autor oder den anderen
254 Mitwirkenden.
255
256 Auf Win32 Systemen werden die Umgebungsvariablen nicht direkt in die Registrierung
257 geschrieben damit sie auch nach dem Neustarten erhalten bleiben.
258
259 =head1 FEHLERANALYSE
260
261 Wenn du local::lib konfiguriert hast CPAN Module in deinem Home Verzeichnis
262 zu installieren, und du danach versuchst mit C<cpan -i Foo::Bar> ein Modul
263 zu installieren, und dabei einen Fehler bekommst, wie: C<Warning: You do not 
264 have permissions to install into /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux at
265 /usr/lib64/perl5/5.8.8/Foo/Bar.pm> und in der installationsausgabe steht
266 irgendwo ein Fehler der sagt C<'INSTALL_BASE' is not a known MakeMaker parameter 
267 name>, dann hast du aus irgendeinem Grund dein neue Version von ExtUtils::MakeMaker
268 verloren.
269
270 Um dies zu korrigieren, einfach nochmal die bootstrapping Methode laufen lassen,
271 wie oben beschrieben.
272
273 Dann starte C<rm -r ~/.cpan/build/Foo-Bar*>
274
275 Abschliessend dann nochmal mit C<cpan -i Foo::Bar> installieren und die Probleme
276 sollten verschwunden sein.
277
278 =head1 UMGEBUNGSVARIABLEN
279
280 =over 4
281
282 =item SHELL
283
284 =item COMSPEC
285
286 local::lib schaut in die C<SHELL> Umgebungsvariable um die korrekten Kommandos
287 zu der Shell Konfiguration hinzuzufügen.
288
289 Auf Win32 Systemen, C<COMSPEC> wird auch analysiert.
290
291 =back
292
293 =head1 SUPPORT
294
295 IRC:
296
297     Wir sind im Channel #local-lib auf dem Server irc.perl.org.
298
299 =head1 AUTOR DER ÜBERSETZUNG
300
301 Torsten Raudssus <torsten@raudssus.de> http://www.raudssus.de/
302
303 =head1 URHEBERRECHT
304
305 Copyright (c) 2007 - 2010 von den local::lib L</AUTHOR> und L</CONTRIBUTORS>
306 aufgelistet in L<local::lib|local::lib>.
307
308 =head1 LIZENZ
309
310 Diese Sammlung ist freie Software und kann unter der selben Lizenz verbreitet
311 werden wie Perl selber.
312
313 =cut
314
315 1;