Lexsion 发布的文章

腾讯云函数自动领取EPIC每周免费游戏

前言:

EPIC自20年某个时候开始,就每周赠送一两个免费游戏,大多送的都是些比较便宜的货,但有时也会送出一些像GTA5这样的大作。基本每周四的晚上差不多就可以领取,以往我都是每周五晚上领。最近笔者的主力PC坏了,暂时没有像样的机器用了,喜加一获得的免费游戏也没有电脑可以玩了。但是喜加一不能遗漏,为了贯彻 我可以不用,但不能没有 这个宗旨,游戏还是要领取的,有没有更省事的办法呢?

本着坚信 我遇到的问题,很多人也应该会遇到 的观点,我直接在GitHub上以 EPIC免费游戏 关键词进行搜索,果然找到了几个项目。其中 epicgames-claimer 项目有300+ Star且最近有更新。于是便参考作者给出的文档将其部署到了免费的腾讯云函数上。笔者测试的结果是游戏领到了,但是配置的Server酱推送结果没有起作用。函数运行了十几分钟,打印了巨量的日志,使用了80GB·s的资源,这与其他的签到类云函数相比,已经是非常高的资源消耗了。但索性一周只领一次,其消耗的资源还在免费范围内。感觉这个项目挺有趣,可能会有其他人也需要,所以笔者将其记录下来。

大佬的GitHub仓库已经翻车了,我把文件传到了IPFS网络,需要的朋友可以试试能否部署成功。

