分类 软件技术 下的文章

B560M Pro4 主板安装ESXi与黑群晖踩坑笔记

为了改善家中文件存储的安全性,降低功耗,笔者打算替换掉家中运行黑群晖的那台十几年前的工控机。新的机器使用专业的6盘位NAS机箱,配置采用B560M Pro4主板搭配Intel CORE i5 11500 CPU、16G DDR4 3000 * 2 。有望提升性能、降低功耗、扩充功能、提高数据安全,并且降低房间噪音。

读懂并实践本文,你可能需要预先在技能树中点亮以下技能:
1:基本的Windows系统与Linux Shell操作;
2:基本的网络知识;
3:域名、证书申请相关;

ESXi踩坑

ESXi 6.7 更换证书实现正常HTTPS访问

ESXi装完后默认就是HTTPS访问,但证书确实自签名的。浏览器会报不安全,使用体验很差。于是我们要更换证书,在这之前,要拥有自己的域名,并且配好外网访问或将域名解析到内网地址。
外网访问技术方面,内网穿透或是端口转发;证书的获取,很多云服务商提供了免费的额度,大概阿里云就有吧,申请后会得到一个证书和一个私钥;以上此处不做赘述。

证书两个文件,xxx.crt改为rui.crt,xxx.key改为rui.key 。

启动ESXi后,网页登录,在 主机 页面点击 操作->服务->启用安全Shell(SSH) ,打开SSH访问。

连接SSH后进入 /etc/vmware/ssl 目录,把原有的证书和私钥文件改名或直接删除,然后将刚才改名的文件上传。

重启ESXi,或使用以下命令重启相关服务后新的证书便被应用了。

/etc/init.d/hostd restart
/etc/init.d/vpxa restart

ESXi 6.7 修改配置文件强制设置SATA直通

装完ESXi6.7,发现主板自带的SATA控制器无法像别人那样可以直接设置直通,对应的控制器是灰色的。这时,我们就需要修改配置文件了。

首先,需要确认VT-D已经打开了,这个在BIOS中设置,每款主板设置不一样,相信能玩ESXi的朋友,这个应该都会打开,不知道怎么设置可以使用搜索引擎搜索。

启动ESXi后,网页登录,在 主机 页面点击 操作->服务->启用安全Shell(SSH) ,打开SSH访问。

点击主机->管理->硬件->PCI设备,找到描述内容中含有 SATA、AHCI 字样的设备,记录其 设备 ID供应商 ID注意,若要直通SATA控制器,务必保证安装ESXi的存储器不在直通的SATA控制器下,否则直通后ESXi将无法启动!

使用类似Putty、MobaXterm、xShell等终端工具连接ESXi,账号使用root,密码与网页登录相同。

然后使用 vi 修改ESXi的配置文件 /etc/vmware/passthru.map ,在文件末尾加入AHCI控制器的硬件ID后保存重启,如下所示。vi的使用此处不再赘述。

# Intel Corporation SATA
8086   43d2    d3d0    default

重启后即可在主机->管理->硬件->PCI设备页面下看到SATA设备已经不是灰色了,后面该怎么做直通就不罗嗦了。

ESXi 6.7 直通核显

ESXi在开机时会获取核显的控制权限,用于显示自检信息与DCUI界面,其他并不能作为硬件性能提供给虚拟机用,这样让人感觉有点浪费了核显。我们可以考虑将它直通给某个虚拟机使用。

启动ESXi后,网页登录,在 主机 页面点击 操作->服务->启用安全Shell(SSH) ,打开SSH访问。

点击主机->管理->硬件->PCI设备,找到描述内容中包含Intel字样的条目,自行判断哪个是显卡。选中后点击 切换直通 将其切换为直通,按提示重新引导ESXi。

编辑需要核显的虚拟机,点击添加其他设备->PCI 设备,在下拉菜单中选中需要添加的核显,点击 预留所有内存 ,然后保存。

在ESXi Shell下执行以下命令,让ESXi启动时不去获取显卡控制权,然后重启ESXi。

esxcli system settings kernel set -s vga -v FALSE

Tips:如上设置后,DCUI界面便不能直接访问了。需要访问DCUI界面可在Shell中使用dcui命令进入DCUI,退出按Ctrl+C。

Tips:不再使用核显直通时记得改回去,上面的命令中 FALSE 换成 TRUE 执行一下即可。

ESXi 6.7 直通网口老是提示“已启用/需要重新引导”

为了局域网传输速度,斥资购买了2.5G PCIE网卡,安装后正常识别。切换直通,重新引导后依然提示“已启用/需要重新引导”。

通过搜索发现:

这个是ESXi 对PCIE 设备的 ACScheck 带来的问题。在主机>管理>系统>高级设置里面,找到VMkernel.Boot.disableACSCheck,关掉就好了。


黑群晖踩坑

群晖网口改桥接电脑插群晖上网

因为我财力有限,路由器没有2.5G网口,目前只有我的电脑和群晖有2.5G网口。于是我需要将群晖的两个2.5G网口桥接,然后电脑通过网线直插群晖上网。这样,我的电脑访问群晖的网络速率就是2.5G了。经过搜索找到了办法。

打开群晖的Open vSwitch交换机

登录群晖管理页面,打开 控制面板->网络->网络界面 ,点击 管理->Open vSwitch设置 ,勾选 启用Open vSwitch 然后点击确定。若之前已经启用了群晖的虚拟机功能,你会发现Open vSwitch已是启用状态且无法关闭,则此步骤忽略。

打开群晖的SSH并连接Shell

登录群晖管理页面,打开 控制面板->终端机和 SNMP->终端机,勾选 启用SSH,点击 应用 保存设置。

使用类似Putty、MobaXterm、xShell等终端工具连接群晖。用户名和密码与网页登录相同,要使用有管理员权限的账号。

通过命令配置Open vSwitch

登陆后执行 sudo -i 提升到root权限。通过 ifconfig 命令可以看到ovs_eth0ovs_eth1两个网桥,通过详细的信息判断哪个网桥是连接路由器的,哪个网桥暂未使用给电脑。保留连接路由器的网桥,删除暂未使用的网桥,然后将释放的接口绑定到第一个网桥。

这里,我的 ovs_eth0ovs_eth1 分别对应 eth0eth1 ,大多数双网口群晖应该都是如此。于是我要删除ovs_eth1,将释放的eth1接口绑定到ovs_eth0。命令如下:

ovs-vsctl del-br ovs_eth1
ovs-vsctl add-port ovs_eth0 eth1

执行后将电脑连接通过网线连接到群晖的第二个网口,若配置正确,此时电脑应该可以正常获取IP,正常上网了。若网络不正常,可重启群晖,Open vSwitch的配置将还原。

通过任务计划让群晖开机时自动配置Open vSwitch

若上一步的网络配置可以正常工作,则将这两句命令添加到任务计划开机执行,这样就不用每次重启群晖都手动再配一遍了。

登录群晖管理页面,打开 控制面板->任务计划,点击 新增->触发的任务->用户定义的脚本 。在弹出的添加窗口中,常规选项卡下,任务名称自己编,用户选择 root 、事件选择开机;任务设置选项卡下,在运行命令下的文本框中填入有效的命令,然后点击确定保存即可。

Tips:使用此方法后可能出现自动获取IP异常的问题,建议在设置前先为网络1分配静态IP地址试用,笔者遇到此问题后将IP设为了静态,会关注一段时间。

Edge浏览器菜单透明效果异常导致无法看清的处理方案

前言:

笔者最近新换的电脑出厂预装Windows11,这个系统稳定性真不行,会出很多莫名其妙的问题。于是笔者装了个Windows11 的虚拟机,在虚拟机中安装Windows10还是有点小问题的,这里不展开。完活后发现的第一个问题就是Edge浏览器菜单透明样式异常,完全看不清选项。如下图所示:

Edge

处理思路:

  1. 这个问题一看就感觉与显示渲染有关,很有可能是虚拟机图形显示驱动兼容性问题。首先考虑换个黑主题碰碰运气,试了一下果然不行。

  2. 然后就打开搜索引擎开摆。最开始用关键词 Edge 菜单透明 搜索未果,考虑 Edge 和 Chrome 都采用的 Chromium 内核,会不会有Chrome用户遇到这个问题呢?

  3. 然后换关键词 Chrome 菜单透明 ,找到有用的信息了。

    有知乎用户于19年发文表示Chrome遇到此问题,前辈在文中表示他几乎把能试的都试了,都无效。最后突然想到显示相关office相关软件有个设置叫 硬件加速 前辈找了一下果然Chrome也有 硬件加速 ,然后关掉就好了。

    文末还有不愿透露ID的大佬评论,通过实验项目改一下图形后端渲染模式也可以解决。

详细操作:

于是我们有了两个办法二选一:

  1. 修改ANGLE graphics backend

    该项设置属于实验型设置,在Chrome中是在 chrome://flags 位置,那么在Edge中就应该是在地址栏中输入 edge://flags 回车打开实验项目设置。

    搜索 Choose ANGLE graphics backend 设置项,笔者测试只有 D3D11on12 选项是能恢复正常工作的。如果你不是虚拟机遇到此问题,可以试试换其他选项。如果所有选项都不行,那只好试试下面的办法了。

  2. 关闭硬件加速

    打开Edge浏览器的设置,如果看不清不好选择,可直接在地址栏输入 edge://settings 回车进入。然后在左侧选择 系统和性能 (有些环境中是:系统),然后在右侧的设置条目中找到使用硬件加速,将其关闭

    其实VMware虚拟机的话,还有一个办法:那就是在虚拟机设置中取消 加速3D图形 ,该设置在虚拟机设置的 显示器 部分。这个设置关闭虚拟机才能改哦!(非常糟糕的方案)

总结:为不影响性能,尽量用第一个办法解决。

参考:

Chrome部分框架窗口都变半透明了——WireWolf

GoldenDict搭配Python 程序使用腾讯云机器翻译

前言:

笔者之前曾经写过一篇博文,介绍了自己使用翻译工具的经历。最后还安利了一波 GoldenDict ,同时安利了某位大佬的项目,调用 Python 程序通过 Google 翻译为 GoldenDict 添加整句翻译功能。最近笔者在新买的电脑上配置这套翻译工具时,发现这个Python程序只支持通过Google.com翻译了。而在中国大陆是无法直连Google.com的,于是我希望有一个替代方案。经过一番简单的对比,发现腾讯云提供了易于上手、免费额度足的翻译API,腾讯翻译君也是用的这个API。于是我便参考大佬的项目,通过腾讯云API接口,自己写了一个Python程序。

因为笔者学习Python的总时长不超过5小时,才疏学浅,还请大佬们不要喷我写的辣鸡代码,代码会放到GitHub上,大佬如果看不下去,欢迎添砖加瓦。整个配置分为申请翻译接口和部署Python程序两大步。

仓库链接

申请翻译接口:

目前腾讯机器翻译每月提供5百万字符的免费文本翻译额度,一般的非翻译工作者,这个量应该足够了。只需要开通机器翻译免费账户,到达月免费限额会自动中断服务,不会扣费。当然,你也可以升级付费账号,超出免费额度后付费使用。

  1. 首先我们需要打开 腾讯云 官网并登录,没有可先点击页面右上角注册账号,登录后需要在右上角的菜单中进行个人实名认证。
  2. 注册后点击机器翻译 TMT页面上的立即使用按钮,会跳转到机器翻译的服务控制台。
  3. 在控制台勾选 我已阅读··· ,然后点击免费试用,按提示免费开通机器翻译服务。为避免超出免费额度后被收费,首次开通建议选择试用版,若以后发现免费版不够用,可以随时改付费版。
  4. 开通后,鼠标放在网页右上角头像上,在弹出的菜单中点击访问管理,然后在左侧菜单选择访问密钥 --> API 密钥管理,进入之后会有一个弹窗提示。
  5. 弹窗的内容是告诉你,在目前界面创建的密钥可以调用账号里的所有腾讯云资源,为保险起见,建议创建一个子账号,然后只给这个子账号分配需要的服务对应权限,最后使用子账号创建密钥,这样更安全。
  6. 此时有两种方法:
    • 一种是忽略提示,点击 继续使用 ,然后点击 新建密钥 按钮,表格里就会添加新的密钥,能看到Secretld和SecretKey。这样操作简单,但一旦泄露风险较大。
    • 另一种操作繁琐一些,但更安全。点击 切换使用子账号密钥 ,会跳转到新建用户页面。点击自定义创建,选择 可访问资源并接收消息 ,然后点击 下一步 。新的页面中设置用户信息:填写用户名,备注可填写 机器翻译接口-GoldenDict访问方式:只勾选编程访问。其他不必填写,完成后点击下一步。新的页面中搜索“ 机器翻译 ”,勾选QcloudTMTFullAccess(机器翻译(TMT)全读写访问权限) 即可,然后点击下一步。最后的页面用于审阅之前几步填写的信息,确认无误后点击 完成 即可。此时就会看到这个子账户的SecretId和SecretKey
  7. 完成上面操作后,保持页面,等待下面部署Python程序阶段使用SecretIdSecretKey

部署Python程序:

注意,笔者Python初学者,技术很菜,目前发现程序有个Bug,如果输入的Text包含“®™”这类符号,会报错退出。

安装Python3.3.6以上,到官网下载,装的时候注意勾上pip和PATH。

安装腾讯云SDK:

pip install --upgrade tencentcloud-sdk-python

中国大陆地区的用户可以使用国内镜像源提高下载速度,例如:

pip install -i https://mirrors.tencent.com/pypi/simple/ --upgrade tencentcloud-sdk-python

