分类 软件技术 下的文章

PostgreSQL数据库安装踩坑记——升级安装 wiki.js 2.0

前言:

之前搭了个Wiki,用的wiki.js 1.0,如今发现wiki.js 2.0不知更新了几个版本了,这次就把它更新一下。了解了一下,Wiki JS1.X使用的数据库是MongoDB,而2.0则支持多种数据库,包括PostgreSQL、MySQL、MariaDB等多种数据库,但想获得最佳支持,需要使用PostgreSQL,而且如果想实现中文搜索,网上只找到了使用PostgreSQL装zhparser扩展的资料。毫无疑问,笔者只能选择这个之前从未用过的PostgreSQL。整个过程也是参考知乎大佬的帖子完成,因为笔者技术太菜,踩了很多坑。

装完后回过头来发现,如果安装时看到合适的文档,很多坑都是可以避免的。本文不是教程,仅用于排错时参考,切勿跟随本文进行任何安装!

此处以安装后的视角总结PostgreSQL安装如何避免踩坑。新安装时参考官方的安装指导(安装指导居然在Download里面,我开始没看见踩了坑),通过yum安装一定要跟随版本号,否则下载下来的是默认的旧版本,发现不对删除再安装新的就会踩各种坑。如果之前出现了这种情况,参考本文编译zhparser部分,将旧版的包完全删除后再通过官方的方式安装新的包,不要装完新的再删旧的,否则还会有很多小问题。

以下为踩坑记录:

删除旧的wikijs 1.0

Linux下杀死进程后进程自动重启怎么处理

使用kill -15 或 kill -9 可以杀掉进程。但有时会发现杀掉的进程会再次启动,我们可以使用以下命令找到进程的父系进程( PPid ),将其杀掉。杀掉前最好看一下是啥,有的可不能随便杀呀。

cat /proc/<PID>/status

使用 ps -ef | grep 进程关键字 语法查询进程。关键字可以是进程名字,也可以是PID。

以上使用ps -aux也可。

PM2管理器

此处通过查询,发现父系进程是PM2管理器,难怪进程杀掉又起来,居然这玩意有PM2管理器。

使用 pm2 list 可显示所有node项目,此处可以看到每一个应用的id。使用 pm2 stop <编号> 可以停止对应应用。

使用 pm2 monit <编号> 可查看此应用详细信息,比如找出应用目录在什么地方。

安装数据库

connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

首先,用某面板程序里自带的脚本装了一下,装完按照大佬们写的Docker下的配置贴尝试继续,发现执行命令 psql 直接报错,好家伙,第一步就进坑了。

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

最后在StackExchange上找到了某个帖子,全是洋文,看了开头几回帖子说装了没版本号的就这样,建议卸除,手动重装带版本号的。

于是骂着面板边去网上找了篇帖子在CentOS下快速安装和配置PostgreSql,按照帖子里面说的装完了,这里我装的是PostgreSQL 13。或可参考:PostgreSQL官方文档

配置数据库并安装插件

Peer authentication failed for user "XXX"

服务起来后创建了wikiJS的数据库,为其配置了对应的用户和密码,也提升了权限。登录又遇到了错误,提示 Peer authentication failed for user "XXX",网上找了一下,说是因为计算机名和数据库名不一致,这种情况要把默认的 Peer authentication 改成 md5 authentication。

配置文件 pg_hba.conf 用以下命令打开,不同版本路径会有不同,看一下估计就明白了:

vim /var/lib/pgsql/13/data/pg_hba.conf

找到下面的一行:

local  all       postgres                peer

改成:

local  all       postgres                md5

按 ESC 、: 、wq、Enter,保存文件退出。

然后执行 systemctl restart postgresql-13 重启服务,这样就解决了。

ERROR: could not open extension control file "/usr/pgsql-xx...nsion/pg_trgm.control": No such file or directory

紧接着,我就在以下命令处再次进坑了:

CREATE EXTENSION pg_trgm;

出现以下错误提示:

ERROR:  could not open extension control file "/usr/pgsql-13/share/extension/pg_trgm.control": No such file or directory

网上搜了一下,Linux 上PostgreSQL 12 pg_trgm扩展安装 一文给出了方法。我把12换成13就可以啦。

root@VPS # yum install postgresql13-contrib.x86_64
···
database=# CREATE EXTENSIONpg_trgm;
CREATE EXTENSION

然后使用以下命令检查是已经安装的插件:

