Browsed by
Tag: 树莓派

定时清理释放内存

定时清理释放内存

家里有台 Raspberry Pi3, 日常做点小任务,比如做 samba 服务器当 NAS、做 web 的功能测试、学习点 Linux 知识等,基本都是一些负荷不大的任务。不过由于我是死忠的 GUI 党, 因此总是喜欢进入 Pi 那个巨丑无比的界面里进行操作,这也导致 Pi3 的内存会逐渐显得有些捉襟见肘,时间长了,就不得不使用 swap 。这可能会有损 microSD 卡的寿命,因此希望 Pi 能定时清理、释放内存。

网上搜了搜,也比较简单,而且效果比较明显。简要记录一下:

在 /etc/cron.daily 目录下,创建一个 gilson-clearcache 文件,内容如下:

#!/bin/sh
sync
echo 3 > /proc/sys/vm/drop_caches

将这个文件设置为可执行文件即可:

sudo chmod +x ./gilson-clearcache

设置为可执行文件后,可以手工执行一下,可以看到 “free -m” 显示的结果里,“buff/cache available”等项有明显的改善。

不过考虑到 Pi3 可怜的 1GB 内存,这种内存回收方面的改善,估计不能从根本上解决问题,上 Pi4 (2GB或者4GB)或许更好。后续继续观察一下,如果实在不行,就换 Pi4 或者等 Pi5 吧。

Pi3的奇怪故障

Pi3的奇怪故障

最近遇到的奇怪问题,Pi3总是无故崩溃,然后需要掉电重启才可以。后来发现是:由于自己习惯登录图形界面,只要一VNC登录到Pi的桌面,Pi就崩溃。如果仅仅是远程SSH到Pi,则没有任何问题。

对Pi不太熟悉,简单看了一些log,也没找出所以然。只好做了以下步骤:

(1)卸载vnc4server,然后重新安装vnc4server。

sudo apt remove xrdp vnc4server tightvncserver
sudo apt purge tightvncserver xrdp
sudo apt install vnc4server tightvncserver xrdp

(2)运行“sudo raspi-config”,更新,然后选择第7项“Advanced Options”,接着选择“A5 Resolution”,设置成“1280*720”。

完成这些步骤后,同时关闭了蓝牙和无线,只保留有线连接, 似乎VNC到Pi就没有问题了。

Pi3的不足之处

Pi3的不足之处

Pi3延续了Pi系列的特点,短小精干。从目前状况看,稳定性也不错,甚至可以说是一个基本可以商用的小系统了。经过近些年的应用,感觉还是有些不足,比如看看以下数据:

pi@raspberrypi3:~ $ uptime
15:21:51 up 44 days, 21:53, 2 users, load average: 0.81, 1.12, 1.10
pi@raspberrypi3:~ $ free -m
total used free shared buff/cache available
Mem: 927 788 34 9 104 80
Swap: 1123 250 873

连续运行44天,完成各项工作(实际工作负荷并不沉重),内存已经捉襟见肘,swap 使用了 250M 空间,系统明显变慢。当然,这可能是因为这个 Pi3 启动了图形界面,如果只是命令行方式,不会有这么多内存的需求。

考虑到 Pi4 似乎隔了很久还没发布,我倒是希望在 Pi4 中能看到以下改进:

(1)内存加到至少2G,基本能比较完善地支持图形系统了。

(2)支持5G频段的WiFi,希望无线网速越快越好。以太网接口取消算了。

(3)支持SSD。现在SD卡完全就是整个系统的瓶颈,除了体积小之外一无是处。如果能支持M.2 SSD,那就太好了。

网上有些网友也建议增加支持USB3,估计大部分这样的网友是打算用 Pi 组 NAS。我个人觉得意义不是特别大,NAS 更需要存储的完整性、一致性和稳定性,应该直接用专业的 NAS 硬件,Pi 并不适合这种场景。

2019-06-24 更新: Pi4正式发布,非常棒,内存可以选择4G,双频802.11ac!如果稳定性没问题的话,这几乎完美了。

