summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.Merijn Brand <h.m.brand@xs4all.nl>2013-11-14 18:38:38 +0100
committerH.Merijn Brand <h.m.brand@xs4all.nl>2013-11-14 18:38:48 +0100
commit58534900c38f976129529850bd5168d61c39a495 (patch)
treeee529320c7b7701f5ac329cc27973a49d3384898
parente1cf74e32f6b4013ae0a1886513affa2ad969883 (diff)
downloadperl-58534900c38f976129529850bd5168d61c39a495.tar.gz
Add Synology instructions
-rw-r--r--MANIFEST1
-rw-r--r--README.synology262
-rw-r--r--pod/.gitignore1
-rw-r--r--pod/perl.pod1
-rw-r--r--win32/Makefile5
-rw-r--r--win32/makefile.mk5
6 files changed, 271 insertions, 4 deletions
diff --git a/MANIFEST b/MANIFEST
index 74db5480ee..8bba4eeb0d 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -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