ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/App-Staticperl/staticperl.pod
(Generate patch)

Comparing App-Staticperl/staticperl.pod (file contents):
Revision 1.9 by root, Tue Dec 7 09:08:06 2010 UTC vs.
Revision 1.16 by root, Wed Dec 8 23:03:21 2010 UTC

14 staticperl cpan # invoke CPAN shell 14 staticperl cpan # invoke CPAN shell
15 staticperl instmod path... # install unpacked modules 15 staticperl instmod path... # install unpacked modules
16 staticperl instcpan modulename... # install modules from CPAN 16 staticperl instcpan modulename... # install modules from CPAN
17 staticperl mkbundle <bundle-args...> # see documentation 17 staticperl mkbundle <bundle-args...> # see documentation
18 staticperl mkperl <bundle-args...> # see documentation 18 staticperl mkperl <bundle-args...> # see documentation
19 staticperl mkapp appname <bundle-args...> # see documentation
19 20
20Typical Examples: 21Typical Examples:
21 22
22 staticperl install # fetch, configure, build and install perl 23 staticperl install # fetch, configure, build and install perl
23 staticperl cpan # run interactive cpan shell 24 staticperl cpan # run interactive cpan shell
24 staticperl mkperl -M '"Config_heavy.pl"' # build a perl that supports -V 25 staticperl mkperl -M '"Config_heavy.pl"' # build a perl that supports -V
25 staticperl mkperl -MAnyEvent::Impl::Perl -MAnyEvent::HTTPD -MURI -MURI::http 26 staticperl mkperl -MAnyEvent::Impl::Perl -MAnyEvent::HTTPD -MURI -MURI::http
26 # build a perl with the above modules linked in 27 # build a perl with the above modules linked in
28 staticperl mkapp myapp --boot mainprog mymodules
29 # build a binary "myapp" from mainprog and mymodules
27 30
28=head1 DESCRIPTION 31=head1 DESCRIPTION
29 32
30This script helps you creating single-file perl interpreters, or embedding 33This script helps you to create single-file perl interpreters
31a perl interpreter in your applications. Single-file means that it is 34or applications, or embedding a perl interpreter in your
32fully self-contained - no separate shared objects, no autoload fragments, 35applications. Single-file means that it is fully self-contained - no
33no .pm or .pl files are needed. And when linking statically, you can 36separate shared objects, no autoload fragments, no .pm or .pl files are
34create (or embed) a single file that contains perl interpreter, libc, all 37needed. And when linking statically, you can create (or embed) a single
35the modules you need and all the libraries you need. 38file that contains perl interpreter, libc, all the modules you need, all
39the libraries you need and of course your actual program.
36 40
37With F<uClibc> and F<upx> on x86, you can create a single 500kb binary 41With F<uClibc> and F<upx> on x86, you can create a single 500kb binary
38that contains perl and 100 modules such as POSIX, AnyEvent, EV, IO::AIO, 42that contains perl and 100 modules such as POSIX, AnyEvent, EV, IO::AIO,
39Coro and so on. Or any other choice of modules. 43Coro and so on. Or any other choice of modules.
40 44
81Maintaining your own custom perl build can be a pain in the ass, and while 85Maintaining your own custom perl build can be a pain in the ass, and while
82F<staticperl> tries to make this easy, it still requires a custom perl 86F<staticperl> tries to make this easy, it still requires a custom perl
83build and possibly fiddling with some modules. PAR is likely to produce 87build and possibly fiddling with some modules. PAR is likely to produce
84results faster. 88results faster.
85 89
90Ok, PAR never has worked for me out of the box, and for some people,
91F<staticperl> does work out of the box, as they don't count "fiddling with
92module use lists" against it, but nevertheless, F<staticperl> is certainly
93a bit more difficult to use.
94
86=back 95=back
87 96
88=head1 HOW DOES IT WORK? 97=head1 HOW DOES IT WORK?
89 98
90Simple: F<staticperl> downloads, compile and installs a perl version of 99Simple: F<staticperl> downloads, compile and installs a perl version of
184command by specifying all the directories with modules in them that you 193command by specifying all the directories with modules in them that you
185want to have built. 194want to have built.
186 195
187=item F<staticperl clean> 196=item F<staticperl clean>
188 197
189Runs F<make distclean> in the perl source directory (and potentially 198Deletes the perl source directory (and potentially cleans up other
190cleans up other intermediate files). This can be used to clean up 199intermediate files). This can be used to clean up files only needed for
191intermediate files without removing the installed perl interpreter. 200building perl, without removing the installed perl interpreter, or to
201force a re-build from scratch.
202
203At the moment, it doesn't delete downloaded tarballs.
192 204
193=item F<staticperl distclean> 205=item F<staticperl distclean>
194 206
195This wipes your complete F<~/.staticperl> directory. Be careful with this, 207This wipes your complete F<~/.staticperl> directory. Be careful with this,
196it nukes your perl download, perl sources, perl distribution and any 208it nukes your perl download, perl sources, perl distribution and any
236(required by L<AnyEvent::HTTPD>) implements various URI schemes as extra 248(required by L<AnyEvent::HTTPD>) implements various URI schemes as extra
237modules - since L<AnyEvent::HTTPD> only needs C<http> URIs, we only need 249modules - since L<AnyEvent::HTTPD> only needs C<http> URIs, we only need
238to include that module. I found out about these dependencies by carefully 250to include that module. I found out about these dependencies by carefully
239watching any error messages about missing modules... 251watching any error messages about missing modules...
240 252
253Instead of building a new perl binary, you can also build a standalone
254application:
255
256 # build the app
257 staticperl mkapp app --boot eg/httpd \
258 -MAnyEvent::Impl::Perl -MAnyEvent::HTTPD -MURI::http
259
260 # run it
261 ./app
262
241=head3 OPTION PROCESSING 263=head3 OPTION PROCESSING
242 264
243All options can be given as arguments on the command line (typically 265All options can be given as arguments on the command line (typically
244using long (e.g. C<--verbose>) or short option (e.g. C<-v>) style). Since 266using long (e.g. C<--verbose>) or short option (e.g. C<-v>) style). Since
245specifying a lot of modules can make the command line very cumbersome, 267specifying a lot of modules can make the command line very cumbersome,
304C<mkperl> command (instead of C<mkbundle>): 326C<mkperl> command (instead of C<mkbundle>):
305 327
306 # build a new ./perl with only common::sense in it - very small :) 328 # build a new ./perl with only common::sense in it - very small :)
307 staticperl mkperl -Mcommon::sense 329 staticperl mkperl -Mcommon::sense
308 330
331=item --app name
332
333After writing out the bundle files, try to link a new standalone
334program. It will be called C<name>, and the bundle files get removed after
335linking it.
336
337The difference to the (mutually exclusive) C<--perl> option is that the
338binary created by this option will not try to act as a perl interpreter -
339instead it will simply initialise the perl interpreter, clean it up and
340exit.
341
342This switch is automatically used when F<staticperl> is invoked with the
343C<mkapp> command (instead of C<mkbundle>):
344
345To let it do something useful you I<must> add some boot code, e.g. with
346the C<--boot> option.
347
348Example: create a standalone perl binary that will execute F<appfile> when
349it is started.
350
351 staticperl mkbundle --app myexe --boot appfile
352
309=item --use module | -Mmodule 353=item --use module | -Mmodule
310 354
311Include the named module and all direct dependencies. This is done by 355Include the named module and all direct dependencies. This is done by
312C<require>'ing the module in a subprocess and tracing which other modules 356C<require>'ing the module in a subprocess and tracing which other modules
313and files it actually loads. If the module uses L<AutoLoader>, then all 357and files it actually loads. If the module uses L<AutoLoader>, then all
383 # specification file 427 # specification file
384 add file1 myfiles/file1 428 add file1 myfiles/file1
385 add file2 myfiles/file2 429 add file2 myfiles/file2
386 add file3 myfiles/file3 430 add file3 myfiles/file3
387 431
432=item --binadd "file" | --add "file alias"
433
434Just like C<--add>, except that it treats the file as binary and adds it
435without any processing.
436
437You should probably add a C</> prefix to avoid clashing with embedded
438perl files (whose paths do not start with C</>), and/or use a special
439directory, such as C</res/name>.
440
441You can later get a copy of these files by calling C<staticperl::find
442"alias">.
443
388=item --static 444=item --static
389 445
390When C<--perl> is also given, link statically instead of dynamically. The 446When C<--perl> is also given, link statically instead of dynamically. The
391default is to link the new perl interpreter fully dynamic (that means all 447default is to link the new perl interpreter fully dynamic (that means all
392perl modules are linked statically, but all external libraries are still 448perl modules are linked statically, but all external libraries are still
403Any other argument is interpreted as a bundle specification file, which 459Any other argument is interpreted as a bundle specification file, which
404supports most long options (without extra quoting), one option per line. 460supports most long options (without extra quoting), one option per line.
405 461
406=back 462=back
407 463
408=head2 F<STATCPERL> CONFIGURATION AND HOOKS 464=head2 F<STATICPERL> CONFIGURATION AND HOOKS
409 465
410During (each) startup, F<staticperl> tries to source the following shell 466During (each) startup, F<staticperl> tries to source the following shell
411files in order: 467files in order:
412 468
413 /etc/staticperlrc 469 /etc/staticperlrc
429=item C<EMAIL> 485=item C<EMAIL>
430 486
431The e-mail address of the person who built this binary. Has no good 487The e-mail address of the person who built this binary. Has no good
432default, so should be specified by you. 488default, so should be specified by you.
433 489
490=item C<CPAN>
491
492The URL of the CPAN mirror to use (e.g. L<http://mirror.netcologne.de/cpan/>).
493
494=item C<EXTRA_MODULES>
495
496Additional modules installed during F<staticperl install>. Here you can
497set which modules you want have to installed from CPAN.
498
499Example: I really really need EV, AnyEvent, Coro and AnyEvent::AIO.
500
501 EXTRA_MODULES="EV AnyEvent Coro AnyEvent::AIO"
502
503Note that you can also use a C<postinstall> hook to achieve this, and
504more.
505
434=back 506=back
435 507
436=head4 Variables you might I<want> to override 508=head4 Variables you might I<want> to override
437 509
438=over 4 510=over 4
439 511
512=item C<STATICPERL>
513
514The directory where staticperl stores all its files
515(default: F<~/.staticperl>).
516
517=item C<PERL_MM_USE_DEFAULT>, C<EV_EXTRA_DEFS>, ...
518
519Usually set to C<1> to make modules "less inquisitive" during their
520installation, you can set any environment variable you want - some modules
521(such as L<Coro> or L<EV>) use environment variables for further tweaking.
522
440=item C<PERLVER> 523=item C<PERL_VERSION>
441 524
442The perl version to install - default is currently C<5.12.2>, but C<5.8.9> 525The perl version to install - default is currently C<5.12.2>, but C<5.8.9>
443is also a good choice (5.8.9 is much smaller than 5.12.2, while 5.10.1 is 526is also a good choice (5.8.9 is much smaller than 5.12.2, while 5.10.1 is
444about as big as 5.12.2). 527about as big as 5.12.2).
445 528
446=item C<CPAN>
447
448The URL of the CPAN mirror to use (e.g. L<http://mirror.netcologne.de/cpan/>).
449
450=item C<EXTRA_MODULES>
451
452Additional modules installed during F<staticperl install>. Here you can
453set which modules you want have to installed from CPAN.
454
455Example: I really really need EV, AnyEvent, Coro and IO::AIO.
456
457 EXTRA_MODULES="EV AnyEvent Coro IO::AIO"
458
459Note that you can also use a C<postinstall> hook to achieve this, and
460more.
461
462=item C<PERL_MM_USE_DEFAULT>, C<EV_EXTRA_DEFS>, ...
463
464Usually set to C<1> to make modules "less inquisitive" during their
465installation, you can set any environment variable you want - some modules
466(such as L<Coro> or L<EV>) use environment variables for further tweaking.
467
468=item C<STATICPERL>
469
470The directory where staticperl stores all its files
471(default: F<~/.staticperl>).
472
473=item C<PREFIX> 529=item C<PERL_PREFIX>
474 530
475The prefix where perl gets installed (default: F<$STATICPERL/perl>), 531The prefix where perl gets installed (default: F<$STATICPERL/perl>),
476i.e. where the F<bin> and F<lib> subdirectories will end up. 532i.e. where the F<bin> and F<lib> subdirectories will end up.
533
534=item C<PERL_CONFIGURE>
535
536Additional Configure options - these are simply passed to the perl
537Configure script. For example, if you wanted to enable dynamic loading,
538you could pass C<-Dusedl>. To enable ithreads (Why would you want that
539insanity? Don't! Use L<forks> instead!) you would pass C<-Duseithreads>
540and so on.
541
542More commonly, you would either activate 64 bit integer support
543(C<-Duse64bitint>), or disable large files support (-Uuselargefiles), to
544reduce filesize further.
477 545
478=item C<PERL_CPPFLAGS>, C<PERL_OPTIMIZE>, C<PERL_LDFLAGS>, C<PERL_LIBS> 546=item C<PERL_CPPFLAGS>, C<PERL_OPTIMIZE>, C<PERL_LDFLAGS>, C<PERL_LIBS>
479 547
480These flags are passed to perl's F<Configure> script, and are generally 548These flags are passed to perl's F<Configure> script, and are generally
481optimised for small size (at the cost of performance). Since they also 549optimised for small size (at the cost of performance). Since they also
518 instcpan Anyevent::AIO AnyEvent::HTTPD 586 instcpan Anyevent::AIO AnyEvent::HTTPD
519 } 587 }
520 588
521=over 4 589=over 4
522 590
591=item preconfigure
592
593Called just before running F<./Configur> in the perl source
594directory. Current working directory is the perl source directory.
595
596This can be used to set any C<PERL_xxx> variables, which might be costly
597to compute.
598
523=item postconfigure 599=item postconfigure
524 600
525Called after configuring, but before building perl. Current working 601Called after configuring, but before building perl. Current working
526directory is the perl source directory. 602directory is the perl source directory.
527 603
528Could be used to tailor/patch config.sh (followed by F<./Configure -S>) or 604Could be used to tailor/patch config.sh (followed by F<sh Configure -S>)
529do any other modifications. 605or do any other modifications.
530 606
531=item postbuild 607=item postbuild
532 608
533Called after building, but before installing perl. Current working 609Called after building, but before installing perl. Current working
534directory is the perl source directory. 610directory is the perl source directory.
654 730
655=back 731=back
656 732
657=head1 FULLY STATIC BINARIES - BUILDROOT 733=head1 FULLY STATIC BINARIES - BUILDROOT
658 734
659To make truly static (linux-) libraries, you might want to have a look at 735To make truly static (Linux-) libraries, you might want to have a look at
660buildroot (L<http://buildroot.uclibc.org/>). 736buildroot (L<http://buildroot.uclibc.org/>).
661 737
662Buildroot is primarily meant to set up a cross-compile environment (which 738Buildroot is primarily meant to set up a cross-compile environment (which
663is not so useful as perl doesn't quite like cross compiles), but it can also compile 739is not so useful as perl doesn't quite like cross compiles), but it can also compile
664a chroot environment where you can use F<staticperl>. 740a chroot environment where you can use F<staticperl>.
678uClibc newer than 0.9.31 (at the time of this writing, I used the 20101201 754uClibc newer than 0.9.31 (at the time of this writing, I used the 20101201
679snapshot) and enable NPTL, otherwise Coro needs to be configured with the 755snapshot) and enable NPTL, otherwise Coro needs to be configured with the
680ultra-slow pthreads backend to work around linuxthreads bugs (it also uses 756ultra-slow pthreads backend to work around linuxthreads bugs (it also uses
681twice the address space needed for stacks). 757twice the address space needed for stacks).
682 758
759If you use C<linuxthreads.old>, then you should also be aware that
760uClibc shares C<errno> between all threads when statically linking. See
761L<http://lists.uclibc.org/pipermail/uclibc/2010-June/044157.html> for a
762workaround (And L<https://bugs.uclibc.org/2089> for discussion).
763
683C<ccache> support is also recommended, especially if you want to 764C<ccache> support is also recommended, especially if you want
684play around with buildroot options. Enabling the C<miniperl> package 765to play around with buildroot options. Enabling the C<miniperl>
685will probably enable all options required for a successful perl 766package will probably enable all options required for a successful
686build. F<staticperl> itself additionally needs either C<wget> or C<curl>. 767perl build. F<staticperl> itself additionally needs either C<wget>
768(recommended, for CPAN) or C<curl>.
687 769
688As for shells, busybox should provide all that is needed, but the default 770As for shells, busybox should provide all that is needed, but the default
689busybox configuration doesn't include F<comm> which is needed by perl - 771busybox configuration doesn't include F<comm> which is needed by perl -
690either make a custom busybox config, or compile coreutils. 772either make a custom busybox config, or compile coreutils.
691 773

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines