​ 小时候,人们都说要学好21世纪的三个宝:英语、计算机与驾照。英语基本上上了高中,读了大学也都会那么一点,起码不像火星文;驾照成年了早晚也都有的事;计算机的话,要说熟练使用,可能大部分人也算,但我觉得编程也可以作为早期英语一样地进行学习。

​ 编程对于大部分人来说还是比较陌生的,现在很多小孩小学就开始在参加编程训练了,也是非常好的开始。我个人认为,编程并非遥不可及的事情,相反,类似英语,它更应该是大部分人应该了解并稍微深入的技能。

​ 编程从功利层面能够带来的好处就很多,比如说下岗了还可以换个职业😂,工作中用来解决一些重复枯燥或有预见性的事情,生活中用于取悦自己或者他人等等。从精神层面可以培养理性与逻辑思维,培养举一反三、灵活变通、化繁就简的能力。

​ 大多数人受限于专业知识的欠缺,对编程非常抵触,也可能觉得遥不可及,所以我就是想从自己的学习过程中,尽可能分享出来,也许某篇某段能够带来启迪,那就是再好不过的事情了。毕竟,我也是非科班出生,对于编程的理解,跟多数人有共通的基础。

​ 编程确实是挺好玩的。

​ 18年前的大部分群晖都没有NVME接口,要增加ssd缓存的话,需要占用一个盘位,若是读写缓存,则需要两个盘位。对于群晖这种盘位特别宝贵的机器来说,这是一件非常不值得的事情。

​ 当然,从缓存本身的效果来说,有一定的效果,但是并没有直接在ssd上面操作来得快,即便是数据已经在缓存上面。可是,对于电子产品爱好者来说,有没有大作用是其次,主要是所有功能都要拉满。

  1. 打开群晖SSH功能,SSH登入后,sudo -i 提升权限为root;
  2. 群晖的配置文件在 /etc/synoinfo.conf /etc.defaults/synoinfo.conf 这两个地方,内容好像是一样,我建议都修改,实际上我并不知道是defaults里面生效还是etc下面。我这个ds916+由于是8g版本,居然还有一个 /etc/synoinfo_8G.conf ,丧心病狂!为了不出问题,我还是都改了,保持一致性是我长期保持的优良品德;
  3. 修改要点有:maxdisks, esataportcfg, usbportcfg, internalportcfg 这几个参数。我们可以分别解释一下

    • maxdisks #表示最大的磁盘数目,我的理解是最大内部磁盘数,反正原来是4,就改为5,心情好改为6 7 8 9都可以
    • esataportcfg = 0x10 #表示esata盘位的位置,这里都是16进制,换算为2进制,就是10000,意思就是esata的盘位在倒数第5个位置,那么我们由于要改这个esata为内置,所以要把那个1改为0,于是变成了00000,对应的16进制就是0x0
    • usbportcfg = 0x70000 #上面忘记提了,二进制换算最方便的是windows自带计算器,切换为程序员模式,就可以随便转换了。这个对应的意思是 111 0000 0000 0000 0000 说明支持3个usb端口,位置在左起前面三个,usb端口我不建议改为内置的磁盘,因为usb本身还是有用的,外加usb转接的SSD磁盘并不能识别为ssd,也不能添加为缓存。
    • internalportcfg = 0xf #同理,对应的就是 1111 ,我们将上面的都一起表示,整个磁盘位就是 111 0000 0000 0001 1111 假如说全部要作为内部磁盘使用,那就是把这个internalportcfg改为0x7001f,但是我们只是把esata作为内部使用的话,那就是0x1f,把上面esata的那个10000与1111做或运算,就是11111。
  4. 修改完成之后,就可以重启机器生效啦!
  5. sata转esata建议购买带一个usb接口供电的,同时也建议外置ssd用作读缓存,而不要作为真正的数据盘,以免异常引起数据丢失等情况。

windows计算器程序员模式如下所示:

windows计算器程序员模式.png

淘宝上面esata转sata数据线如下所示:

esata转sata数据线样式.png

背景

​ 19年的时候,官网买了一个大疆RoboMaster S1机器人,本用来讨好小孩,没想到小孩子并不太喜欢。于是闲置了很久。半年前,想起来玩一下,登录进App后提示固件需要更新,我特别喜欢更新,不管是各个设备还是手机,看到就想点,总以为会有更好的功能或特性。为了保证更新不出问题,我特意把电池充满电,然后点了更新。

故障

​ 点击更新后,机器人有了反应,旋转条开始只有一格在闪,但是等了好久,依然如此。我不敢贸然断电重启,耐心等到了电池完全没电,还是没能升级好。

有种不好的预感。

​ 重新换了电池,直接无法启动了。尝试usb连接电脑,无任何反应;重置wifi,依然无果;拆下主板,想找是否有ttl接口可以进去看看系统启动情况,没找到-_-! 。彻底当了一个玩具车玩了。

转机

​ 今天想起来还是寄给大疆维修下,在官网创建了自助维修单,想了想,再测试一次。于是,充了一点电,在开机的时候,发现我之前有一个tf卡在上面,本来是用来拍照与录像的。想着是否与这个有关?果然,拔掉tf卡之后,居然开始报20% 30%...开始固件更新了。。。