部署过程:

  1. 将文件 epicgames_claimer.pyrequirements.txt 从Github下载到本地并打成Zip包

  2. 打开腾讯云控制台,有账号直接登录,没账号注册再登录。找到并进入云函数界面。

  3. 切换函数服务的区域,比如我选择的香港。然后点击 新建 ,打开新建页面。

  4. 选择 自定义创建事件函数 、 填一个自己能认出来的函数名称、 部署方式选择 代码部署 、运行环境选择 Python3.6

  5. 函数代码中的提交方法选择本地上传zip包,执行方法填 epicgames_claimer.main_handler ,并上传之前打包的ZIP压缩包。

  6. 展开高级配置,将内存改为1024MB,执行超时间改为900,添加EMAIL变量值为EPIC的登陆邮箱、PASSWORD变量值为EPIC登录密码,再添加一个推送变量,比如笔者使用的Server酱变量名为PUSH_SERVERCHAN_SENDKEY,其值为Server酱的SendKey。

  7. 其他保持默认,点击完成等待完成创建。

  8. 打开此函数的配置页面,打开函数管理,点击函数代码。在网页的代码编辑器中左侧导航栏的src目录右击,选择在集成终端中打开。运行以下命令:

    pip3 install -r requirements.txt -t .
    mv bin/pyppeteer-install .
    ./pyppeteer-install
    cp -r /root/.local/share/pyppeteer/local-chromium/*/chrome-linux .
  9. 完成后点击部署,并运行此云函数,观察是否能正常使用。

  10. 若可以正常使用,则点击 触发管理创建触发器 。触发方式选择 定时触发 ,名称按需设置,周期选择 自定义出发周期 ,按照文档填写Cron表达式,比如 0 10 15 * * FRI * 是每周五15点10分触发一次任务。勾选立即启用,点击提交完成定时触发的配置。

注意:

使用此方法需要关闭EPIC账号的双重验证,这个可以在EPIC官网的安全设置中找到。

据说EPIC限制了单个IP领取免费游戏的数量,所以使用云函数可能领取不成功,使用此函数还需多关注EPIC邮件通知,因为游戏领取成功后官方会发送订单邮件。

这个项目使用了浏览器,所以占用资源较大,内存务必配1024MB。如果配置了多个领取函数,请注意资源消耗。

有条件建议在本地搭建相关服务,而不是云函数。

参考:

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系统,相信您的技术也能自行完成操作。

Freenom域名注册的常见问题与自动续期

前言:

最近突然想再注册一个Freenom域名,发现遇到一些问题,此处记录,以免日后再注册时候不记得,再次踩坑。另外记一下 Freenom 的自动续期,看到本文的人也能知道还有这种好事儿!

常见问题:

Freenom不显示注册页面

Freenom 只有登录按钮,点进去的登录页面也没有注册按钮。这个情况是因为 Freenom 页面提供了Google和Facebook 登录的选项而没提供直接的邮箱注册页面,不幸的是它们在中国大陆被屏蔽了。这个问题只需要先检查域名就可以了,选好域名最后 Checkout 时是会给出邮箱注册账号的页面的。

注册域名提示无法使用

一般出现在第一次注册时,或者是浏览器IP变化时候,Check Availability 查找域名后点击 Get it now! 时提示域名无法使用(Not available)。这种情况一个可能是没有账号先检查域名的注册流程中,这种情况填写域名时需要将域名后缀一起填入。另一个有账号的情况可能是登录失效了,如果已经注册账号,刷新重新登录即可。没有账号就前面方法注册一个账号。

注册域名提示技术错误

注册域名时遇到提示技术(Tech)错误,此问题是因为你浏览器当前的IP和你账号资料里面填写的区域国家不一致,从而触发了 Freenom 的反欺诈。可考虑修改资料中的国家地区,或更换与注册地相同的IP代理访问。(不建议使用代理注册域名)

点击 完成订单 提示不能确定你是人或没有反应

使用中国大陆网络访问 Freenom 注册域名可能会在最后一部点击 Complete Order 时网页没有反应、或是提示不能确定你是人。这是因为 Freenom 使用了 Google 的 reCAPTCHA 人机验证,而Google因为某些原因被大陆屏蔽。所以,国内无法正常连接位于 www.google.com/recaptcha 的 reCAPTCHA 服务。可以使用浏览器插件 Gooreplacer 拦截重定向到 recaptcha.net/recaptcha 就可以正常使用该服务了。

以Chrome 为例,只需要在浏览器扩展程序中搜索安装 Gooreplacer ,打开其配置页面并新增一条规则,匹配模式为 www.google.com/recaptcha ,目标地址为 recaptcha.net/recaptcha ,匹配类型为 通配符 。最后确定规则启用就可以了。

经过以上设置后,回到 Freenom 的网站,Ctrl + F5 刷新网页,重新登录,应该就可以正常注册域名了。

自动续期:

Freenom 域名可以免费注册,但是最多只能注册一年。在到期前的两个星期内为免费续订期,如果错过了这几天,域名可能就需要付费注册抑或是与你无缘了。为了保证域名一直在自己手中,我在Microsoft 日历中添加了相关的提醒事项,并且使用大佬 @luolongfei项目 进行自动续期。

因为考虑腾讯云提供了免费的云函数服务,而自动续期检查使用的资源开销很小,完全不会超出腾讯云的免费额度,所以本人使用了腾讯云的云函数运行了自动续期脚本。只需要去腾讯云注册个账号,然后十分钟左右时间部署一个云函数项目就可以了。相关的使用与部署方法大佬在README中写的非常详细了,此处提供个小建议,不必设置每天检查,一个星期检查两次就可以了。其他具体部署本文不再赘述。

参考:

斐讯N1刷CoreELEC实录

前言:

斐讯的挖矿盒子N1质量不错,配置相对不低。可玩性很高,可以刷的系统很多,比如:Android电视盒子、Kodi电视盒子、CoreELEC电视盒子、EmuELEC游戏盒子;也可以刷成Armbian、CentOS7等Linux系统;还可以刷网心云分享宽带赚取收益。考虑缺一个专业的电视盒子看4K影片,于是笔者决定为其刷入CoreELEC系统做一个电视盒子。整个过程中还是踩了不少坑的。

机器配置:

机型: 斐讯(Phicomm)N1
CPU: 晶晨(Amlogic) S905D
GPU: Mali-450 MP
RAM: 2GB DDR3
ROM: 8GB eMMC
以太网: RTL8211F 1000Mbps

据说,它的 CPU 是 ARM Cortex-A53 四核 1.5G,带有的 ARM Mali™-450 GPU 支持 4K60fps硬件解码,能提供 HDMI 2.0 输出。

注意:目前N1 使用 CoreELEC 19.x 版播放HDR10片源会直接崩溃,然后数秒后复位重启。9.2.7 版本目前无此问题,考虑稳定建议使用9.2.7。刷入方式网上教程很多。

警告:刷写固件是一件危险的操作,它不同于常见的计算机安装系统。操作失误可能会导致无法挽回的损失,甚至因此报废您的硬件,请谨慎操作!

刷入 CoreELEC:

降级、刷入改版固件:

因为笔者器在以前已经刷过webpad大佬的官改2.2系统了,此处大致讲一下刷Android盒子的方法。首先,插鼠标快速点击四次固件版本以解锁ADB,注意不要再锁上。然后使用大佬提供的降级工具对机器进行降级。完成降级后使用双A口USB线连接靠近HDMI的USB口到电脑,使用晶晨线刷工具对其进行刷机。注意:只有官方和官改等盒子类固件的存储分区结构可以刷 CoreELEC。具体可参考:斐讯N1探索手记#1 – 降级并刷入armbian系统斐讯天天链N1 官改v2.2N1刷完ARMBIAN想恢复EMMC超级简单线刷法,还可救砖.

更换启动画面:

刷写固件后可能有人会对开机启动画面不满意。和安卓系统的手机类似,电视机顶盒也有两个启动画面。最开始通电时显示的叫做第一屏,系统启动中显示的动画叫第二屏。第一屏可以通过Amlogic Customizationtool 修改固件包的方式或通过文件刷入相关分区的方式修改。第二屏则是通过替换文件 /system/media/bootanimation.zip方法修改。

此处因后期刷入CoreELEC,第二屏使用CoreELEC的即可。所以此处仅修改第一屏。

方法一:使用DD刷入

logo.PARTITION文件存储在方便的位置,然后插上键盘,打开终端,执行以下命令。

su
cd /XX/XX/  # cd 到 logo.PARTITION文件的目录
dd if=logo.PARTITION of=/dev/block/logo
reboot

这样就可以看到第一屏启动画面变更了。笔者用的此方法,比较简单。

方法二:ADB方式:

Android系统下打开ADB网络调试,然后PCB端使用ADB工具连接,执行以下命令重启至fastboot。

adb connect 盒子IP  #即类似:adb connect 192.168.1.1:5555
adb shell reboot fastboot

然后使用双公头USB线连接电视盒子与计算机,执行以下命令检查设备连接,不行的话可能要检查下驱动。

fastboot device #查看是否连接到设备

设备如果存在,则继续,请注意,logo.PARTITION文件应该提前放置于fastboot相同目录。

fastboot flash logo logo.PARTITION

fastboot reboot

方法三:使用Amlogic Customizationtool

此工具可以更换固件的第一屏,重新打包后再刷入即可更换第一屏,但是需要刷机,不太推荐。具体不在本文讨论范围内!

写 CoreELEC 启动盘:

Core ELEC 是一个以启动 Kodi 为主设计的一套方案,它基于一个精简的 Linux 系统。网上能找到大佬编译好的固件,将其下载下来,使用镜像写入工具写入U盘即可。项目在此:RuralHunter/CoreELEC ,文件在Releases中,这次我使用的19.2版本。

设置从U盘启动:

将制作好的启动盘插入靠近HDMI的接口,执行以下命令将重启并从U盘启动,可以在终端模拟器中,也可以远程ADB调试中。

reboot update

注:此命令正常执行后会重启从U盘启动。如若重启后进入 Recovery,则可能是U盘故障、写盘软件异常、Bootloader 异常等。建议使用带有验证功能的软件(如Etcher)写盘,不建议使用 win32_disk_imager 。故障依旧建议更换U盘。

基本设置:

重启后启动U盘中的CoreELEC系统,第一次启动会出现设置向导。第一页的语言设置中没有中文选项保持默认的英语,然后点击 Next ;第二页这里设置主机名称,我没有修改直接点击 Next ;第三页等待网络信息加载完成,网线会自动获取,WIFI需要自行在此页连接一下,然后点击 Next 。第四页是分享和访问控制,需要把SSH打开,这样才能远程连接shell 。点击 Next 会提示配置完成,再次点击 Next 即可进入系统界面。

进入系统后首先修改中文界面。首先需要在 Interface > Skin 下将 Fonts 修改为 Arial based ,否则修改中文语言后会无法正常显示中文字体。接下来需要在 Interface > Regional 下将 Languages 修改为 Chinese(Simple) ,系统会开始在线安装语言包,等待其完成安装后界面就会变成中文。然后回到此界面,将下面的时区国家修改为China,这样时间就正常显示了。

如果分辨率不合适需要修改,可以去 系统 > 显示 下按实际需求修改分辨率和刷新率。

将固件刷入EMMC:

注意:将固件刷入 EMMC 会清空其中原有的系统和用户空间数据,有重要资料请注意提前备份!

警告:以下操作将清空 EMMC 中原有的系统和用户空间数据!

此方法来自恩山大佬整理,原帖在此。下载大佬准备好的脚本文件包,将其解压。使用WinSCP或其他SCP工具通过root用户连接N1,密码前面如果没有修改默认应该是 coreelec ,将解压后的文件上传到 root 用户目录。

使用SSH通过 root 用户连接到N1,连接后默认应该位于 root 用户目录,使用 ls 命令检查文件存在,然后执行命令 bash installtoemmc 开始安装。如下所示回显信息可供参考,完成后会自动关机,SSH连接会提示中断。此时拔电拔下U盘,重新上电即可从EMMC引导CoreELEC启动。

CoreELEC (RuralHunter): 19.2 (Amlogic-ng.arm)
CoreELEC:~ # ls
backup         log.sh         music          screenshots    tvshows
installtoemmc  lost+found     pictures       scripts        videos
CoreELEC:~ # bash installtoemmc
rootfs: /dev/system, storage: /dev/data, root_part: 11
This script will erase BOOT, SYSTEM, DATA and DTB on your device
and install LE that you booted from SD card/USB drive.

It will create a backup of device tree and recovery partition on your boot media.

The script does not have any safeguards!

Formatting SYSTEM partition.../dev/system contains a ext4 file system
        last mounted on /system on Xxx Xxx xx xx:56:18 2021
done.
Copying SYSTEM files...done.
Formatting DATA partition...done.
Stopping Kodi...done.
Copying user data...
All done!
WARNING: If your internal memory layout is different from standard Amlogic, you have to perform this operation again!
Your system will reboot from internal memory.

配置 CoreELEC

获取、检查 IPTV 源

IPTV 源的获取可以去网上搜索一番,恩山能找到专门的板块,也可以去某些论坛或Q群找,一般保存为m3u 或 m3u8格式。使用 IPTV Checker 软件可以快速检查保存为 m3u 格式的 IPTV 源是否有效。经过检查后点击Online筛选出有效的,然后保存到新的文件即可完成检查。

打开某位无名大佬的EPG频道列表服务,将上面保存的 m3u 文件上传到该网站,可以快速为频道列表添加台标。这样导入Core ELEC后就可以看到台标了。最后把文件放到CoreELEC能访问的位置,等待使用。比如,可以通过 U 盘或 SCP 传到N1的存储空间中,也可以放到 NAS 上,然后在 CoreELEC 的文件管理中通过 SMB 协议添加到挂载中。

安装、配置 IPTV 插件

在 CoreELEC 的主界面上点击齿轮状的 设置 图标,选择 插件 。点击 从库安装 > 所有库 > PVR客户端 > PVR IPTV Simple Client ,点击安装。等待其联网安装完毕,点击 设置 ,在常规中设置 IPTV 源列表的位置(上文准备的),在 电子节目单 中配置 EPG 频道列表源,列表源上文中的网站提供了,可以按需求添加。完成配置后点击右侧 确定 即可完成插件配置。

此时回到主界面,将左侧光标移动到电视处,就可以看到添加的节目了。日后就可以在此看电视了。

安装字幕插件和影视信息刮削器

回到插件的所有库中,选择 字幕 ,选择 OpenSubtitles.org 并安装。去电脑上使用浏览器打开 OpenSubtitles 的官网,注册一个账号。然后将账号密码填入插件的设置中保存。然后去 设置 > 播放器 > 语言 处,将 首选字幕语言 改为 用户界面语言 。然后向下滚动找到下载字幕语言,将其原始的 English 取消掉(光标选中按确认),向上滚动选中 Chinese 和 Chinese(Simple),点击右侧 确定 保存设置。最后将默认剧集服务和默认电影服务都选为 OpenSubtitles 完成字幕插件的设置。

同样是在插件的所有库中,选择信息提供者 > 电影信息 ,安装 The Movie Database(默认应该已经安装,注意不要使用Python版本,笔者测试发现其不稳定)。然后进入其设置,将 首选语言 修改为 zh-CN ,点击右侧 确定 保存。然后在信息提供者 > 剧集信息中,同样也是这个插件(默认应该已经安装),设置成zh-CN。

确保N1已经联网且打开SSH,在设置里面看一下IP,在电脑上使用SSH连接。使用 vi /storage/.config/hosts.conf 命令打开host文件,添加如下内容:

13.224.161.117 api.themoviedb.org
13.33.144.120 api.themoviedb.org
13.33.144.2 api.themoviedb.org
65.8.80.24 api.themoviedb.org
13.33.144.88 api.themoviedb.org
13.33.144.74 api.themoviedb.org
13.226.254.58 image.tmdb.org
13.227.73.57 image.tmdb.org

保存退出即完成添加HOST内容。然后就可以去文件管理里面添加视频目录,设置视频类型,分别使用电影和电视剧的刮削器获取信息了。观看过程中,在播放器中可以搜索下载字幕。

安装天气插件

依然是在插件的所有库中,选择天气目录,安装 Gismeteo 插件。然后点击设置,在 Location setup 中设置位置,一般是地名的拼音。如果搜不到,可以手动去网站搜索所在地,搜到当地天气后记住浏览器地址中的数字部分,将其输入到天气插件设置的 Expert 选项中的 Location * ID 中,点击右侧保存按钮进行保存。最后回到上一层菜单,点击 启用 即可完成天气插件的配置。

其他:

重启蓝牙遥控器连接失效?

看大佬们分析说原因貌似是文件系统权限问题。笔者没有蓝牙遥控器,以下提供帖子参考:

参考:

简述如何白嫖一个IPFS图床

前言:

网上某位大佬写了一个IPFS图床,原理什么的我也不懂,反正就是有个静态空间把页面放上就可以了。因为原始项目里面接口貌似失效了,这里随手记一下怎么白嫖的。以备日后查询。

项目名称叫:img2ipfs

搭建:

首先从GitHub上把项目下载到本地,用本地的编辑器按需求改一下界面等。这方面需要有一定的HTML基础,或者用Adobe Dw?。

改之前需要理解一个概念,这个图床核心需要两个接口:一个是IPFS API,上传文件用的,上传后会返回cid;另一个是网关,预先录入的网关接口用于和 cid 拼接以输出链接。

网关可以直接使用公用的,比如 Cloudflare 的 cf-ipfs.com也可用自己的域名CNAME跳转或套 Cloudflare解析 为了防止某个公用服务后期失效,网关最好用自己的域名跳转。Cloudflare 不允许跨用户使用CNMAE,就算是把自己域名 CNAME 到 cf-ipfs.com 也不行。目前看,可以CNAME到 infura-ipfs.io 。这些东西需要在域名控制面板上操作。

下面这些大佬收集的网关可以试试看:

cf-ipfs.com  #不行
183.252.17.149:82
ipfs.genenetwork.org
ipfs.fleek.co
ipfs.azurewebsites.net
ipfs.kaleido.art
ipfs.globalupload.io
ipfs.slang.cx
ipfs.adatools.io
gateway.originprotocol.com
ipfs.best-practice.se
ipfs.drink.cafe
ipfs.denarius.io     
crustwebsites.net
bin.d0x.to
ravencoinipfs-gateway.com
ipfs.smartholdem.io
infura-ipfs.io

HTML 文件中网关相关内容在第33行附近,按照需要添加或删除网关。默认网关的设置在static/file.js的第146行附近,默认应该是用的fleek。

API 麻烦一点,公开能用的少见。自己搭就不是白嫖了,所以目前看可以用这个:

ipfsapi.glitch.me

static/file.js文件的第70行,API改一下保存。

找一个免费的 IPFS 文件托管服务商,注册个账号。比如我这里用的 fleek.co

自己用的情况,建个目录把改好的文件传上去,它会给出目录的 IPFS 地址,然后直接打开就可以看到图床成了。把地址收藏一下就可以用了。

考虑共享方便的话需要个好记得地址,可以做一下 CNAME 或链接跳转。也可以按服务商官方得方法搭建,需要先在GitHub上建一个仓库,公有私有都可以,把文件push上去。然后在fleek那里连接一下仓库,因为只是单纯保存页面,不涉及编译啥的,按照默认给出得设置(Other)部署就即可,最后可以按提示在域名服务商处设置CNAME即可。

参考:

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时已经做过了,我这次不需要再做了。

参考: