… | |
… | |
39 | file that contains perl interpreter, libc, all the modules you need, all |
39 | file that contains perl interpreter, libc, all the modules you need, all |
40 | the libraries you need and of course your actual program. |
40 | the libraries you need and of course your actual program. |
41 | |
41 | |
42 | With F<uClibc> and F<upx> on x86, you can create a single 500kb binary |
42 | With F<uClibc> and F<upx> on x86, you can create a single 500kb binary |
43 | that contains perl and 100 modules such as POSIX, AnyEvent, EV, IO::AIO, |
43 | that contains perl and 100 modules such as POSIX, AnyEvent, EV, IO::AIO, |
44 | Coro and so on. Or any other choice of modules. |
44 | Coro and so on. Or any other choice of modules (and some other size :). |
45 | |
45 | |
46 | To see how this turns out, you can try out smallperl and bigperl, two |
46 | To see how this turns out, you can try out smallperl and bigperl, two |
47 | pre-built static and compressed perl binaries with many and even more |
47 | pre-built static and compressed perl binaries with many and even more |
48 | modules: just follow the links at L<http://staticperl.schmorp.de/>. |
48 | modules: just follow the links at L<http://staticperl.schmorp.de/>. |
49 | |
49 | |
… | |
… | |
882 | =item C<STATICPERL> |
882 | =item C<STATICPERL> |
883 | |
883 | |
884 | The directory where staticperl stores all its files |
884 | The directory where staticperl stores all its files |
885 | (default: F<~/.staticperl>). |
885 | (default: F<~/.staticperl>). |
886 | |
886 | |
887 | =item C<PERL_MM_USE_DEFAULT>, C<EV_EXTRA_DEFS>, ... |
887 | =item C<DLCACHE> |
888 | |
888 | |
889 | Usually set to C<1> to make modules "less inquisitive" during their |
889 | The path to a directory (will be created if it doesn't exist) where |
890 | installation, you can set any environment variable you want - some modules |
890 | downloaded perl sources are being cached, to avoid downloading them |
891 | (such as L<Coro> or L<EV>) use environment variables for further tweaking. |
891 | again. The default is empty, which means there is no cache. |
892 | |
892 | |
893 | =item C<PERL_VERSION> |
893 | =item C<PERL_VERSION> |
894 | |
894 | |
895 | The perl version to install - default is currently C<5.12.3>, but C<5.8.9> |
895 | The perl version to install - default is currently C<5.12.3>, but C<5.8.9> |
896 | is also a good choice (5.8.9 is much smaller than 5.12.3, while 5.10.1 is |
896 | is also a good choice (5.8.9 is much smaller than 5.12.3, while 5.10.1 is |
897 | about as big as 5.12.3). |
897 | about as big as 5.12.3). |
|
|
898 | |
|
|
899 | =item C<PERL_MM_USE_DEFAULT>, C<EV_EXTRA_DEFS>, ... |
|
|
900 | |
|
|
901 | Usually set to C<1> to make modules "less inquisitive" during their |
|
|
902 | installation. You can set (and export!) any environment variable you want |
|
|
903 | - some modules (such as L<Coro> or L<EV>) use environment variables for |
|
|
904 | further tweaking. |
898 | |
905 | |
899 | =item C<PERL_PREFIX> |
906 | =item C<PERL_PREFIX> |
900 | |
907 | |
901 | The prefix where perl gets installed (default: F<$STATICPERL/perl>), |
908 | The prefix where perl gets installed (default: F<$STATICPERL/perl>), |
902 | i.e. where the F<bin> and F<lib> subdirectories will end up. |
909 | i.e. where the F<bin> and F<lib> subdirectories will end up. |
… | |
… | |
1155 | good experiences with GCC 4.4.x but not GCC 4.5. |
1162 | good experiences with GCC 4.4.x but not GCC 4.5. |
1156 | |
1163 | |
1157 | To minimise code size, I used C<-pipe -ffunction-sections -fdata-sections |
1164 | To minimise code size, I used C<-pipe -ffunction-sections -fdata-sections |
1158 | -finline-limit=8 -fno-builtin-strlen -mtune=i386>. The C<-mtune=i386> |
1165 | -finline-limit=8 -fno-builtin-strlen -mtune=i386>. The C<-mtune=i386> |
1159 | doesn't decrease codesize much, but it makes the file much more |
1166 | doesn't decrease codesize much, but it makes the file much more |
1160 | compressible. |
1167 | compressible (and the execution a lot slower...). |
1161 | |
1168 | |
1162 | If you don't need Coro or threads, you can go with "linuxthreads.old" (or |
1169 | If you don't need Coro or threads, you can go with "linuxthreads.old" (or |
1163 | no thread support). For Coro, it is highly recommended to switch to a |
1170 | no thread support). For Coro, it is highly recommended to switch to a |
1164 | uClibc newer than 0.9.31 (at the time of this writing, I used the 20101201 |
1171 | uClibc newer than 0.9.31 (at the time of this writing, I used the 20101201 |
1165 | snapshot) and enable NPTL, otherwise Coro needs to be configured with the |
1172 | snapshot) and enable NPTL, otherwise Coro needs to be configured with the |
… | |
… | |
1167 | twice the address space needed for stacks). |
1174 | twice the address space needed for stacks). |
1168 | |
1175 | |
1169 | If you use C<linuxthreads.old>, then you should also be aware that |
1176 | If you use C<linuxthreads.old>, then you should also be aware that |
1170 | uClibc shares C<errno> between all threads when statically linking. See |
1177 | uClibc shares C<errno> between all threads when statically linking. See |
1171 | L<http://lists.uclibc.org/pipermail/uclibc/2010-June/044157.html> for a |
1178 | L<http://lists.uclibc.org/pipermail/uclibc/2010-June/044157.html> for a |
1172 | workaround (And L<https://bugs.uclibc.org/2089> for discussion). |
1179 | workaround (and L<https://bugs.uclibc.org/2089> for discussion). |
1173 | |
1180 | |
1174 | C<ccache> support is also recommended, especially if you want |
1181 | C<ccache> support is also recommended, especially if you want |
1175 | to play around with buildroot options. Enabling the C<miniperl> |
1182 | to play around with buildroot options. Enabling the C<miniperl> |
1176 | package will probably enable all options required for a successful |
1183 | package will probably enable all options required for a successful |
1177 | perl build. F<staticperl> itself additionally needs either C<wget> |
1184 | perl build. F<staticperl> itself additionally needs either C<wget> |
… | |
… | |
1185 | it from working properly in a chroot - either use dash (and link it to |
1192 | it from working properly in a chroot - either use dash (and link it to |
1186 | F</bin/sh> inside the chroot) or link busybox to F</bin/sh>, using it's |
1193 | F</bin/sh> inside the chroot) or link busybox to F</bin/sh>, using it's |
1187 | built-in ash shell. |
1194 | built-in ash shell. |
1188 | |
1195 | |
1189 | Finally, you need F</dev/null> inside the chroot for many scripts to work |
1196 | Finally, you need F</dev/null> inside the chroot for many scripts to work |
1190 | - F<cp /dev/null output/target/dev> or bind-mounting your F</dev> will |
1197 | - either F<cp /dev/null output/target/dev> or bind-mounting your F</dev> |
1191 | both provide this. |
1198 | will provide this. |
1192 | |
1199 | |
1193 | After you have compiled and set up your buildroot target, you can copy |
1200 | After you have compiled and set up your buildroot target, you can copy |
1194 | F<staticperl> from the C<App::Staticperl> distribution or from your |
1201 | F<staticperl> from the C<App::Staticperl> distribution or from your |
1195 | perl f<bin> directory (if you installed it) into the F<output/target> |
1202 | perl F<bin> directory (if you installed it) into the F<output/target> |
1196 | filesystem, chroot inside and run it. |
1203 | filesystem, chroot inside and run it. |
1197 | |
1204 | |
1198 | =head1 RECIPES / SPECIFIC MODULES |
1205 | =head1 RECIPES / SPECIFIC MODULES |
1199 | |
1206 | |
1200 | This section contains some common(?) recipes and information about |
1207 | This section contains some common(?) recipes and information about |