修好了

​ 我只能说,这确实也是之前疏忽了,一般来说,升级或者排除故障就是尽可能去掉外围的东西嘛。希望有同样问题的朋友,能先看到我这个记号。

很久之前,准备部署一套gitlab给公司用来代码托管,同时也解决远程访问代码的需求。以为这个开销很小,结果没想到内存需求至少在4G,阿里云的4G服务器其实还是很贵的。当时公司很穷,同时也担心线上服务器被盗,数据丢失等等问题。于是想着在公司内网里面有一个群晖既可以运行gitlab,也做了raid1数据备份,只是没有公网ip,需要阿里云的公网ip来进行转发。当然,其实有公网ip,80,443端口也是不会被开放的。于是,一个隧道软件的需求就出来了。

那时候没有发现frp这个软件,自己用swoole写了一个服务端与客户端,原理都是类似,就是服务器端与客户端初始化1条或者多条tcp链接,服务器端把接收到的请求都转发给客户端,同理客户端把局域网服务器响应的内容都转发回去。当时我记得有一个问题就是大文件传输失败的概率很高,好像跟缓冲区有关系,因为局域网速度快,外网速度慢,返回的时候,客户端的缓冲区也许就会装不下了。就这样的半成品,还是勉强用了几年,总体来说效果不错。达到了省钱与可控的目的。不过,缺点是实际上传输的流量是实际的两倍,因为一来一回了,所以最终是否省钱,也是要看业务情况的。推荐做渲染,集群计算等等可以采用这个方式,那个成本节约得不是一点半点,毕竟阿里云那边只需要1核512M内存即可,1核还是弹性那种。内网自己非常个性,随便怎么搭建,数据传输还快。

整体背景介绍完了,现在就是说下具体的工具:frp,项目地址:https://github.com/fatedier/frp ,功能就是我上面所说,不过他的特点在于,监听的对外服务端口居然是由客户端动态指定的,这个倒是很有意思的一个点。具体的详细信息可以在他的项目文档中查看,在此仅仅对常规使用做一个示例:
下载来的文件中分为 frps-服务端,也就是有对外ip的机器运行端;frpc-客户端,需要映射出去的内网服务器,这个机器不一定非要是具体的业务那一台,内网用来转发的机器就可以。
frps.ini是服务器端的配置文件,frpc.ini是客户端的配置文件。配置起来也很简单,服务器端仅需指定控制端口即可,默认是7000,控制端口也就是内网客户端与服务器端的通信端口。需要注意的是,建议一定加上token字段,如 token = xxxx,以防有人直接连接上来,劫持了服务或者薅了羊毛。在此,顺便一提,在所有对外的服务中,都需要有一定的安全意识,密码强度,哪些端口是对外开放的,均需进行配置。对于特别重要的服务器,22端口还需要限定访问ip等。

[common]
bind_port = 7000 #通信绑定端口
token = helloworld #通信暗号

然后启动服务,因为程序本身并不支持以守护进程运行,推荐使用nohup命令:

nohup ./frps -c ./frps.ini 2>&1 >./server.log &

frpc.ini是客户端配置文件,客户端配置主要是指定服务器端的ip与端口,以及具体转发的内外信息:

[common]
server_addr = 1.2.3.4 #楼上外网服务器的地址
server_port = 7000 #楼上的通信端口
token = helloworld #楼上设置的口令
[web1] #这个名字可以自己取
type = tcp
local_ip = 192.168.1.2 #不一定是本机地址,本机可以访问的地址均可
local_port = 443 #内网服务对应的端口
remote_prot = 443 #外网服务器对外监听的端口

接下来依然是启动服务,

nohup ./frpc -c ./frpc.ini 2>&1 > ./client.log &

然后就可以啦,更多特性还是仔细翻看下文档。常规来说,tcp的转发就够了。希望能给初创公司或个人爱好者提供帮助。

默认情况下,安装后的Apache2的配置路径在 /etc/apache2 (ubuntu) 或者 /etc/httpd (centos)。

在此目录下,有 conf-available/enabled mods-available/enabled sites-available/enabled等目录。

仔细观察可以发现,enabled目录下的文件是软连接available目录下面的文件,apache实际加载的是enabled目录下面的配置文件。

那么,这样做的目的是什么呢?

我们经常会有这样一种场景:有A配置,B配置,C配置,偶尔要临时屏蔽一个,但是又不想删除,因为删除了之后又要重新配置生成。于是在apache这里就变成了你可以把配置都放到available目录下面,然后如果需要使用的,就在enabled里面软连接对应的文件。在这里顺便一提,软连接的命令是
ln -s /targetfile/path /newfile/path
如果暂时不需要,直接删除对应的软连接即可。
特别提示,如果新增加一个配置,别忘记在enabled目录中增加对应的链接,比如说新增https访问。

conf表示配置,mods表示模块,如ssl,rewrite等,sites表示vhost。

mods推荐采用a2enmode命令来开启,省去配置的环节。