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