nano-pi NEO 安装FTP和升级Python
安装和启动FTP服务
友善之臂nano-pi NEO官方给出的固件(nanopi-neo_sd_friendlycore-xenial_4.14_armhf_20191219.img)中并不包括FTP服务,因此,需要自己安装配置。安装配置的过程如下(如果不是root用户,命令前要加sudo):
-
使用命令:apt-get install vsftpd,获取和安装vsftpd。
-
安装完成后,用文本编辑(vi、vim、nano等)修改/etc/vsftpd.conf文件,修改和注释以下几行:
原有的listen=NO改为listen=YES;
原有的listen_ipv6=YES改为listen_ipv6=NO(不使用IPv6);
去掉write_enable=YES一行的注释; -
用mkdir /home/ftp命令,建立ftp目录。
-
用useradd -d /home/ftp -s /bin/bash ftpuser命令增加ftp用户,也可以是别的用户名。
-
用passwd ftpuser 命令为ftpuser设置密码。
-
用chown ftpuser /home/ftp命令,将/home/ftp属主改为ftpuser。
-
用service vsftpd start启动FTP服务,如果vsftpd已经启动,就先关闭它再启动。
-
用service vsftpd stop关闭FTP服务。
完成以后,就可以从外部用FTP命令行或FTP工具(如FileZilla)连接nano-pi,传输文件了。
升级Python
在老的nano-pi固件(2016版)版本上升级安装Python3.7.6时,出现了以下问题:
- 无法引入ssl,即import ssl时,报找不到模块的错误;
- 运行pip,也报没有ssl,无法连接下载python模块;
- 进入Python命令行界面,按退格键不起作用,出现一系列^H等乱码字符。
折腾了很长时间也没解决问题,原以为新版的固件或包含新的Python环境,下载后才知道最新版本nano-pi固件(上述的20191219)中的Python3版本依然是3.5,而且没有pip,只好再做升级。后经参考很多资料,综合成如下升级过程,完成了安装(在root用户下安装,如果不是root用户,请用sudo命令):
- 下载和安装依赖软件包(如果有错,可以做一下update apt-get试试):
apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev
apt-get install liblzma-dev libffi-dev libc6-dev
- 在某个你认为合适的目录下(例如$HOME),用如下命令下载新版Python(这里是3.7.6):
wget https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tgz
(完成后当前目录下会出现Python-3.7.6.tgz文件)
- 用以下命令解压,解压后,当前目录下会出现Python3.7.6子目录:
tar -xvf Python-3.7.6.tgz
- 修改Python-3.7.6/Modules目录下的Setup文件,找到下面一段,将其中2、5、6、7、8等5行中的注释符号(‘#’)去掉:
# Socket module helper for socket(2)
#_socket socketmodule.c
# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
#SSL=/usr/local/ssl
#_ssl _ssl.c \
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
# -L$(SSL)/lib -lssl -lcrypto
- 修改后将其存盘,稳妥起见,在修改前可以先备份一下。
- 生成安装目录,例如:
mkdir /usr/local/python3.7
- 用以下三条命令,配置、编译连接和安装Python,注意,编译连接(make)一步化的时间较长:
./configure --prefix=/usr/local/python3.7 --enable-optimizations
make
make install
- 如果需要安装pyinstaller,在执行configure的时候,要加上选项 --enable-shared,即:
./configure --prefix=/usr/local/python3.7 --enable-optimizations --enable-shared
-
建立新版本和python或/和python3命令的连接,这里给出的是与python3命令的连接:
首先移除和备份原有连接:mv /usr/bin/python3 /usr/bin/python3_bak
建立新的连接:ln -s /usr/local/python3.7/bin/python3 /usr/bin/python3 -
加了 --enable-shared 选项以后,运行python3 会报以下错误:
error while loading shared libraries: libpython3.7m.so.1.0
-
这时可以将/usr/local/python3.7/lib 目录下的 libpython3.7m.so.1.0 复制到 /usr/lib 或/和 /usr/lib64 目录下。有资料提到还要运行 ldconfig,但我这里没有运行,还是能够正常工作。
-
如果原来没有pip,则建立pip命令的连接(这里的命令是pip3):
ln -s /usr/local/python3.7/bin/pip3 /usr/bin/pip3
-
如果原来有pip或pip3的连接,则也用mv命令移除和备份。
-
运行pip(pip3)可能报错:
subprocess.CalledProcessError: Command ‘(‘lsb_release’, ‘-a’)’ returned non-zero exit status 1
- 如果出现这种情况,用以下命令删除一个文件:
rm /usr/bin/lsb_release
上述步骤完成以后,可以使用新版Python和pip了,下面是试运行的截图(从中可以看出,能正常 import ssl)。除了nano-pi core版本Linux以外,本文对其他基于 ubuntu 的 Linux 版本也基本是有效的,用同样的方法也曾升级过Python 3.7.7和Python 3.8.1。
最后补充一个问题。一般情况下,Python升级后用下述命令安装PyInstaller:
pip3 install pyinstaller
安装后,在命令行直接输入pyinstaller就可启动PyInstaller。但有时安装后发现无法用此方法启动PyInstaller,系统报告找不到命令。在这种情况下,用如下命令做一个链接,就能解决问题。
ln -s /usr/local/python3.7/bin/pyinstaller /usr/bin/pyinstaller
其中的 /usr/local/python3.7/bin/ 目录名要按python实际的安装路径修改。