diff options
author | H.Merijn Brand <h.m.brand@xs4all.nl> | 2013-11-14 18:38:38 +0100 |
---|---|---|
committer | H.Merijn Brand <h.m.brand@xs4all.nl> | 2013-11-14 18:38:48 +0100 |
commit | 58534900c38f976129529850bd5168d61c39a495 (patch) | |
tree | ee529320c7b7701f5ac329cc27973a49d3384898 | |
parent | e1cf74e32f6b4013ae0a1886513affa2ad969883 (diff) | |
download | perl-58534900c38f976129529850bd5168d61c39a495.tar.gz |
Add Synology instructions
-rw-r--r-- | MANIFEST | 1 | ||||
-rw-r--r-- | README.synology | 262 | ||||
-rw-r--r-- | pod/.gitignore | 1 | ||||
-rw-r--r-- | pod/perl.pod | 1 | ||||
-rw-r--r-- | win32/Makefile | 5 | ||||
-rw-r--r-- | win32/makefile.mk | 5 |
6 files changed, 271 insertions, 4 deletions
@@ -4720,6 +4720,7 @@ README.qnx Perl notes for QNX README.riscos Perl notes for RISC OS README.solaris Perl notes for Solaris README.symbian Perl notes for Symbian +README.synology Perl notes for Synology README.tru64 Perl notes for Tru64 README.tw Perl for Traditional Chinese (in Big5) README.vms Notes about installing the VMS port diff --git a/README.synology b/README.synology new file mode 100644 index 0000000000..652f0f9d1b --- /dev/null +++ b/README.synology @@ -0,0 +1,262 @@ +If you read this file _as_is_, just ignore the funny characters you see. +It is written in the POD format (see pod/perlpod.pod) which is specially +designed to be readable as is. But if you have been into Perl you +probably already know this. + +=head1 NAME + +perlsynology - Perl 5 on Synology DSM systems + +=head1 DESCRIPTION + +Synology manufactures a vast number of Network Attached Storage (NAS) +devices that are very popular in large organisations as well as small +businesses and homes. + +The NAS systems are equipped with Synology Disk Storage Manager (DSM), +which is a trimmed-down Linux system enhanced with several tools for +managing the NAS. There are several flavours of hardware: Marvell +Armada (ARMv5te, ARMv7l), Intel Atom (i686, x86_64), Freescale QorIQ +(PPC), and more. For a full list see the +L<Synology FAQ|http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have>. + +Since it is based on Linux, the NAS can run many popular Linux +software packages, including Perl. In fact, Synology provides a +ready-to-install package for Perl, albeit version 5.8.6 which should +be considered very old. + +There is an active user community that provides many software packages +for the Synology DSM systems; at the time of writing this document +they provide Perl version 5.8.8. + +This document describes various features of Synology DSM operating +system that will affect how Perl 5 (hereafter just Perl) is +configured, compiled and/or runs. It has been compiled and verified by +Johan Vromans for the Synology DS413 (QorIQ), with feedback from +H.Merijn Brand (DS213, ARMv5te). + +=head2 Setting up the build environment + +As DSM is a trimmed-down Linux system, it lacks many of the tools and +libraries commonly found on Linux. The basic tools like sh, cp, rm, +etc. are implemented using +L<BusyBox|http://en.wikipedia.org/wiki/BusyBox>. + +=over 4 + +=item * + +Using your favourite browser open the DSM management page and start +the Package Center. + +=item * + +If you want to smoke test Perl, install C<Perl>. + +=item * + +In Settings, add the following Package Sources: + + http://www.cphub.net + http://packages.quadrat4.de + +=item * + +Still in Settings, in Channel Update, select Beta Channel. + +=item * + +Press Refresh. In the left panel the item "Community" will appear. +Click it. Select "Bootstrap Installer Beta" and install it. + +=item * + +Likewise, install "iPKGui Beta". + +The application window should now show an icon for iPKGui. + +=item * + +Start iPKGui. Install the packages C<make>, C<gcc> and C<coreutils>. + +If you want to smoke test Perl, install C<patch>. + +=back + +The next step is to add some symlinks to system libraries. For +example, the development software expect a library C<libm.so> that +normally is a symlink to C<libm.so.6>. Synology only provides the +latter and not the symlink. + +Here the actual architecture of the Synology system matters. You have +to find out where the gcc libraries have been installed. Look in /opt +for a directory similar to arm-none-linux-gnueab or +powerpc-linux-gnuspe. In the instructions below I'll use +powerpc-linux-gnuspe as an example. + +=over 4 + +=item * + +On the DSM management page start the Control Panel. + +=item * + +Click Terminal, and enable SSH service. + +=item * + +Close Terminal and the Control Panel. + +=item * + +Open a shell on the Synology using ssh and become root. + +=item * + +Execute the following commands: + + cd /lib + ln -s libm.so.6 libm.so + ln -s libcrypt.so.1 libcrypt.so + ln -s libdl.so.2 libdl.so + cd /opt/powerpc-linux-gnuspe/lib + ln -s /lib/libdl.so.2 libdl.so + +=back + +B<WARNING:> When you perform a system software upgrade, these links +will disappear and need to be re-established. + +=head2 Compiling Perl 5 + +When the build environment has been set up, building and testing Perl +is straightforward. The only thing you need to do is download the +sources as usual, and add a file Policy.sh as follows: + + # Administrivia. + perladmin="your.email@goes.here" + + # Install Perl in a tree in /opt/perl instead of /opt/bin. + prefix=/opt/perl + + # Select the compiler. Note that there is no 'cc' alias or link. + cc=gcc + + # Build flags. + ccflags="-DDEBUGGING" + + # Library and include paths. + libpth="/lib" + locincpth="/opt/include" + loclibpth="/lib" + +You may want to create the destination directory and give it the right +permissions before installing, thus eliminating the need to build Perl +as a super user. + +In the directory where you unpacked the sources, issue the familiar +commands: + + ./Configure -des + make + make test + make install + +=head2 Known problems + +=head3 Configure + +No known problems yet + +=head3 Build + +=over 4 + +=item Error message "No error definitions found". + +This error is generated when it is not possible to find the local +definitions for error codes, due to the uncommon structure of the +Synology file system. + +This error was fixed in the Perl development git for version 5.19, +commit 7a8f1212e5482613c8a5b0402528e3105b26ff24. + +=back + +=head3 Failing tests + +=over 4 + +=item C<ext/DynaLoader/t/DynaLoader.t> + +One subtest fails due to the uncommon structure of the Synology file +system. The file C</lib/glibc.so> is missing. + +B<WARNING:> Do not symlink C</lib/glibc.so.6> to C</lib/glibc.so> or +some system components will start to fail. + +=back + +=head2 Smoke testing Perl 5 + +If building completes successfully, you can set up smoke testing as +described in the Test::Smoke documentation. + +For smoke testing you need a running Perl. You can either install the +Synology supplied package for Perl 5.8.6, or build and install your +own, much more recent version. + +Note that I could not run successful smokes when initiated by the +Synology Task Scheduler. I resorted to initiating the smokes via a +cron job run on another system, using ssh: + + ssh nas1 wrk/Test-Smoke/smoke/smokecurrent.sh + +=head3 Local patches + +When local patches are applied with smoke testing, the test driver +will automatically request regeneration of certain tables after the +patches are applied. The Synology supplied Perl 5.8.6 (at least on the +DS413) B<is NOT capable> of generating these tables. It will generate +opcodes with bogus values, causing the build to fail. + +You can prevent regeneration by adding the setting + + 'flags' => 0, + +to the smoke config, or by adding another patch that inserts + + exit 0 if $] == 5.008006; + +in the beginning of the C<regen.pl> program. + +=head2 Adding libraries + +The above procedure describes a basic environment and hence results in +a basic Perl. If you want to add additional libraries to Perl, you may +need some extra settings. + +For example, the basic Perl does not have any of the DB libraries (db, +dbm, ndbm, gdsm). You can add these using iPKGui, however, you need to +set environment variable LD_LIBRARY_PATH to the appropriate value: + + LD_LIBRARY_PATH=/lib:/opt/lib + export LD_LIBRARY_PATH + +This setting needs to be in effect while Perl is built, but also when +the programs are run. + +=head1 REVISION + +November 2013, for Synology DSM 4.3.3810. + +=head1 AUTHOR + +Johan Vromans <jvromans@squirrel.nl> + +=head1 THANKS + +H. Merijn Brand <h.m.brand@xs4all.nl> + +=cut diff --git a/pod/.gitignore b/pod/.gitignore index 8a1b1d39ea..9234458211 100644 --- a/pod/.gitignore +++ b/pod/.gitignore @@ -31,6 +31,7 @@ /perlriscos.pod /perlsolaris.pod /perlsymbian.pod +/perlsynology.pod /perltoc.pod /perltru64.pod /perltw.pod diff --git a/pod/perl.pod b/pod/perl.pod index dd5f76fcd2..1902f05d11 100644 --- a/pod/perl.pod +++ b/pod/perl.pod @@ -259,6 +259,7 @@ aux a2p c2ph h2ph h2xs perlbug pl2pm pod2html pod2man s2p splain xsubpp perlriscos Perl notes for RISC OS perlsolaris Perl notes for Solaris perlsymbian Perl notes for Symbian + perlsynology Perl notes for Synology perltru64 Perl notes for Tru64 perlvms Perl notes for VMS perlvos Perl notes for Stratus VOS diff --git a/win32/Makefile b/win32/Makefile index 05e132e2fd..c06b377206 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -1158,6 +1158,7 @@ utils: $(PERLEXE) $(X2P) ..\utils\Makefile copy ..\README.riscos ..\pod\perlriscos.pod copy ..\README.solaris ..\pod\perlsolaris.pod copy ..\README.symbian ..\pod\perlsymbian.pod + copy ..\README.synology ..\pod\perlsynology.pod copy ..\README.tru64 ..\pod\perltru64.pod copy ..\README.tw ..\pod\perltw.pod copy ..\README.vos ..\pod\perlvos.pod @@ -1267,8 +1268,8 @@ distclean: realclean perlmacos.pod perlmacosx.pod perlmodlib.pod perlnetware.pod \ perlopenbsd.pod perlos2.pod perlos390.pod perlos400.pod \ perlplan9.pod perlqnx.pod perlriscos.pod perlsolaris.pod \ - perlsymbian.pod perltoc.pod perltru64.pod perltw.pod \ - perluniprops.pod perlvos.pod perlwin32.pod + perlsymbian.pod perlsynology.pod perltoc.pod perltru64.pod \ + perltw.pod perluniprops.pod perlvos.pod perlwin32.pod -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph pstruct h2xs \ perldoc perlivp libnetcfg enc2xs piconv cpan *.bat \ xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist config_data zipdetails diff --git a/win32/makefile.mk b/win32/makefile.mk index 8f4ed1f714..291963e773 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -1340,6 +1340,7 @@ utils: $(PERLEXE) $(X2P) ..\utils\Makefile copy ..\README.riscos ..\pod\perlriscos.pod copy ..\README.solaris ..\pod\perlsolaris.pod copy ..\README.symbian ..\pod\perlsymbian.pod + copy ..\README.synology ..\pod\perlsynology.pod copy ..\README.tru64 ..\pod\perltru64.pod copy ..\README.tw ..\pod\perltw.pod copy ..\README.vos ..\pod\perlvos.pod @@ -1448,8 +1449,8 @@ distclean: realclean perlmacos.pod perlmacosx.pod perlmodlib.pod perlnetware.pod \ perlopenbsd.pod perlos2.pod perlos390.pod perlos400.pod \ perlplan9.pod perlqnx.pod perlriscos.pod perlsolaris.pod \ - perlsymbian.pod perltoc.pod perltru64.pod perltw.pod \ - perluniprops.pod perlvos.pod perlwin32.pod + perlsymbian.pod perlsynology.pod perltoc.pod perltru64.pod \ + perltw.pod perluniprops.pod perlvos.pod perlwin32.pod -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph pstruct h2xs \ perldoc perlivp libnetcfg enc2xs piconv cpan *.bat \ xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist config_data zipdetails |