升级树莓派系统至 Stretch 版本

升级树莓派系统至 Stretch 版本

Pi 官方的Raspbian版本已经正式升级到 Stretch,即 Debian 9 系统。目前使用的还是 Jessie 版本, 根据官方的指导文档,进行升级,总体是比较平顺的,当然也有一些需要总结和修订。

在升级之前,首先要把源系统更新(update)、升级(upgrade)。

然后修改软件源文件,将 jessie 修改为 stretch,共有两个文件需要修改:

/etc/apt/sources.list
/etc/apt/sources.list.d/raspi.list

修改完成后,直接更新版本即可:

sudo apt-get update
sudo apt-get -y dist-upgrade

更新过程耗时比较长,耐心等待即可。需要注意的是,Stretch 版本中将 MySQL 替换为 MariaDB 了,因此如果是安装了MySQL, 需要重新安装 MariaDB。 好在替换过程似乎也很顺利,如果是深度使用MySQL,建议仔细检查这个替换。

升级完成后,音频库没有必要,可以删掉;另外有个字体库则需要单独安装以支持中文:

sudo apt-get -y purge "pulseaudio*"
sudo apt-get install fonts-droid-fallback

在体验最新版本的过程中,发现 xrdp 无法使用。需要卸载以前的版本,同时重新安装 VNC 软件。

sudo apt-get remove xrdp vnc4server tightvncserver
sudo apt-get purge tightvncserver xrdp
sudo apt-get install -y xrdp vnc4server tightvncserver

在用 Windows 的远程桌面登录时, 也要明确指示采用 Xvnc 而不是 Xorg 。以前的版本倒是没有这么麻烦,不知道是升级导致的问题,还是新版本就有这个问题。

升级后感觉明显快了很多,这有点意外,毕竟硬件没有改变,基础 Debian 系统在效率方面改变似乎也并不很大。

Pi3

Pi3

Pi3已经上市一段时间了,由于以前的Pi1一直工作得很好,所以没什么动力改用Pi3。最近有用户和朋友相继推荐,心动之下就入了。

Pi3桌面截图
Pi3桌面截图

Pi3的桌面比Pi1实在是好太多了,进步非常明显。不是传统的KDE或者Gnome,感觉有点像lxde或者openBox,使用起来也很爽。

CPU强大好多,居然可以使用Chromium浏览器上网,而且还比较流畅。CPU强大带来的好处就是编译版本快了。以往出个版本要数个小时,现在一个小时左右就可以了。Pi1的CPU随时跑到100%,而Pi3仅仅20%即可,我很满意。当然,缺点也很明显,CPU温度明显比一代要高很多!幸亏买了两个散热片贴上,然后直接裸奔,即使这样依然感觉烫手。

与一代一样,存储IO是个瓶颈。虽然采用class10,UHS1的microSD卡,编译时还是能很明显感受到读写速度慢带来的影响。我觉得Pi未来的发展要重视这个问题,也许内置SSD可以解决。

软件方面有点差异。Pi3默认情况下没有打开SSH和VNC,无法远程SSH进入或者远程桌面接入。需要运行下述命令允许SSH接入和VNC接入:

sudo raspi-config

奇怪的是默认没有安装VNC服务器,因此还需要单独安装:

sudo apt-get install vnc4server

另外,Pi3的硬件做工明显比Pi1要好很多,是个很不错的选择,值得玩家入手。

2017-10-11更新:观察了这几个月的运行情况,感觉很不满意。Pi3的稳定性比Pi1差多了。以前Pi1能正常运行数月不等的时间,而Pi3基本上隔一两天就死机或者重启,CPU发热太严重。如果稳定工作,可能需要在旁边装个风扇主动散热(这只是推测,没实验过)。总之,比较失望。

2017-11-19更新: 以前的推测应该是对的。这段时间天气变凉,Pi3就可以持续、稳定地运行数个星期,目前还在观察。随着冬天气温会更低,估计Pi3稳定运行是没有问题的。

解决DNS污染

解决DNS污染