database=# SELECT * FROM PG_EXTENSION;
  oid  | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
-------+---------+----------+--------------+----------------+------------+-----------+--------------
 14160 | plpgsql |       10 |           11 | f              | 1.0        |           |
 16386 | pg_trgm |    16384 |         2200 | t              | 1.5        |           |
(2 rows)

可以看到已经成了。

编译zhparser

接下来毫无疑问, CREATE EXTENSION zhparser; 出现了错误,这是因为没有安装该插件导致的。按照知乎大佬评论区给出的项目链接找到了编译安装指引。整个过程输出信息几乎完全看不懂,但是最后编译安装的回显信息感觉不太对。装完果然补星。

ERROR:  could not open extension control file "/usr/pgsql-13/share/extension/zhparser.control": No such file or directory

网上看了某个网友的踩坑过程,感觉自己又行了。于是跟着大佬思路一通操作,终于将编译出来的文件安装到 /usr/pgsql-13/share/extension 目录了。

再次执行 CREATE EXTENSION zhparser;,我们得到了以下错误。

ERROR:  incompatible library "/usr/pgsql-13/lib/zhparser.so": version mismatch
DETAIL:  Server is version 13, library is version 9.2.

这次的错误信息我能看懂了,明显是表示系统里有不同版本的PostgreSQL,我运行的服务端是13,这定是之前不知什么时候装了个9.2,然后编译出来的也是9.2,不匹配呀。

想来环境中没有其他项目使用PostgreSQL,那么接下来删除这个没用的玩意儿!先使用 rpm -qa | sort 命令查看装了哪些软件包。此处找到了如下9.2软件包:

postgresql-9.2.24-7.el7_9.x86_64
postgresql-contrib-9.2.24-7.el7_9.x86_64
postgresql-devel-9.2.24-7.el7_9.x86_64
postgresql-libs-9.2.24-7.el7_9.x86_64

挨个将其卸除:

yum remove postgresql-9.2.24-7.el7_9.x86_64

以上命令执行时会自动卸除相关依赖:postgresql-contrib、postgresql-devel

yum remove postgresql-libs-9.2.24-7.el7_9.x86_64

顺便扫了一眼13版的包,发现少装了个 postgresql13-devel.x86_64 ,赶紧 yum install postgresql13-devel.x86_64给装上了。

此时,再次执行 make && make install 发现还是补星。提示:

make: pg_config: Command not found
make: *** No targets.  Stop.

问题回归了,提示找不到文件,看GitHub文档意思说可以这么写为指定的版本编译扩展:

PG_CONFIG=/usr/pgsql-13/bin/pg_config make && make install

还是报同样错误。随手搜一下,Stackoverflow大佬说环境变量问题,大佬写的环境变量前面有 export 。

于是,我在 zhparser 目录下,执行以下代码:

export PG_CONFIG=/usr/pgsql-13/bin/pg_config
make &&make install

这次没错误了,相信插件应该生成了。

bash: XXXX: command not found

还是老命令 psql 连数据库,发现命令无效了。

# psql
-bash: psql: command not found

早知如此,就不卸载旧的了。肯定是把变量空间配置之类的搞丢了。参考:Postgresql -bash: psql: command not found来处理。首先我们需要知道失效的命令对应的文件在哪,此处大量折腾我已经知道在哪了,如果不知道,可以使用 find 命令查找。执行命令 vim ~/.bash_profile ,添加以下行后保存退出,这样,当前的root账户下次登录时就可以了。

export PATH=/usr/pgsql-13/bin:$PATH

重新登录或su切换到postgres账号连接数据库继续配置zhparser插件:

CREATE EXTENSION zhparser;
CREATE EXTENSION

至此,zhparser插件安装成功。

接着继续配置:

CREATE EXTENSION zhparser;
CREATE TEXT SEARCH CONFIGURATION pg_catalog.chinese_zh (PARSER = zhparser);
ALTER TEXT SEARCH CONFIGURATION chinese_zh ADD MAPPING FOR n,v,a,i,e,l WITH simple;

-- [二、PostgerSQL全文检索系统之中文支持_jjj的博客-CSDN博客](
-- https://blog.csdn.net/weixin_40746796/article/details/89209316
-- )
-- 忽略标点影响
ALTER ROLE wikijs SET zhparser.punctuation_ignore = ON;
-- 短词复合
ALTER ROLE wikijs SET zhparser.multi_short = ON;

