perlsynology - Synology DSM 系统上的 Perl 5
Synology 制造了大量网络附加存储 (NAS) 设备,这些设备在大型组织以及小型企业和家庭中非常受欢迎。
NAS 系统配备了 Synology 磁盘存储管理器 (DSM),这是一个精简的 Linux 系统,增强了几个用于管理 NAS 的工具。硬件有几种类型:Marvell Armada (ARMv5tel, ARMv7l)、Intel Atom (i686, x86_64)、Freescale QorIQ (PPC) 等等。有关完整列表,请参阅 Synology 常见问题解答。
由于它基于 Linux,因此 NAS 可以运行许多流行的 Linux 软件包,包括 Perl。事实上,Synology 提供了一个现成的 Perl 安装包,具体取决于 DSM 的版本,安装的 perl 版本从 DSM-4.3 上的 5.8.6 到 DSM-7.1 上的 5.28.1 不等。
有一个活跃的用户社区为 Synology DSM 系统提供许多软件包;在撰写本文时,他们提供了 Perl 5.28.1 版本。
本文档描述了 Synology DSM 操作系统的各种功能,这些功能会影响 Perl 5(以下简称 Perl)的配置、编译和/或运行方式。它已由 Johan Vromans 为 Synology DS413 (QorIQ) 编译和验证,并获得了 H.Merijn Brand (DS213: ARMv5tel, RS815: Intel Atom x64 和 DS218+: Celeron J3355) 的反馈。
为了获得舒适的开发环境,Entware 目前是唯一可行的解决方案。只需按照 在 Synology NAS 上安装 Entware 上的详细说明进行操作。支持的架构包括 armv5、armv7、mipsel、wl500g、x86_32 和 x86_64。查看 此处 以了解支持的平台。
该 github 链接还显示了应支持哪些环境。
它在 DSM-7.1 上由 H.Merijn Brand 在 DS218+ 和 DS220+(均为 Intel x64)上进行了测试。
Entware 附带一个预编译的 5.26.1(2018 年 1 月),允许构建共享 XS 代码。请注意,此安装**不**使用 site_perl 文件夹。可用的 `cpan` 可以正常工作。如果所有必需的开发包也安装了,那么 XS 也一样。
从社区软件包中心安装 perl
使用您喜欢的浏览器打开 DSM 管理页面并启动软件包中心。
在设置中,添加以下软件包源
Name: Community
Location: https://synopackage.com/repository/spk/All
仍在设置中,在频道更新中,选择 Beta 频道。
要完成开发环境,请安装 make 和 gcc
ds220# opkg install make gcc
然后,可选地,确保您使用较新的 bash 和 gawk。
ds220# opkg install bash gawk
ds220# cd /usr/bin
ds220# mv bash bash.syno
ds220# ln -s /opt/bin/bash .
为了让 Configure 找到所需的库
ds220# cd /opt/lib
ds220# ln -s libcrypt.so.? libcrypt.so
ds220# ln -s libdl.so.? libdl.so
ds220# ln -s libgdbm.so.? libgdbm.so
ds220# ln -s libgdbm_compat.so.? libgdbm_compat.so
ds220# ln -s libm.so.? libm.so
ds220# ln -s libpthread.so.? libpthread.so
ds220# ln -s libutil.so.? libutil.so
在 DSM 6 上,使用 iPkg 已被弃用,但 DSM 6 提供了一种替代方案:entware/opkg。有关如何使用它的说明,请阅读 在 Synology NAS 上安装 Entware-ng
遗憾的是,这在 QorIQ 上(目前)无法使用。在撰写本文时,支持的架构为 armv5、armv7、mipsel、wl500g、x86_32 和 x86_64。查看 此处 以了解支持的平台。
Entware-ng 附带一个预编译的 5.24.1(2017 年 6 月),允许构建共享 XS 代码。请注意,此安装**不**使用 site_perl 文件夹。可用的 `cpan` 可以正常工作。如果所有必需的开发包也安装了,那么 XS 也一样。
由于 DSM 是一个精简的 Linux 系统,因此它缺少 Linux 上常见的许多工具和库。基本的工具,如 sh、cp、rm 等,是使用 BusyBox 实现的。
使用您喜欢的浏览器打开 DSM 管理页面并启动软件包中心。
如果您想对 Perl 进行冒烟测试,请安装 `Perl`。
在设置中,添加以下软件包源
https://www.cphub.net
http://packages.quadrat4.de
由于这两个都已停止维护,因此您不太可能在 DSM 5 上设置构建环境。
仍在设置中,在频道更新中,选择 Beta 频道。
按刷新。在左侧面板中,将出现“社区”项。点击它。选择“引导安装程序 Beta”并安装它。
同样,安装“iPKGui Beta”。
应用程序窗口现在应该显示 iPKGui 的图标。
启动 iPKGui。安装 `make`、`gcc` 和 `coreutils` 包。
如果您想对 Perl 进行烟雾测试,请安装 `patch`。
下一步是向系统库添加一些符号链接。例如,开发软件需要一个名为 `libm.so` 的库,该库通常是 `libm.so.6` 的符号链接。Synology 仅提供后者,而不提供符号链接。
这里,Synology 系统的实际架构很重要。您需要找出 gcc 库的安装位置。在 `/opt` 中查找类似于 `arm-none-linux-gnueab` 或 `powerpc-linux-gnuspe` 的目录。在下面的说明中,我将使用 `powerpc-linux-gnuspe` 作为示例。
在 DSM 管理页面上启动控制面板。
单击“终端”,并启用 SSH 服务。
关闭“终端”和“控制面板”。
使用 ssh 在 Synology 上打开一个 shell 并成为 root 用户。
执行以下命令
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 (or
/opt/arm-none-linux-gnueabi/lib)
ln -s /lib/libdl.so.2 libdl.so
警告:当您执行系统软件升级时,这些链接将消失,需要重新建立。
当构建环境设置好后,构建和测试 Perl 就很简单了。您只需要像往常一样下载源代码,并添加一个名为 `Policy.sh` 的文件,如下所示
# Administrivia.
perladmin="[email protected]"
# 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
# on older DSM versions
cc=gcc
awk=/opt/bin/gawk
# Build flags. Optional
ccflags="-DDEBUGGING"
# Library and include paths.
locincpth="/opt/include"
loclibpth="/opt/lib /usr/local/lib /usr/lib"
libpth="/opt/lib /usr/local/lib /usr/lib"
您可能希望在安装之前创建目标目录并赋予其正确的权限,从而无需以超级用户身份构建 Perl。
在您解压缩源代码的目录中,执行熟悉的命令
$ bash ./Configure -Dusedevel -Duseshrplib -Duse64bitall -des
$ make -j2
$ env TEST_JOBS=2 make test_harness
$ make install
GNU C 编译器在 `-v` 下可能会输出意外的内容,这会导致对 `cppsymbols` 的分析失败,因为引号不匹配。
如果 `config.sh` 出现语法错误,您会注意到。
由于 Synology 文件系统的非典型结构,当无法找到错误代码的本地定义时,会生成此错误。
此错误已在 Perl 开发 git 的 5.19 版本中修复,提交为 7a8f1212e5482613c8a5b0402528e3105b26ff24。
由于 Synology 文件系统的非典型结构,一个子测试失败。文件/lib/glibc.so 丢失。
警告: 不要将/lib/glibc.so.6 符号链接到/lib/glibc.so,否则一些系统组件将开始出现故障。
如果构建成功完成,您可以按照 Test::Smoke 文档中描述的设置烟雾测试。
对于烟雾测试,您需要一个正在运行的 Perl。您可以安装 Synology 提供的 Perl 5.8.6 包,或者构建并安装您自己的、更新得多的版本。
请注意,我无法在由 Synology 任务计划程序启动时运行成功的烟雾测试。我通过使用 ssh 在另一个系统上运行的 cron 作业来启动烟雾测试。
ssh nas1 wrk/Test-Smoke/smoke/smokecurrent.sh
当使用烟雾测试应用本地补丁时,测试驱动程序将在应用补丁后自动请求重新生成某些表。Synology 提供的 Perl 5.8.6(至少在 DS413 上)无法生成这些表。它将生成具有虚假值的 opcode,导致构建失败。
您可以通过添加设置来防止重新生成
'flags' => 0,
到烟雾配置中,或者通过添加另一个补丁,在regen.pl
程序的开头插入
exit 0 if $] == 5.008006;
。
上述过程描述了一个基本环境,因此会导致一个基本的 Perl。如果您想向 Perl 添加其他库,您可能需要一些额外的设置。
例如,基本的 Perl 没有任何 DB 库(db、dbm、ndbm、gdsm)。您可以使用 iPKGui 添加这些库,但是,您需要将环境变量 LD_LIBRARY_PATH 设置为适当的值
LD_LIBRARY_PATH=/lib:/opt/lib
export LD_LIBRARY_PATH
此设置需要在构建 Perl 时生效,以及在运行程序时生效。
2022 年 7 月,适用于 DSM 5.1.5022 和 DSM 6.1-15101-4,以及 DSM-7.1-42661-3。
Johan Vromans <[email protected]> H. Merijn Brand <[email protected]>