DNS污染可能是一个比较普遍的问题,主要表现在:(1)DNS查询返回的IP地址根本是错误的。“错误”意思是IP地址要么根本不存在,要么就是个和域名完全无关系的地址。(2)IP地址虽然可能是对的,但是其他参数被莫名修改,例如TTL参数等。

测试了各类DNS服务器,例如阿里DNS、DNSPod(鹅厂)、Google DNS等。无一例外,最终的结果都或多或少被一些看不见的手给修改、甚至屏蔽了。从技术角度上讲,DNS协议本身非常随意、非常粗糙,是典型的互联网蛮荒时代的产物,比如面向UDP、无加密、无鉴权等,因此网络上任何一只手都有可能修改DNS的查询结果。网络进化到IPv6阶段,当然能解决这个问题,不过既然目前绝大部分设备还只支持IPv4协议栈,因此我们还是不得不修修补补来解决这个污染问题。

最根本的解决方法就是加密DNS查询。目前有些DNS服务商提供了私有的加密DNS方式,不过不太通用,需要私有的客户端程序配合。实际上可以不用搞这么复杂,自己建立加密通道,传递DNS消息即可。例如,参考下图的拓扑逻辑:

实现简单DNS透传的逻辑单元
实现简单DNS透传的逻辑单元

在这个网络中,有两个关键程序:dnsProxy和dnsAgent。

dnsProxy顾名思义就是个Proxy,本身并不负责DNS协议的解析,也不保存DNS的查询结果等信息,只是单纯地将DNS消息传递给真正的DNS服务器,并返回相应的结果即可。dnsProxy另一个功能是对外提供加密的数据连接,例如TLS、SSL加密等,甚至可以只是简单地对数据包进行自定义的异或运算即可。另外就是对外提供非标准连接接口,这点非常重要。DNS采用标准UDP53接口作为DNS服务器接口,网络上那些看不见的手,往往就是扫描并篡改53接口的数据包。这个小程序跑在境外(大家都懂的)的一台VPS设备上,推荐采用DigitalOcean,专业的云计算服务商,采用SSD硬盘,价格公道,我们一直用TA,如果你有兴趣的话,请点击这里自行了解细节。

dnsAgent是另一个小程序,主要负责建立与dnsProxy的加密连接,接收普通设备的DNS请求并将其传递给dnsProxy,同时返回DNS结果给普通计算设备。对于网内设备而言,dnsAgent就是个伪装的DNS服务器。同样,dnsAgent其实也不需要关心、也不需要解析DNS协议细节。在我的网络中,dnsAgent跑在一台常年吃灰的树莓派上(还是第一代的)。

实现这些仅仅需要一点UDP、TCP的网络知识,甚至不需要了解DNS协议的细节,无需对DNS数据包做修改。完成后可以愉快地打开很多以前打不开的网站。当然,有些网站始终是打不开的,这是另一个与DNS无关的话题了。

Pi3开卖了

Pi3开卖了

第三代树莓派正式开卖,感觉改进很大,值得入手。最吸引人的除了CPU升级为64位ARM外,还有就是内置WiFi!想当初为了支持USB接口的WiFi,那是一顿折腾啊,Pi3就省事多了。

话说现在手头上还是Pi一代(model B),用起来一直很稳定,相当具有可玩性。

新闻链接:https://www.raspberrypi.org/blog/raspberry-pi-3-on-sale/

 

 

简单安装树莓派

简单安装树莓派

步骤比较简单,采用官方最新的raspbian安装很顺利,简要记录几点:

(1)从官网上下载推荐的win32diskimager软件,将raspbian的镜像写入SD卡。

(2)在路由器上找到raspberry pi的地址,通过ssh直接登录即可。缺省用户名为pi,密码为raspberry。

(3)登录进去后,首先运行sudo raspi-config,将系统扩展至整个SD卡,否则有很多空间无法使用。

(4)安装中文字体:

sudo apt-get install ttf-wqy-zenhei ttf-wqy-microhei

(5)安装xrdp,这样就可以使用windows系统自带的“远程桌面连接”登录raspberry了:

sudo apt-get install xrdp