-- 看看 chinese_zh 在不在
\dF
-- 测试一下
select ts_debug('chinese_zh', '白垩纪是地球上海陆分布和生物界急剧变化、火山活动频繁的时代');

接下来退出连接,重新连入 postgres 数据库,关闭 wikijs superuser权限:

\q
psql -U postgres -d postgres
ALTER USER wikijs WITH NOSUPERUSER;
\q

至此,数据库装完了。

安装配置wikijs 2.x

wiki.js 配置管理页信息后登录提示用户名或密码错误

剩下的安装就比较简单了,参考官方文档,新建一个用户,下载、解压Wikijs文件到合适的地方,将 config.sample.yml重命名为 config.yml .使用文本编辑器打开文件,在指定位置填写数据库配置信息、访问端口等。然后node server 运行,浏览器打开,配置管理员信息。注意管理员的邮箱不能有大写字母,否则待会儿登录时会提示用户名或密码错误。

测试可行后 Ctrl +c 停止,参考官方文档 写systemctl,然后添加自启动并运行服务即完成搭建。

域名访问

wikijs本身不支持域名访问,想要通过域名访问,需要套一个反向代理。笔者用的nginx,因为之前装1.0时已经做过了,我这次不需要再做了。

参考:

群晖共享下文件名中出现回车符导致Windows无法读写的处理

前言:

笔者的群晖里面存储的一些文档,突然之间发现不能读取了,尝试打开时Windows系统提示找不到路径。经过再三尝试发现,这些文件可以在Linux下正常读写。在热心网友们的帮助下,经过探索,最终发现不知在哪个阶段、何种原因,文档的名称和扩展名之间被添加了一个回车符(ASCII控制字符,代码:CR,十六进制编码:0x0D,)。而包含这种特殊字符的文件名,在Windows系统下是非法的。最终在网友们的帮助下,解决了这个问题。

简单说一下是如何发现这个特殊字符的。经过热心网友(flaribbit)指导,我使用 ls -l > filename.txt 命令将目录下的文件信息输出到一个txt文本中。然后使用WinHex之类的16进制编辑器直接打开,找到扩展名前的一个字节,查看其数值,然后从ASCII码表中查询即得到结果。

处理过程:

群晖系统的shell太过简单,很多命令不支持,所以我们需要先把其挂载到其他系统中。比如,我挂到了运行Raspbian系统的树莓派下。

Linux系统下挂载CIFS (samba)共享:

以下命令中:

  • //Server 是服务器(即群晖)的主机名或IP
  • Remote_Diretory 是服务器(即群晖)共享的目录(文件夹)名称。
  • Local_Directory 是本地的挂载点,本地的一个空目录(文件夹),需要提前创建好。
  • 后面的 username 和 password 是用于访问共享的用户名和密码。

挂载命令:

mount -t cifs //Server/Remote_Diretory Local_Directory -o username=xxx,password=xxx

所有操作完成后记得卸载,卸载命令:

umount <Local_Directory>

替换文件名中的回车符:

知道了原因,我们处理的方法有很多,可以写shell脚本,可以用Python写个小程序。此处笔者使用了Linux下的一个软件,名叫 rename。这个软件包群晖上没有,所以我将目录挂载到了Raspbian。

如果系统提示找不到rename,使用以下命令获取:

sudo apt install rename

先使用 cd ./Local_Directory/XXX/ 来到文件的目录,使用以下命令轻松将该目录下所有文件的名称中的回车符去掉:

rename -v  's/\r//g' *

这样就完成了,如果没有其他问题,此时在Windows系统下已经可以正常读写这些文件了。

考虑Linux系统下的兼容性,如果您想要将文件名称中存在的空格换成 _ ,可以使用以下命令:

rename -v  's/ /_/g' *

记得卸载文件系统:

umount <Local_Directory>

以上命令可能看起来有点懵,如果没有学过正则表达式的话。此处稍作解释:

  • -v 是 --verbose,用于在终端中打印成功处理的文件名称,让我们看到处理了哪些文件。

  • 's/ /_/g' 正则表示将空格替换成 _ ,可以看到三个斜杠 / 中有两个位置,前面填入的是要匹配的内容,后面填入要改为的内容。如果后面什么都不填(不是空格!),就是将前面要匹配的内容删掉。

  • 像是要匹配回车符这样的控制字符,或是特殊字符,我们需要使用转义字符来处理,即在前面添加反斜杠。如回车符是 \r 。

如果我们需要将所有的txt文件的后缀名删除,可以使用以下命令:

