同系列链接:
Jetson开发实战记录(一):Jetson家族的基本介绍
Jetson开发实战记录(二):Jetson Xavier NX版本区别以及烧录系统
Jetson开发实战记录(三):Jetson Xavier NX具体开发(Ubuntu18.04系统)
来自SSD的读取速度是SD卡的7倍。因此,从SSD启动肯定会提高jetson NX的性能。
git clone https://github.com/jetsonhacks/rootOnNVMe.git
cd rootOnNVMe
然后将根源文件复制到您的SSD
./copy-rootfs-ssd.sh
./setup-service.sh
sudo reboot
由于国产套件的核心模组是自带16G emmc闪存,刷机时只能刷入最基础系统,
需要扩展固态硬盘设置SSD启动后再执行命令安装CUDA等环境的包。
请参考第5个视频(观看到第5分钟后开始执行的是CUDA组件安装指导)操作指令如下:
sudo apt-get update
sudo chmod -R 777 bootFromExternalStorage
cd bootFromExternalStorage
./install_jetson_default_packages.sh
apt-get update
apt-get upgrade
sudo apt-get install ufw
sudo ufw enable
sudo ufw disable
sudo ufw status
sudo ufw allow 3306
sudo ufw delete allow 8010
sudo ufw allow from 192.168.1.1
sudo ufw deny smtp
所谓的 VNC(Virtual Network Computing )是一种图形化的桌面共享系统,它使用远程帧缓冲协议 (RFB) 来远程控制另一台计算机。它将键盘和鼠标事件从一台计算机传输到另一台计算机,通过网络向另一个方向转发图形屏幕更新。
VNC 的优点很多,很多场景下都能看到VNC。例如,访问树莓派的桌面,对 headless 服务器的管理等等。但是,对于云上实例的远程图形化的访问VNC却不是好的选择。考虑到我们的使用场景是通过互联网来访问云上的主机,这就引出了否定 VNC 最主要的原因– 安全性。
默认情况下,RFB并不是一个安全的协议。虽然这个协议下密码不以明文方式发送,但如果能从网络中嗅出加密密钥和已编码的密码,还是有可能破解成功的。因此,建议密码至少有8个字符。另一方面,VNC的一些版本也有8个字符的限制; 如果发送的密码超过8个字符,则删除多余的字符,并将截断的字符串与密码进行比较。
在VNC生态系统中,”Big Four” 指的是LibVNC、UltraVNC、Tight VNC和TurboVNC 这四家提供VNC 产品的厂商。2019年,Kaspersky Lab 的研究人员对这四家公司进行了审计,以了解它们的安全性。他们的发现是令人失望的。总的来说,研究人员发现这四个程序的客户端和服务器部分共有37个严重缺陷。其中22个在 UltraVNC,另外10个在 LibVNC, 4个在 TightVNC,还有一个在 TurboVNC,但这是一个严重的漏洞,它会让攻击者在服务器端远程执行代码。
有过 Windows 使用经验的人对于远程桌面(Remote Desktop Protocol ,RDP)一定不会陌生。RDP 是由微软公司开发的一种专有协议,它为用户提供了通过网络连接到另一台计算机的图形界面。在使用上,用户需要使用 RDP 客户端软件,而在远程另一台计算机则需要运行 RDP 服务器软件。
微软的Windows、Linux、macOS、iOS、Android等操作系统都有客户端。Windows操作系统内置RDP服务器;Linux与 macOS 可以安装一个 RDP 服务器。缺省配置下,服务器监听 TCP 端口 3389 和 UDP 端口 3389。
微软目前把他们的官方RDP客户端软件称为Remote Desktop Connection,以前叫做 “Terminal Services client”
与VNC 相比,RDP的安全性有很大的提升。主要的安全特性包括了:
此外,正如前面提到的VNC协议是基于像素的。尽管这带来了极大的灵活性,可以显示任何类型的桌面,但它的效率往往不如那些更好地理解底层图形布局(例 如: X11)或桌面(例如:RDP )的解决方案。这些协议以更简单的形式(例如:打开窗口)发送图形原语或高级命令,而 VNC 的 RFB 协议尽管支持压缩但只能是发送原始像素数据。
如何使用RDP?
在 Windows 环境下使用RDP是再简单不过的事情。虽然微软公司没有为 Linux 提供 RDP 的软件,但是我们可以使用开源的xRDP,这是RDP协议在Linux平台 的实现。
xRDP是一个开源的远程桌面协议服务器,它用来实现Linux接受来自 Windows、Mac 或者 Linux 远程桌面客户端或的连接。这意味着你不需要在我们所使用的 Windows 或 macOS 机器上安装额外的第三方应用程序。
Linux 安装 xRDP的方法如下。这里我以 Ubuntu 20.04 为例 –
$ sudo apt update
$ sudo apt install ubuntu-desktop
除了Gnome 以外,我们还可以选择 LXDE、Xface 等等。相比之下,LXDE 是轻量级的窗口管理器,Xface 则具备类似 Windows 界面的风格。如果不在乎额外增加的大约 5GB 的磁盘存储的开销,我还是推荐使用Gnome。原因在于这与我们本地使用的 Ubuntu 具有一致性的体验。
$ sudo apt install -y xrdp
安装完成后,xRDP服务将自动启动。可以通过这个命令来检查其状态:
$ sudo systemctl status xrdp
$ sudo passwd ubuntu
$ sudo adduser ubuntu ssl-cert
出于安全的理由务必使其符合密码安全的策略。第二条命令是将 用户ubuntu 加入到 ssl-cert 用户组中。这是因为默认情况下,xRDP 使用的是自签发的证书,这个证书保存在 /etc/ssl/private/ssl-cert-snakeoil目录下。证书的密钥文件只能由 “ssl-cert” 用户组的成员读取。
NoMachine是一款不错的远程桌面控制软件,该工具简单,易用,尤其是在低带宽、慢速率的网络环境下工作性能良好,允许用户从另一台计算机访问和控制远程的Windows,Linux PC或Mac电脑,实现工作或娱乐等操作。
软件下载地址:下载官网
进入之后,会自动检测当前主机的版本,选择download下载最新版。注意NX开发板要选择对应的NoMachine for ARM版
由于某些原因,可能会下载很慢,还会出现中断,特贴出我辛苦下载下来版本
win10版链接
NX开发板对应的版本
相关组件安装
nvidia-smi
pip3 install jetson-stats
#第一种报错,就第二种安装方式
sudo -H pip3 install jetson-stats
安装好后输入
jtop
在Ubuntu18.04下,谷歌拼音输入法是基于Fcitx输入法的。因此,我们需要首先安装Fcitx。一般来说,Ubuntu最新版中都默认安装了Fcitx,但是为了确保一下,我们可以在系统终端中运行如下命令:
sudo apt install fcitx
系统终端中输入命令:
im-config
注:im-config是Input Method Configuration的缩写。
运行如下命令之后,就会开启 Input Method Configuration 窗口。
在出现的窗口中,选择Yes,如下图所示:
在出来的这个窗口中,必须选中Fcitx,然后选择Yes,如下图所示:
点击OK后就关闭窗口,重新启动电脑让所做的配置生效,当然你也可以在系统终端中运行:sudo reboot
命令重启电脑。
在Ubuntu18.04系统中安装谷歌拼音输入法(Google Pinyin)非常简单,只需要下面这个命令:
sudo apt install fcitx-googlepinyin
reboot
在出来的选项中输入y即可安装。
安装后运行如下命令配置谷歌拼音输入法:
fcitx-config-gtk3
然后依次进行如下操作:
配置fcitx
如果又拼音直接保存就行,如果没有,则选择左下角的+号搜索添加。
如果想重新设置切换快捷键,直接点击“全局配置”
如果出现输入法没有候选框,则输入以下两个命令
killall fcitx-qimpanel
sudo apt-get remove fcitx-ui-qimpanel
到这里,在Ubuntu18.04系统中安装谷歌拼音输入法(Google Pinyin)全部完成了。
为什么还需要 Anaconda?有以下3个原因:
还有很多项目使用的包版本不同,比如不同的pandas版本,不可能同时安装两个 Numpy 版本,你要做的应该是,为每个 Numpy 版本创建一个环境,然后项目的对应环境中工作。这时候conda就可以帮你做到。
但是Anacona目前不支持aarch64架构,因而无法直接安装。好在github上有Archiconda这个项目,可以看作是arm版的Anaconda
下载地址
链接
启动脚本
(xxx为版本号)
chmod a+x Archiconda-xxx.sh
./Archiconda-xxx.sh
reboot
conda添加清华源
将以上配置文件写在~/.condarc中
vim ~/.condarc
channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
ssl_verify: true
官方地址
点击下载.deb文件包,双击安装
设置md文件默认打开方式为typora
双击打开,成功
通常在以下路径(刚刚安装的ReID环境),找到python后,双击确定
切换成功
conda activate ReID
pip install -r requirements.txt#这里torch和torchvision可以先不装
安装成功,关闭重启
特别注意torch的版本一定要和cuda版本对应,如果出错,建议直接去官网下载,找到适合自己的版本(找到适合自己的版本(英伟达torch官网))
先安装依赖:
sudo apt-get install libopenblas-base libopenmpi-dev
安装Pythorch (需要在安装文件当前目录运行命令)
pip install torch-1.7.0-cp36-cp36m-linux_aarch64.whl
安装完成导包测试
python
import torch
#如果上面的依赖没有安装这里会报错
#OSError: libmpi_cxx.so.20: cannot open shared object file: No such file or directory
可以在包目录这个网站右上角搜索libmpi_cxx.so.20手动下载需要的依赖包
需要的依赖包有:
libhwloc5_1.11.9-1_arm64.deb (先安装)
libopenmpi2_2.1.1-8_arm64.deb
libopenblas-base_0.2.20+ds-4_arm64.deb
安装依赖参考链接
依赖安装完成后有可能还会遇到一个错误
import torch
#Illegal instruction (core dumped)(非法指令(核心转移))
在环境变量最后面加入
sudo vim ~./bashrc
export OPENBLAS_CORETYPE=ARMV8
source ~/.bashrc
最后测试一下
python
import torch
print(torch.cuda.is_available()) #测试cuda是否能用
True #返回Ture说明cuda能用
torchvision库简介(翻译)
torchvision是独立于pytorch的关于图像操作的一些方便工具库。
torchvision的详细介绍在:https://pypi.org/project/torchvision/
torchvision主要包括一下几个包:
本人在torch官网上找不到arms适配的vision包,直接进行pip安装的话直接报错,所以选择whl安装torchvision
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
pip3 install torchvision==0.8.1 #我用这条没有安装成功
手动去这个地址下载代码包:https://github.com/pytorch/vision/archive/v0.8.1.zip(也可以直接进入https://github.com/pytorch/vision中找到其他的版本)
下载解压后,进入文件夹
export BUILD_VERSION=0.8.1 #这里可以将地址写入~/.bashrc中
sudo python3 setup.py install #这里如果是conda的下的虚拟环境,sudo可能会提示错误,所以可以去掉sudo
#测试是否安装成功
import torchvision
print(torchvision.__version__)
原因是虽然已经安装了cuda但是没有将cuda添加到Linux环境下。
首先声明:通过修改.bashrc文件的方法来修改环境是永久有效但是仅针对当前用户,对于没有root权限的用户,这种方式是很有好的,
sudo vim ~/.bashrc
echo 'export PATH=/usr/local/cuda-10.0/bin/:$PATH'>>~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH'>>/.bashrc
source ~/.bashrc
注意以上的第一行和第二行命令中的 cuda-10.0 这里根据安装的cuda版本不同所对应的文件夹名称也不同。如果安装是cuda9.0请到usr文件下找到local文件夹看看你所安装cuda文件夹名是什么,那么上面的 cuda-10.0 内容就相应改成什么。
需要注意的是:上述的方式只针对当前用户,因此最后一个命令是用于跳转到当前用户的命令窗口执行。在对应的用户终端命令栏中输入vncc -V则可以看到NVIDIA版本信息。
Jetson nano 官方系统是ubuntu,是在ubuntu上修改的NVIDIA系统 ubuntu18.04 LTS,好像是是aarch架构,系统界面如下
和直接在ubuntu上安装没有什么区别,直接使用apt-get install mysql-server
得到的是5.x版本,不是最新的8.x版本 使用 apt-get
安装完后 会生成一些默认的账户在 /etc/mysql/debian.cnf中 可以通过sudo cat /etc/mysql/debian.cnf
查看
登录应该是需要安装mysqsl-client,也是使用apt-get install mysql-client安装
mysql -u username -p
然后输入密码
新建用户,赋予权限
create user 'username'@'localhost' identified by 'password';
#username是你想创建的用户名
#localhost是表示它可以通过那个ip来访问,localhost表示本地 其余ip表示其他地址 %表示所有
#password是密码
grant all privileges on 数据库.* to username@ip地址 ;
#好像mysql的用户是通过 username+ip来区别,可以有连个username相同的用户,只要ip不一样。
cd /etc/mysql
//然后ls一下 我的有下面这些东西,配置文件在mysql.conf.d中
//conf.d debian-start my.cnf.fallback mysql.conf.d
//debian.cnf my.cnf mysql.cnf
cd mysql.conf.d
vim mysqld.cnf
//将地址127.0.0.1 改成0.0.0.0
service mysql restart
sudo service mysql restart
sudo netstat -tap | grep mysql #查看是否允许
我选择使用花生壳进行内网穿透,花生壳还是比较方便的。
应该是可以直接参考树莓派的官方教程https://service.oray.com/question/11639.html
dpkg -i phtunnel_5_0_rapi_aarch64.deb #安装
可以通过以下命令来操作:
phddns #查看命令
phddns start #打开
phddns status #可以查看SN码
打开http://b.oray.com ,在登录页面中输入SN码与默认密码(admin)登录。
剩下的就看官方教程就好了https://service.oray.com/question/11639.html
建立的映射应该是tcp类型,绑定到3306端口
注意,需要先给你的Nano 配置IP与MAC绑定,因为你的路由器应该是使用动态分配IP,打开192.168.1.1即可进行绑定,不然每次都要重新 在管理界面绑定一次。
可以先在内网测试一下能否脸上nano的mysql,使用ifconfig获得内网地址类似与192.168.1.101,然后在自己电脑上用workbench测试一下。
测试成功后绑定外网然后在外网试一下。
这里之后,基本的盒子部署已经完成了,后面就是一些项目的具体实施,比如我目前在学习的ReID模块,我也会将其写成博客进行学习。