
如何使用群晖(DSM)运行N2N-编译篇
群晖(后面使用DSM
代替)是一个目前最著名的NAS
系统,没有之一。
如何在DSM
上直接运行N2N
呢,当然又需要交叉编译了😂。
下面的交叉编译操作,需要有Linux
的基本功,和vim
操作的基本功。
已编译好的文件
编译环境:
Ubuntu 20.04.1 LTS
Linux vm-n2n-cc2 5.4.0-59-generic #65-Ubuntu SMP Thu Dec 10 12:01:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
特别提示,
不同的DSM系统,不同的架构,文件是不能通用的
下面是基于
DSM6.2.3
,apollolake
架构编译好的文件1
2
3
4
5wget https://download.margrop.net/d/oneindex/network/n2n_2.8_stable/DSM6.2.3/libssl.so.1.1 -O libssl.so.1.1
wget https://download.margrop.net/d/oneindex/network/n2n_2.8_stable/DSM6.2.3/libcrypto.so.1.1 -O libcrypto.so.1.1
wget https://download.margrop.net/d/oneindex/network/n2n_2.8_stable/DSM6.2.3/edge -O edge
wget https://download.margrop.net/d/oneindex/network/n2n_2.8_stable/DSM6.2.3/supernode -O supernode
wget https://download.margrop.net/d/oneindex/network/n2n_2.8_stable/DSM6.2.3/renew -O renew下面是基于
DSM6.1.7
,broadwell
架构编译好的文件1
2
3
4wget https://download.margrop.net/d/oneindex/network/n2n_2.8_stable/DSM6.1.7/libssl.so.1.1 -O libssl.so.1.1
wget https://download.margrop.net/d/oneindex/network/n2n_2.8_stable/DSM6.1.7/libcrypto.so.1.1 -O libcrypto.so.1.1
wget https://download.margrop.net/d/oneindex/network/n2n_2.8_stable/DSM6.1.7/edge -O edge
wget https://download.margrop.net/d/oneindex/network/n2n_2.8_stable/DSM6.1.7/supernode -O supernode
N2N编译环境的准备
- 使用
yum
安装必要软件,下面是作者的参考文档https://github.com/ntop/ntopng/blob/dev/doc/README.compilation
交叉编译环境的准备
首先去下载目标机器对应的toolchain
(就是用来编译目标平台的程序的编译工具套装,gcc
、g++
、ld
和库啥的)。
在群晖的开发工具下载首页,进入DMS相应版本的目录里,比如我的是6.2.3版本,进去最新的DSM 6.2 Tool Chains,然后可以看到有很多对应着不同处理器的压缩包,找和你CPU对应的版本。
可以通过ls /sys/module | grep bios
下面的文件找到CPU平台的代号。
可以看到我这台群晖对应的CPU平台为apollolake
。
然后后面是Linux内核版本,和cpu架构,这两个可以通过uname
命令查看。
1 |
|
解压并添加环境变量:
1 |
|
可以看到gcc
相关的可执行程序,这时候可以验证一下下的程序对不对,运行一个试试。
然后把bin
目录添加到`PATH让系统能够找到你的工具链
1 |
|
OpenSSL交叉编译
下载并解压OpenSSL
源代码
1 |
|
配置工具链地址,并生成Makefile
文件
1 |
|
在Makefile
中搜索:/CROSS_COMPILE=
,并在后面加上x86_64-pc-linux-gnu-
1 |
|
删除2个-m64
1 |
|
开始交叉编译OpenSSL
1 |
|
下载N2N源代码
1 |
|
N2N交叉编译准备
1 |
|
在n2n
的目录下新建toolChain.cmake
文件,并输入下面的配置内容
1 |
|
N2N交叉编译
使用CMake
对n2n
进行交叉编译,
1 |
|
N2N在群晖安装
用 WinSCP
或wget
之类的软件,将edge
、supernode
上传到 /usr/bin
目录下libssl.so.1.1
和 libcrypto.so.1.1
上传到 /lib64
下(32位CPU上传到 /lib
下),其属性全改为 0755
1 |
|
手工启用tun模块:
1 |
|
- 可能会遇到的问题
我的白群也无意当中升级到了最新版本 dsm6.2.2,后来又降级到6.1.7,因为622启动edge以后,居然有一半的edge是ping不通的,即使使用了下面的方法仍然如此,而617全通,没有任何问题,可见617系统的网络功能更好一些。我无意当中发现群晖 dsm6.1、6.2(6.0未知)在启动之后,最开始的时候 n2n 是正常的,n2n的路由表也是有的,但是很快群晖就开始删除 n2n 的路由表了,这就是我们加入开机启动,刚开始 n2n 网络是可以 ping 通的,一会就断开了的原因。下面说说处理方法,2018-8-15 的方法仅做参考。将从 这里下载 (鼠标放上面,按鼠标右键,在弹出的菜单中选择“链接另存为…”)的文件保存为 renew,并加入开机启动 rc.rocal 文件里的 edge 语句后面: /etc/new/renew & (renew 的属性改为 0755)。这样,以后我们即使手动启动 n2n,它也会在 10 秒内给你加上群晖给删除的静态路由。
自动启用tun模块并启动edge:
1 |
|
给脚本可执行权限:
1 |
|
参考文章
http://www.lucktu.com/archives/778.html
群晖交叉编译记录(编译subversion)
交叉编译N2N-LEDE Koolshare x86_64
CMake交叉编译配置
群晖(Synology)下N2N的设置方法