2020-11-14

SynologyNAS に最新バージョンの Python 3.8 を入れてみた ~だってパッケージセンターは 3.5 止まりなんだもの~

相変わらず忘備録的な記事で恐縮です。
今回は、SynologyNASにPython3.8を入れる方法を書こうと思います。

というのも、SynologyNASのDSMですが、パッケージセンターではPythonのバージョンが3.5になっています。
これだと、Numpyが動かなくて、困ります。

なので、Linuxのコマンドを駆使してPython3.8を入れていきます。


1. プロセッサモデルの判別

SSHでSynologyNASにアクセスします。
ssh ユーザー名@IPアドレス -pポート番号
  • ユーザー名・・・Synologyのユーザー名
  • IPアドレス・・・SynologyのIPアドレス
  • ポート番号・・・先ほど設定したSSH用のポート番号
Synology に Windows標準ソフト(コマンドプロンプト、PowerShell)で SSH接続


続いて、rootに入ります。
sudo -i


プロセッサモデルを確認します。
cat /proc/cpuinfo | more


上のコマンドの結果から、以下の記述を見つけます。
model name      : ARMv8 Processor rev 4 (v8l)

SSH接続を継続したまま、次に移ります。

2. Entware-ngのインストール

(1) インストール先のフォルダを作ります。
mkdir -p /volume1/@entware-ng/opt


(2) このフォルダは空であることが必要ですので、(念のため)以下のコマンドを実行します。
rm -rf /opt
ln -sf /volume1/@entware-ng/opt /opt


(3) Entware-ngをインストールします。
(以下から該当するプロセッサモデルのスクリプトを選びます。私の場合はARMv8です。)
# ARMv5
wget -O - http://bin.entware.net/armv5sf-k3.2/installer/generic.sh | /bin/sh
# ARMv7
wget -O - http://bin.entware.net/armv7sf-k3.2/installer/generic.sh | /bin/sh # ARMv8
wget -O - http://bin.entware.net/aarch64-k3.10/installer/generic.sh | /bin/sh # x86-64 wget -O - http://bin.entware.net/x64-k3.2/installer/generic.sh | /bin/sh # x86-32 wget -O - http://pkg.entware.net/binaries/x86-32/installer/entware_install.sh | /bin/sh # MIPS wget -O - http://pkg.entware.net/binaries/mipsel/installer/installer.sh | /bin/sh


(4) SynologyNASの起動時にEntwareサービスを開始するようにします。
/bin/ln -sf /volume1/@entware-ng/opt /opt
/opt/etc/init.d/rc.unslung start

※DSM6.1以降は、上記コマンドをDSMのタスクスケジューラに作ってあげる必要があるようです。
やり方は、[コントロールパネル] -> [タスクスケジューラ] -> [作成 > トリガーされたタスク > ユーザー指定のスクリプト] -> [タスクを作成] で、以下のように設定します。(スクリプトは、上のものと同じです。)


SSH接続に戻ります。

(5) 最後に、ログインのPATH変数に追加します。
. /opt/etc/profile


その後、SynologyNASを再起動します。


【更新・アップデートについて】

Entwareの更新
opkg update


パッケージのインストール
opkg install nginx


DSMの更新
DSMが更新されると、 / opt フォルダーの内容が削除されてしまうようです。
その場合には、手順(4)と(5)を改めて実行する必要があります。


3. Python3.8のインストール

再びSSH接続して、以下のコマンドを実行します。
opkg install python3


pipも入れます。
wget https://bootstrap.pypa.io/get-pip.py
python3.8 get-pip.py


これで、Python3.8が使えるようになりました!
(以下は私の環境での実行結果です。)
root@SK:~# python3
Python 3.8.5 (default, Sep 11 2020, 06:40:00)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Hello world!')
Hello world!
>>>


PythonのファイルをSynologyNAS上で走らせるには、以下のコマンドを入力します。
python3 ファイル名

このコマンドをDSMのタスクスケジューラーに仕込んでおけば、PCを立ち上げずとも定期的な自動処理などが可能になるはずです。 ※未検証

【追記@20201117 06:16】
SSH接続+コマンド打ちでできることが、なぜかDSMのタスクスケジューラーのスクリプトで実行できません。。
直接のスクリプトだめ、python3.8が入っている /opt/bin を指定してあげれば動くけど一部のモジュール読み込めず、shファイルにスクリプトを書いてそれを実行させても同様。。。
う~~ん、、詰んだ。。

ただし、Windowsから見たアドレス(\\192.168.1.??\xxx\yyy\zzz.py)と、SynologyNASから見たアドレス(volume1/xxx/yyy/zzz.py)が違う点に注意が必要です。
特にSynologyNASのファイルサーバー内にあるファイルを読み込んで処理させる場合などがそれに該当しますが、その場合には、platformパッケージを活用して条件分岐してあげれば、それぞれできちんと走らせることが可能です。
#! python3
# -*- coding: utf-8 -*-


import platform

pf = platform.system()

if pf == 'Windows':
    fp = '//192.168.1.??/xxx/yyy/abc.txt'
elif pf == 'Linux':
    fp = '/volume1/xxx/yyy/abc.txt'

# ここから下に処理を書く


以上になります。

この記事は、以下のサイトを参考に作らせていただきました。

これらのサイトがなければ、私ごときでは到底できない芸当でした。
この場を借りて、お礼を申し上げます。

んでは!


【追記@2020/11/22 13:30】
久々にパッケージセンターを覗いてみたら、Python3.8が利用可能になっていました。

なので、上記opkgで入れたPython3.8をアンインストールして(とは言ってもやり方わからなかったので、which python -> ls -l -> rm -rm <directry> で無理くり削除)、パッケージセンターのものを入れ直してみました。
狙いはもちろん、パッケージセンターから入れたのであれば、タスクスケジューラーからうまく動くかなと思ったからです。

ですが、パッケージセンターからPythonを入れただけでは、pipが使えません。
また、synologyNASでは、apt-get でインストールすることもできません。

なので、SSHから以下のコマンドでインストールします。
sudo curl -k https://bootstrap.pypa.io/get-pip.py | sudo python3

PATHも通しておきます。
export PATH="$PATH:/volume1/@appstore/py3k/usr/local/bin"

これで、pipが使えるようになります。
以上は、こちらを参考にさせて頂きましたm(_ _)m

で、その後、必要なライブラリを一通りインストールし、タスクスケジューラーを発動させたのですが。
・・・やはりダメ。。

なぜ??
さっぱり原因がわからないので、タスクスケジューラーによるPython自動処理(APIデータ自動取得&DB保存)はあきらめるにします。。




0 件のコメント :

コメントを投稿