This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add Synology instructions
authorH.Merijn Brand <h.m.brand@xs4all.nl>
Thu, 14 Nov 2013 17:38:38 +0000 (18:38 +0100)
committerH.Merijn Brand <h.m.brand@xs4all.nl>
Thu, 14 Nov 2013 17:38:48 +0000 (18:38 +0100)
MANIFEST
README.synology [new file with mode: 0644]
pod/.gitignore
pod/perl.pod
win32/Makefile
win32/makefile.mk

index 74db548..8bba4ee 100644 (file)
--- 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 (file)
index 0000000..652f0f9
--- /dev/null
@@ -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
index 8a1b1d3..9234458 100644 (file)
@@ -31,6 +31,7 @@
 /perlriscos.pod
 /perlsolaris.pod
 /perlsymbian.pod
+/perlsynology.pod
 /perltoc.pod
 /perltru64.pod
 /perltw.pod
index dd5f76f..1902f05 100644 (file)
@@ -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
index 05e132e..c06b377 100644 (file)
@@ -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
index 8f4ed1f..291963e 100644 (file)
@@ -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