perlsynology - Synology DSM 系統上的 Perl 5
Synology 生產大量網路附加儲存 (NAS) 裝置,在大型組織、小型企業和家庭中都非常受歡迎。
NAS 系統配備 Synology Disk Storage Manager (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 連結也顯示應支援哪些環境。
H.Merijn Brand 已在 DS218+ 和 DS220+(均為 Intel x64)上的 DSM-7.1 中進行測試。
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
iPkg 已在 DSM 6 中棄用,但 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 頻道。
按一下「重新整理」。在左面板中,將會出現「社群」項目。按一下它。選取「Bootstrap Installer 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="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
# 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,
到冒煙設定中,或新增另一個修補程式,將
exit 0 if $] == 5.008006;
插入到 regen.pl
程式開頭。
上述程序說明了基本環境,因此會產生基本的 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 <jvromans@squirrel.nl> H. Merijn Brand <cpan@tux.freedom.nl>