因为花生壳
(内网穿透)不能用了(未知原因),所以用上了NATAPP进行内网穿透。
(ps:怎么安装NATAPP官网有教程,还挺清晰所以就不记录了。)
安装完NATAPP后发现好多缺点:
1.没有客户端(就是没有可操作页面),基本上都是打代码。
2.就是每次激活都会换域名。
3.开机不会自己启动。(ps:这是Ubuntu系统(linux系统))
就是这些就足以搞死人了,可能windows版的不会这样吧。(没试过)
刚好在NATAPP官网找到了上面的缺点的解决方法。
1.linux后台运行natapp(ngrok)教程
2.使用本地配置文件config.ini
3.natapp(ngrok) Linux 开机自启动
一开始觉得有教程就会很简单的,没想到路途忐忑。
首先我开始了后台运行Natapp 教程,不错很快就配好了
用这个命令行
nohup./natapp-authtoken=xxxx-log=stdout&
来开启natapp,可以关闭终端,不会退出Natapp。
(注:这里会出现生成一个nohup的文件在这个文件这里也可以出现域名,但需要config.ini,后面会讲到,修改这个就行了loglevel=DEBUG(之前没有看到其实INFO也是可以的而且信息量还少,容易找到关键信息))
但用这个东西打开的Natapp没有域名显示,没有域名跟没有打开,不是一样没有用吗?找了一下官网没有说怎么解决,只能百度了。
得到了两个方法(获取域名的方法):
1.命令行直接这个 (./natapp &) 注意有括号的
2.就是用到了配置config.ini,先从官网下载这个文件。
详细说说第二个方法,config.ini要放在natapp的同一目录下,这个natapp文件是官网文件是开启内网穿透的那个文件。
配置一下config.ini
authtoken= 填自己开通的通道那个值
其他先默认。(这个文件主要是自动填入这个值,省得手打,所以之后可以直接用这个命令行nohup./natapp-log=stdout&,开启natapp)当然这样还没有得获取域名(其实是可以的了上面说到一种
这个命令行 nohup./natapp -log=stdout& 可以把域名输出到文件nohup中)。
之后找到了一篇文章
http://www.fdxun.com/p/46,这里通过输出log信息的方法来获取域名
需配置config.ini
log=stdout 和 loglevel=INFO
改写这两个。
之后直接用
./natapp -log=-log=stdout
命令行来运行,这个运行会输出一个文件-log=stdout
(在本目录下)这里记录了域名,命令行后面的一串-log=stdout就是文件名或路径可以自己改的。
这样就可以解决后台运行且有域名了。
第三个是最难的也是最重点的---开机自启动
先从
https://github.com/natapp/natapp_autostart下载所需的文件。
按照文件,里面有Ubuntu的脚本(注意这个),树莓派的,和Centos 7的脚本
对号入座就行了,重点来了,按照里面的readme.md文件来一步一做,到了第五步 5.测试 init.d 启动 ,就出错了,出现了
can't open '/etc/rc.common
的错误,在百度上找了,但很少有这个错误的答案,最多人说的就是文件的换行符问题,因为不同系统换行符不同而出错。很快我试了换行符这个方法,然而没有成功,一段时间都在这个问题徘徊,但因为这个问题很少答案,然后我转换方向,从错误信息中找,最终在一个词上找到答案。
我先按照错误路径那里想找到rc.common文件但找不到
(网上说换行符出错的有些说自己的rc.common这个文件没有错),然后在百度上找没有这个文件,也没有答案,好像就没有这个文件一样。在众多信息中发现了一个词inited
这个词在安装Ubuntu那个文件说明上出现过就是init.d,还有几句话
ubuntu18.04中没有/etc/rc.local文件的解决方法
ubuntu18.04不再使用
inited 管理系统,改用 systemd
开机启动的rc.local
而且查了一下systemd也是处理开机启动的
如果看readme.md看到最后就会发现出错的那步开始,就是处理natapp
(这个区别于官网的那个文件,这个是脚本文件)的,使开机执行natapp脚本,然后这个脚本它就会执行它里面的代码,它里面就是自动开启natapp服务的代码。所以结合那几句话,可能是不能继续执行第五步后面的了,因为systemd是最新处理开机启动的东西,而且没有rc.local,应该这样是用不了这个脚本了。于是我转换了想法,就是用新的systemd启动方法,就开始找资料自己动手写.service文件,来使开机自动执行natapp脚本。这条路也很艰难的,通过模仿其他的.service文件和找的资料,但是找到了有个通用的步骤,所以勉强写完了,
但不知道行不行,后面重启了很多次机也没有搞好。莫名又找到了一个网站
详解systemd这个是详解systemd的
主要有这几条命令行:
1.sudo systemctl enable my #开机启动 (这个是自己写的my.service文件)
2.sudo systemctl start my #启动服务
3.sudo systemctl status my #检查启动是否成功
4.sudo systemctl stop my #停止服务 (这些序号不是顺序,只是个数)
试了一下在3的时候在activity出现了红色(就是出错了)看了一下信息跟一开始的错误一样,can't open '/etc/rc.common
后面打开了打开了natapp脚本文件看了一下,又打开了同类的文件看了一下
natapp: #!/bin/sh /etc/rc.common
同类的:#!/bin/sh
所以我觉得了这个版本的Ubuntu应该是没有了intied启动了,没有那个rc.common,所以我试了一下把natapp的那个改成了同类的了。重复试了之前的readme.md的第五步和后面的,的确没有出错了
,但还是没有出现域名的那个文件
(按道理上面已经配置好的了,只要输入那个命令行,既开启natapp,也把域名写出到文件了),但由于脚本的语言看不懂想改也不会改,然后放弃了这个方法。我又试了service的方法,status时看是否开启,然后发现出错了,
是inactive,就是没有开启,所以不知道是我自己写的service出错还是本来脚本就是不能这样直接改的,然后也放弃了这个方法。后面我看了一下树莓派的,和Centos 7的脚本,突然发现Centos
的脚本竟然是.service文件打开一看,看到和我写的my.service的大致部分相同,但这个明显更详细,而且它的代码我也差不多看得懂,发现了它是直接用这个文件直接执行我所需终端打的代码,而不是间接用natapp的脚本,所以我从这里入手。
然后我把它拷贝了一份进etc/systemd/system命名为my.service
(这个命名没有什么影响,只因为我之前有个文件了直接覆盖了,方便)
继续那几条命令行,发现是可以,没有出错。
但一样没有输出域名的那个文件
(之后才发现这个只是名字不一样,应该是stdout,所以还是有输出的),然后看了一下natapp.service代码,发现这个命令:
/usr/natapp/natapp -log=stdout
,对比之前的代码发现,和原来的代码差不多,前面的/usr/natapp/natapp,就是进入natap文件的目录,用natapp文件,然后执行-log=stdout。我把这个命令改成之前那个
-log=-log=stdout(这个命令行可以输出那个文件)
,果然真的就输出了,但不在本目录
(不知道为什么),出现在了计算机根本目录,-log=stdout文件。后来又仔细研究了一下这个代码-log=-log=stdout,应该是这个决定文件的名字,和位置的,所以我改成了
-log=/home/wwl/桌面/wwl.txt
,把文件输出到桌面上,要想知道域名,直接打开找到http://xxx.natappfree.cc就行了。(
每次开机都会写出这个文件,重名上一次的文件,所以每次开机都是那个名字的那个文件才是本次开机的域名)。目前只搞了这么多,虽说也不是非常的方便,但比一开始的什么都不可以的强。怎么说Ubuntu是我的最新学的系统,所以没有windows用得那么顺的,而且Ubuntu也没有windows的那么可视化的,所以打代码少不了。
记录一下,防止以后还会再配置,吸取一下经验,而且在这里也学了不少新知识。