GitHub下载TencentTrans.pyfavicon.ico两个文件,随手丢在合适的地方。目录不要太深,注意不要有空格。

文本编辑器打开 TencentTrans.py ,修改以下两行中的内容为上一大步中申请的ID和KEY。

SecretId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
SecretKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

GoldenDict 中点击 编辑 --> 词书 ,在 来源 选项卡中选择 程序 选项卡。点击 添加 按钮,类型选择 纯文本 ,名称填写 腾讯翻译君 ,命令行填写 python 文件路径\TencentTran.py %GDWORD% ,图标填写 文件路径\favicon.ico

以上的路径要使用 绝对路径,类似于这样格式 python C:\GoldenDict\XXX\Python.py , C:\GoldenDict\XXX\favicon.ico

填写完成后将前面的已启用打勾,点击确定按钮完成配置。这样就可以使用啦!

参考资料:

NTFS文件系统出错导致文件操作提示:文件访问被拒绝

前言

意外断电导致硬盘文件系统错误,在运行完文件系统检查后,部分文件夹的图标上出现了锁头的图标,尝试打开文件、复制到其他地方,Windows系统提示文件访问被拒绝,您需要权限才能执行此操作。从而导致工作无法进行下去。
此问题常出现在硬盘意外断电、硬盘更换电脑使用等情况。笔者曾多次遇到此问题,但具体情况略有区别。本文旨在整理相关处理方案,方法不一定都能奏效,仅供参考。

注意:即便使用以下方法恢复了对文件的访问权限,也建议您尽快备份磁盘或分区的文件,将磁盘或分区重新格式化再使用。

单个文件的处理

如果只是单个的文件出现了问题,可以尝试手动修改文件的权限信息。

  1. 右击文件,点击 属性 打开属性窗口,点击 安全 选项卡,在点击 高级
  2. 在高级安全设置的窗口中,检查 权限所有者 的配置,如果权限中没有当前登录的用户名或Everyone组,尝试向其添加 Everyone 组,并为其设置允许完全控制的权限(如果有用户或组,但权限配置不正确也如此修改)。
  3. 如果设置权限失败,则检查 所有者 选项卡。如果所有者不是当前登录用户名,尝试改为当前登录用户。如果仍然失败,可能是用户权限不足,若所有者是administrator,可尝试登录administrator账号处理。

命令批量处理

当有大量文件需要处理时可参考上文尝试直接对文件夹或磁盘的安全属性进行设置,但有时可能会遇到失败。那便可以尝试通过命令方式取得文件权限。

  1. 使用管理员权限打开命令提示符。在开始菜单搜索中搜索cmd命令提示符,然后在其上右击,选择 以管理员身份运行 (Windows10在开始菜单的右键里)。

  2. 使用以下命令切换到欲操作的分区或目录:

    cd /d E:\xxx
  3. 使用以下命令获取文件所有者权限:

    takeown /R /F *
  4. 使用以下命令重置文件权限:

    icacls * /T /Q /C /RESET

    到此,您应该重新得到了操作文件的权限。

添加右键菜单处理

通过导入一些注册表信息,添加一个名为 管理员取得所有权 的右键菜单。用来处理此类问题。方法是将以下代码保存为纯文本文件,并重命名为 xxx.reg 。最后双击文件按系统提示导入注册表即可添加菜单。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\runas]
@="管理员取得所有权"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\*\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" & icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" & icacls \"%1\" /grant administrators:F"
[HKEY_CLASSES_ROOT\exefile\shell\runas2]
@="管理员取得所有权"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\exefile\shell\runas2\command]
@="cmd.exe /c takeown /f \"%1\" & icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" & icacls \"%1\" /grant administrators:F"
[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="管理员取得所有权"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Directory\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" /r /d y & icacls \"%1\" /grant administrators:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y & icacls \"%1\" /grant administrators:F /t"

添加右键菜单后,只需在需要处理的文件或文件夹 右击,选择 管理员取得所有权 即可。

使用Linux系统处理

大多情况下,将磁盘挂到Linux系统下复制文件可以忽略文件系统错误导致的权限问题。这需要有一台运行Linux系统的计算机。考虑操作方便,建议选用桌面系统,比如Ubuntu desktop。插入磁盘后应该能自动发现并挂载,图形界面的操作无需多言。如果您选用无桌面的Linux系统,相信您的技术也能自行完成操作。

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 是本地的挂载点,本地的一个空目录(文件夹),需要提前创建好。
  • 后面的 usernamepassword 是用于访问共享的用户名和密码。

挂载命令:

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',"))

总结:

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