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 /README.synology | |
parent | e1cf74e32f6b4013ae0a1886513affa2ad969883 (diff) | |
download | perl-58534900c38f976129529850bd5168d61c39a495.tar.gz |
Add Synology instructions
Diffstat (limited to 'README.synology')
-rw-r--r-- | README.synology | 262 |
1 files changed, 262 insertions, 0 deletions
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 |