rename -v  's/\.txt$//' *.txt
  • 正则中 . 前的 \ 是转义字符。

后记:

经过热心网友们的讨论,我们解决了问题。大佬(Sparkle)提供了使用Python实现的代码,笔者没有测试。

import os
for i in os.listdir('.'):
  os.rename(i,i.replace('\r',"))

总结:

遇到问题,我们首先要明白这是个什么问题,如何用简练的文字把问题的现象描述出来。然后在各大搜索引擎中搜索。搜索无果我们回头继续思考,这可能是什么原因?可以借助调试、日志、转储等判断导致问题的原因。最后分析一下,解决问题大致是个什么流程,可以分成哪些步骤,需要学习哪些新的知识,然后一步一步的学习、解决。

Windows 10 下免费安装HEVC视频扩展

前言:

今天导出iPhone SE2的原始照片,发现文件后缀是HEIC,然后在Windows系统下使用系统自带的照片应用无法打开,其提示 显示此文件需要HEVC视频扩展 ,后面还有个 立即下载并安装的选项 。那我肯定得装啦,点击立即下载后弹出了Microsoft Store,居然要收费?像我这种人怎么可能心甘情愿付费,于是便研究了一下如何免费得到它。

后来看到网帖说某些预装系统的品牌机会预装一个来自名为 “来自设备制造商的 HEVC 视频扩展” 的插件,而在以前是可以直接在Microsoft Store中搜索到的,目前我搜索了一下发现搜不到了。使用帖子中附带的链接打开后提示需要兑换代码,这个网上也搜不到。

后来,我在收费版扩展下铺天盖地的骂语中找到某热心网友miku说:

明明有免费正版确搜不到,非要B站导向,微软不要太恶心

突然想起,以前在B站的UWP客户端设置中看到过,是有个安装什么扩展的按钮。果然在里面看到了,点击后直接跳到商店,下载就可以了。

更新,找到了能直接安装的链接,不需要“B站导向”了:

浏览器输入以下代码按回车,可以启动Microsoft Store并进入安装页面:

ms-windows-store://pdp/?ProductId=9N4WGH0Z6VHQ

后面不用看啦。。

操作:

  1. 打开Microsoft Store ,搜索并安装 哔哩哔哩动画 ,安装完成后直接点击 启动 。

  2. 在打开的 哔哩哔哩动画 界面中,点击右下角的齿轮状图标以进入 设置 。

  3. 在打开的设置窗口中,默认的第一个选项卡下,向下滚动鼠标滚轮。在接近末尾的部分有一个 安装HEVC视频解码扩展 按钮。点击它将自动跳转到Microsoft Store中,进入 来自设备制造商的HEVC视频扩展 安装页面。

  4. 我们可以看到上方有一行字提示 “您可以在本机使用 来自设备制造商的 HEVC视频扩展,或···”,其后有一个安装按钮。点击安装按钮,等待其完成安装。

  5. 此时我们再次使用照片应用打开HEIC格式的照片文件,发现已经可以正常查看了。

  6. 至此,免费的 “来自设备制造商的 HEVC 视频扩展” 便安装成功了,如果您不是B站忠实用户、不喜欢B站的二刺螈环境、也没有融入其中的想法,您便可以去卸载 哔哩哔哩动画 了。

卸载哔哩哔哩动画:

如果您需要使用此应用,请忽略以下内容。

  1. 按 Windows徽标键 ,打开开始菜单,点击左上角第三个图标—— 所有应用 。

  2. 在其中找到少女粉色的 哔哩哔哩动画 图标,鼠标右击,在右键菜单中点击 卸载 。

  3. 在确认卸载的提示中点击 卸载 ,完成卸载。

参考:

注:本文图片托管于IPFS(星际文件系统),由CloudFlare IPFS网关提供图片解析,插图可能会随时间久远而丢失!

vi或vim快速指引

前言

之前学习过vim编辑器,这是一款很棒的编辑器,它在很多Linux系统中有提供,使我们可以在shell中编辑文件。然而某些环境下只提供了vi编辑器,而vi编辑器的操作和vim有部分不同,所以我花了点时间将基本操作整理了一下。不要求自己完全掌握这两款工具,只为保证遇到只有vi的环境可以编辑文件。

vi / vim最最最基本的操作流程:使用vi或vim后跟随文件名打开文件,在此时所处的命令模式下通过方向键找到要修改的地方,按shift+x向前删除内容,按a进入插入模式,使用键盘输入要改的内容。输入完成后按ESC回到命令模式,输入 :wq 按回车保存退出,弄烂了不想保存则输入:q! 按回车强行退出。

创建文件:

创建文件是很简单的操作,我们可以使用系统内置的 touch 命令创建一个文件。

touch test.txt

也可以使用vi或vim来创建,如果此处没有这个文件。如果有这个文件的话执行此命令是打开文件。此命令后面的参数可以是相对路径也可以是绝对路径。

# vi:
vi test.txt

#vim:
vim test.txt

此命令执行后vi或vim会打开并处于命令模式,想要正式保存退出,可以按 Esc键 确保进入命令模式,然后按 : 进入底行(扩展命令)模式,输入 wq 命令按回车键创建保存退出。

编辑器工作模式:

使用vi和vim编辑器首先要了解工作模式的概念,类似的,它们均提供了常用的三大模式。此处列表对比:

vi vim
命令模式(Command Mode):
打开时默认模式,按Esc进入
用于一般按键命令操作,如快速移动光标、复制删除等。
命令模式(Command Mode):
打开时默认模式,按Esc进入
用于一般按键命令操作,如快速移动光标、复制删除等。
插入模式( INSERT Mode):
命令模式下按 a 或 i 进入
用于文本输入
插入模式( INSERT Mode):
命令模式下按 a 或 i 进入
用于文本输入
末行模式(Last line Mode):
命令模式下按 : 进入
扩展的命令输入,比如保存和退出(wq)。
扩展命令模式(Extended Command Mode):
命令模式下按 : 进入
扩展的命令输入,比如保存和退出(wq)。
vi 无此模式 可视模式(VISUAL Mode):
命令模式下按 v 进入
此模式包含可视内容选择操作。

vi和vim在打开时默认处于命令模式,此模式用于移动光标,定位编辑点,复制删除内容。当我们将光标移动到目标编辑点后,进入插入模式以使用键盘键入内容。若完成某位置内容键入后想要移动光标,则回到命令模式重复操作。若完成编辑需要退出,也是先回到命令模式,然后进入扩展命令模式,输入相关命令退出。命令模式是一切的开始,其他模式都需要从此进入,退出其他模式也将回到命令模式。

vi和vim在工作模式方面操作基本一致,只是vim多了一个可视模式。此功能在我们简单编辑文件时意义不大。以上大致的说明了编辑过程中三大模式该在什么阶段使用。

插入模式:

所谓插入模式就是能够打字输入的模式。使用 i 键进入插入模式,光标保持不动;而使用 a 键进入插入模式将使光标自动后退一位,退出模式时光标会前进一位。顺便一提, 按键 I、A、O 均有进入插入模式的功能,且分别使用大小写键入时效果不同,有兴趣可自行尝试或参阅:vim非完全学习手册。

注意:部分环境中的vi(例如处于vi兼容模式下的vim)无法在插入模式下通过方向键移动光标,其表现为按 上下右左 键会出现字符ABCD,这可能与我们常见编辑器的操作不同。此时我们可能需要按 Esc 键回到命令模式才可通过方向键移动光标。以上不难看出,使用 a 键进入插入模式明显更符合大多操作习惯。

注:导致以上问题原因可能有很多,也有不同办法可以处理,如果是vim处于vi兼容模式导致的此问题,可以在扩展命令模式执行set nocp 命令使其退出兼容模式解决。参考链接中提供了一篇相关文档供参考。

命令模式:

vi和vim编辑器打开时默认处于命令模式,vim可能会在左下角标记-- INSERT --以指示插入模式,但vi可能没有。如不在或不确定是否处于命令模式,请按Esc键进入。

注意:vi和vim编辑器命令模式下输入的命令,无论单字符还是组合键,都是大小写敏感的,操作时请注意大小写!

光标的移动:

事实上,简单的编辑并不需要了解太详细的光标移动操作,会使用方向键移动光标也能完成。了解光标移动可以快速定位编辑位置,追求尽快开始使用可以跳过本节。

  1. 使用键盘上的方向键移动光标,但考虑更高效的使用,也可尝试学习vim的命令键:h(左)j(下)k(上)l(右)。
  2. 按键 0 快速跳至当前行首;使用按键 $ 快速跳至当前行末。(注意:$需使用Shift+4实现)
  3. 使用 gg 按键快速跳至首行;使用 G 按键快速跳至末行。(注意前者时按两次g,后者通过Shift+G实现)
  4. 使用 Ctrl+f 向后翻一整页,使用 Ctrl+b 向前翻一整页。(使用键盘上的 Page Up 和 Page Down 也可实现)
  5. 使用 7 G 按键快速跳至第七行;即通过按出 行号后再加大写字母 G (即Shift+G),即可快速跳转至指定一行。
  6. 可以使用 /string 命令从内容中查找关键词;string表示字符串,即输入关键字进行查找;我们可以使用(n/N)在查询到的多个结果中上下移动箭头。我们可以使用 /^string 这种,关键字前加 ^ 符号,指定搜索以此关键字开始的行; 使用/string$ 这种,关键字后加$符号,指定搜索以此关键字结尾的行。

编辑命令:

  1. 按 x 键可删除光标所在字符,按 X 键(大写,即 Shift + x )删除光标前的一个字符。注意,虽然大多版本的 vi 或 vim 中可以直接按 Backspace 键向前删除,但某些环境中的 vi 、或某些版本的 vi 中Backspace是无效的,所以需要牢记标准操作。追求尽快开始使用着本节剩余内容可以跳过。
  2. 使用 dd 剪切光标所在行内容;使用 5dd 剪切光标及以后共5行。此命令常用于删除行。
  3. 使用 yy 复制光标所在行内容,使用 p 键将复制或剪切的内容粘贴(paste)到光标处。
  4. 使用 u 撤销(undo)之前的操作,使用 Ctrl+r 组合键重做(redo)撤销的操作。

退出:

  • 命令模式下,按住Shift键按两次 z 键,即输入 ZZ 即保存并退出。安全考虑,此方法不建议使用,建议使用扩展命令模式下的退出命令。

扩展命令模式:

在命令模式下按 :(即Shift+;) 键进入扩展命令模式。此模式亦有人称其为末行模式或底行模式(可能于命令于末行输入有关)。在扩展命令模式下,输入扩展命令然后按回车键执行命令。如需从此模式回到命令模式,按 Esc 键。

保存与退出:

  1. 在扩展命令模式下,输入w回车可保存文件。
  2. 在扩展命令模式下,输入q回车可退出,但文件有未保存更改时会失败。
  3. 在扩展命令模式下,输入wq回车可保存并退出。
  4. 在扩展命令模式下,输入w!回车可强行保存。
  5. 在扩展命令模式下,输出q!回车可强行退出,不保存退出。
  6. 在扩展命令模式下,输入wq!回车可强行保存并退出。
  7. 在扩展命令模式下,输入x回车可保存并退出,此处x为小写,大写X为添加密码,慎用!

环境配置:

vi/vim编辑器的设置,称之为环境配置。注意某些vi编辑器可能没有此功能。

# 设置显示行号
set nu

# 取消显示行号
set nonu

# 关闭 vi 兼容模式
set nocp

总结:

想要vi和vim都用的好,建议养成以下操作习惯:避免在插入模式使用方向键移动光标,使用 a 键进入插入模式而不是使用 i 键,使用 x 键或 X 键(大写,即 Shift + x )删除字符,而不是使用 Backspace 。

参考:

为JustHost.ru的CentOS7小鸡开启IPv6

前言

笔者有个从JustHost.ru购买的新西伯利亚小鸡,用途懂得都懂,不懂得,说了你也不明白,不如不说。你们也别来问我怎么了,利益牵扯太大,说了对你们也没什么好处,当不知道就行了。小鸡很便宜,服务页面很简陋,购买后会把一些机器信息发送到注册邮箱。一直以为这么便宜的机器有IPv4就行了,万不会提供IPv6。后来偶尔看到管理页面上标识有IPv6地址,看了一下购买时的邮件,邮件中有IPv4和IPv6地址和网关等信息。尝试Ping提供的IPv6地址提示无法访问目标主机,通过在小鸡上运行 ip a 命令查看其只配置了IPv4网络信息。官方支持IPv6但没有配置IPv6信息导致无法使用IPv6的情况,我们只需要在为网卡添加IPv6信息即可。

注:本文中涉及的敏感信息包括不限于MAC地址与IP地址等均为编造,非笔者所有,如有雷同纯属巧合!

操作

  1. 找到购买小鸡时的邮件,以获取IP配置信息。

  2. 小鸡执行 ip a 命令,查看所有网卡的信息。一般会有两个接口,其中 lo 是回环接口,那么另一个应该就是网卡了,比如笔者这里的名称是 eth0 。此处我们应该会看到一个开头fe80的本地v6地址,但没有服务商分配给我们的公网地址。

    [root@XXX ~]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 55:55:aa:aa:55:aa brd ff:ff:ff:ff:ff:ff
        inet 8.8.8.8/24 brd 8.8.8.255 scope global noprefixroute eth0
           valid_lft forever preferred_lft forever
        inet6 fe80:::::8/64 scope link noprefixroute
           valid_lft forever preferred_lft forever
  3. 使用以下命令确认eth0配置文件的存在,正常应该可以看到名为 ifcfg-eth0 的配置文件。

    [root@XXX ~]# ls /etc/sysconfig/network-scripts/
    ifcfg-eth0      ifdown-post      ifup-bnep   ifup-routes
  4. 使用以下命令备份 ifcfg-eth0 文件为 ifcfg-eth0.old 。

    [root@XXX ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.old
  5. 使用 nano /etc/sysconfig/network-scripts/ifcfg-eth0 命令打开配置文件,参考购买时官方邮件为其添加IPv6信息。主要修改 IPV6INIT参数为:yes,并随后添加IPv6默认网关和地址信息。

    ...
    IPV6INIT="yes"
    IPV6_DEFAULTGW=2a00:b700:1::1
    IPV6ADDR="2a00:b700:1:3e::175/64"
    ...
  6. 修改完后按 Ctrl+O ,然后直接按 Enter 键保存。按 Ctrl+X 键退出NANO编辑器。

  7. 运行以下命令重启网络服务。(也可以使用systemctl restart network命令)

    [root@XXX ~]# service network restart
    Restarting network (via systemctl):                        [  OK  ]
  8. 此时,再次查看eth0接口信息,应能看到新添加的IPv6地址,通过以下命令可以查看特定接口的信息。

    [root@v119813 ~]# ip a show eth0
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 55:55:aa:aa:55:aa brd ff:ff:ff:ff:ff:ff
        inet 8.8.8.8/24 brd 8.8.8.255 scope global noprefixroute eth0
           valid_lft forever preferred_lft forever
        inet6 2a00:b700:1:3e::175/64 scope global noprefixroute
           valid_lft forever preferred_lft forever
        inet6 fe80:::::8/64 scope link noprefixroute
           valid_lft forever preferred_lft forever
  9. 如果正常,此时在我们本地应可以Ping 通 小鸡的IPv6地址了。

参考

使用RTL2832电视棒接收ADS-B信号追踪飞机飞行轨迹

前言

无线电技术在当今世界非常重要,从生活中的遥控小玩具到我们通信的手机,再到航空航天,无时无刻不起到重要作用。从麦克斯韦提出电磁场理论并预言了电磁波存在,到业余无线电爱好者发明早期的“电报装置”-“火花电台”;无线电技术的时代就拉开了序幕。随着电子技术的发展,半导体技术到超大规模集成电路的发展,也让无线电通信技术从模拟通信转向数字通信。如今在一个芯片上集成调制解调、编码解码、发射接收已经成为一件非常简单的事情。但是如此高的集成度,便意味着编解码算法的的升级换代需要更换整个芯片处理,这既是浪费也是麻烦,于是人们就想有没有办法设计一套硬件,其信号的编解码、调制解调等都可以通过软件数据定义实现,硬件只提供一个信号发射接收的平台。于是软件定义无线电的概念便出现了。

RTL2832电视棒的价格非常便宜,只需要人民币50元左右即可在淘宝买到。它是基于瑞昱RTL2832方案实现的一个USB DVB-T电视调谐接收器,将其插在电脑USB口上,安装一个软件就可以在电脑上接收电视节目。目前中国大陆用它看电视可能够呛了,也许国外可能有市场吧。国外某大佬发现RTL2832有个特殊模式,可以直接将原始数据传输到电脑上,其工作频率大约在20M~1700M范围。随后几位大佬逆向了这货的驱动程序、接口,成功的把原始数据拉到了电脑上,然后他们开发了各种处理这种原始数据的程序,为我们带来了低廉的软件定义无线电方案。更多硬件相关资料见文末参考链接

入手此物后作为入门的第一件事自然就是跟随前辈的脚步,复现使用其配合SDR#接收FM广播的用途。国内应该不会有人买这货看电视吧!主要操作就是下载SDR#,解压并运行内部的一个批处理下载扩展文件,使用zadig替换驱动程序并最终运行SDR#接收FM广播。确定无误后可以尝试接收民航频段与对讲机频段。通过这些操作,你已经初步领略了软件定义无线电的魅力,同一个硬件,可以收FM广播频段,也可以收对讲机使用的430M频段;可以按调频的方式解,也可以按条幅的方式解,而这设备只需要人民币50元左右,这便是软件定义无线电的优点。以上这些都非常简单,本文就不再赘述。

本文目标是接收ADS-B信号以追踪飞机飞行轨迹。民航飞机为了安全性等原因,设计了一个ADS-B发信机,具体历史不再赘述。飞行中它不断的向周围发送一个ADS-B信号,信号频率为1090MHz,信号中包含了飞机的ICAO编码、飞机航班号、机型、经纬度、当前高度、目标高度、速度、航向角等信息。我们接收这些信息后就可以在地图中标记出飞机的位置,了解到飞机的航线,通过航班号我们可以在互联网上查到这架飞机的航线等信息。

操作

整个过程并不复杂,大致如下:首先下载相关工具,将电视棒接好天线通过USB接口与电脑连接并安装驱动程序;配置软件RTL1090,其解码RTL电视棒获取的数据并在本地搭建一个服务端。然后安装配置VirtualRadar,其提供一个可以通过浏览器访问的图形界面。以下为详细过程:

安装配置RTL1090套件

  1. 在RTL1090官网下载RTL1090-IMU,按官网介绍,这是一个安装和维护工具,它通过网络获取最新版本的RTL1090主程序以及RelWithDebInfo与zadig。RelWithDebInfo是RTL_SDR工具包,它提供各种访问接口;zadig则是驱动程序。

  2. 在欲安装的位置新建一个文件夹,名称自拟。将RTL1090-IMU的程序解压到文件夹中,将RTL2832电视棒插入到USB接口,双击运行。在主界面的Install and Update页面右侧点击New Install然后选择操作系统,然后点击Return to application folder按钮将安装目录设置为当前文件夹。继续等待安装工具完成相关文件的下载,这个过程中工具会自动解压相关资源并放在正确的位置。

  3. 等待其完成安装后,Zadig会自动运行,若出现UAC提示,请同意其管理页权限。参考安装工具的提示完成驱动安装并关闭RTL1090-IMU。具体如下:

    在Zadig中勾选Options->List All Devices,然后在设备列表中尝试选择BULK-IN INTERFACE (INTERFACE 0)或类似RTL2832XXX字样的设备。选定后应该能在下方的USB ID中看到0BDA:2832或0BDA:2838字样,即为正确选择设备。箭头右侧应选择WinUSB而不是其他,然后点击下方的Install Driver按钮开始安装驱动,完成后关闭Zadig。

  4. 在RTL1090官网下载最新版主程序包,覆盖解压到之前建立的安装目录。

  5. 双击运行 rtl1090.exe ,点击START按钮若出现防火墙提示,请允许。这样便完成了RTL1090的配置。此时正常应能收到上空经过飞机的信号了,相关信息可以在Table选项卡中看到。

安装配置VirtualRadar

  1. 在VirtualRadar官网下载Virtual Radar Server并安装,安装过程中Server Port页面可以设置网页访问的端口。然后下载Database Writer Plugin选择同一目录安装。
  2. 右键管理员权限运行主程序,点击Tools->Options,在左侧选择Receivers->Receiver。在右侧点击Wizard按钮打开接收器配置向导,Kind of receiver选择A software defined radio,Decoder program选择RTL1090,是否运行在本地选择Yes,然后点击Finish完成向导。
  3. 此时点击Test Connection按钮,应该会弹出Connection can be made的提示,如果不正常请检查防火墙设置、软件配置等信息无误,并尝试重启RTL1090和Virtual Radar。若一切正常建立,RTL1090软件中右下的TCP图标应该会亮起。
  4. 确保右键管理员权限运行VirtualRadar,点击Tools->Plugins,在Database Writer中点击Options,勾选Enabled,点击Create Database后点击OK。
  5. 此时,访问本机IP:之前设置的端口号即可访问飞机追踪页面。点击Menu -> 第二个图标,将语言设置为中文。然后点击菜单->选项,勾选设置当前坐标,然后去地图上拖动地图到自己所在的区域,然后在此页面取消勾选。以此完成当前坐标的设置,这样每次打开页面便会默认加载正确的位置。
  6. 勾选通知所有已选择的航空器,可以在监测到飞机时语音播报相关信息。其他设置可自行研究。

参考