ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Urlader/Urlader.pm
(Generate patch)

Comparing Urlader/Urlader.pm (file contents):
Revision 1.5 by root, Sun Jan 8 09:12:52 2012 UTC vs.
Revision 1.11 by root, Sun Jun 17 13:11:25 2012 UTC

196package Urlader; 196package Urlader;
197 197
198use common::sense; 198use common::sense;
199 199
200BEGIN { 200BEGIN {
201 our $VERSION = '0.2'; 201 our $VERSION = '1.01';
202 202
203 use XSLoader; 203 use XSLoader;
204 XSLoader::load __PACKAGE__, $VERSION; 204 XSLoader::load __PACKAGE__, $VERSION;
205} 205}
206 206
254will be created if necessary). If C<$exclusive> is true, then it tries to 254will be created if necessary). If C<$exclusive> is true, then it tries to
255acquire an exclusive lock, otherwise the lock will be shared. If C<$wait> 255acquire an exclusive lock, otherwise the lock will be shared. If C<$wait>
256is true, then it will wait until the lock can be acquired, otherwise it 256is true, then it will wait until the lock can be acquired, otherwise it
257only attempts to acquire it and returns immediately if it can't. 257only attempts to acquire it and returns immediately if it can't.
258 258
259If successful it returns a lock object - the lock will be given up 259If successful it returns a lock object - the lock will be given up when
260when the lock object is destroyed. 260the lock object is destroyed or when the process exits (even on a crash)
261and has a good chance of working on network drives as well.
261 262
262If the lock could not be acquired, C<undef> is returned. 263If the lock could not be acquired, C<undef> is returned.
263 264
264This function will probably go awway in the future, but is provided to 265This function is provided to assist applications that want to clean up old
265assist applications that want to clean up old versions, see "TIPS AND 266versions, see "TIPS AND TRICKS", below.
266TRICKS", below.
267 267
268=cut 268=cut
269 269
2701; 2701;
271 271
275 275
276=over 4 276=over 4
277 277
278=item Gathering files 278=item Gathering files
279 279
280Gathering all the files needed for distribution cna be a big 280Gathering all the files needed for distribution can be a big
281problem. Right now, Urlader does not assist you in this task in any way, 281problem. Right now, Urlader does not assist you in this task in any way,
282however, just like perl source stripping, it is planned to unbundle the 282however, just like perl source stripping, it is planned to unbundle the
283relevant technology from B<staticperl> (L<http://staticperl.plan9.de>) for 283relevant technology from B<staticperl> (L<http://staticperl.plan9.de>) for
284use with this module. 284use with this module.
285 285
346 346
347These can be found at 347These can be found at
348L<http://cvs.schmorp.de/deliantra/Deliantra-Client/util/>, but looking at 348L<http://cvs.schmorp.de/deliantra/Deliantra-Client/util/>, but looking at
349them can lead to premature blindless. 349them can lead to premature blindless.
350 350
351=item Shared Libraries
352
353It is often desirable to package shared libraries - for example the
354Deliantra client packages SD>, Berkely DB, Pango and amny other libraries
355that are unlikely to be available on the target system.
356
357This usually requires some fiddling (see below), and additionally some
358environment variables to be set.
359
360For example, on ELF systems you usually want F<LD_LIBRARY_PATH=.> and on
361OS X, you want F<DYLD_LIBRARY_PATH=.> (these are effectively the default
362on windows).
363
364These can most easily be specified when building the packfile:
365
366 urlader-util ... LD_LIBRARY_PATH=. ./perl run
367
368=item Portability: RPATH
369
370Often F<perl> is linked against a shared F<libperl.so> - and might be so
371using an rpath. Perl extensikns likewise might use an rpath, which means
372the binary will mostly ignore LD_LIBRARY_PATH, which leads to trouble.
373
374There is an utility called F<chrpath>, whose F<-d> option can remove the
375rpath from binaries, shared library and shared objects.
376
377=item Portability: OS X DLL HELL
378
379OS X has the most severe form of DLL hell I have seen - if you link
380against system libraries, which is practically unavoidable, you get
381libraries of well-known names (e.g. libjpeg) that have nothing to do with
382what you normally expect libjpeg to be, and there is no way to get your
383version of libjpeg into your program.
384
385Moreover, even if apple ships well-known libraries (e.g. libiconv), they
386often ship patched versions which have a different ABI or even API then
387the real releases.
388
389The only way aorund this I found was to change all library names
390in my releases (libjpeg.dylib becomes libdeliantra-jpeg.dylin and
391so on), by patching the paths in the share dlibraries and shared
392objects. F<install-name-tool> (with F<-id> and F<-change>) works in many
393cases, but often paths are embedded indirectly, so you might have to use a
394I<dirty> string replacement.
395
351=back 396=back
397
398=head1 SECURITY CONSIDERATIONS
399
400The urlader executable itself does not support setuig/setgid operation, or
401running with elevated privileges - it does no input sanitisation, and is
402trivially exploitable.
352 403
353=head1 AUTHOR 404=head1 AUTHOR
354 405
355 Marc Lehmann <schmorp@schmorp.de> 406 Marc Lehmann <schmorp@schmorp.de>
356 http://home.schmorp.de/ 407 http://home.schmorp.de/

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines