MiraiOK
MiraiOK copied to clipboard
Linux权限问题
更新近期版本后,出现如下与运行权限相关的问题:
非root(sudoer)权限运行时 ./miraiOK_linux-amd64
,报如下错误:
2020-09-06 19:49:xx I/MiraiOK: MiraiOK 20200906.192946 linux-amd64
2020-09-06 19:49:xx I/MiraiOK: 此程序以Affero GPL3.0协议发布,使用时请遵守协议
2020-09-06 19:49:xx I/MiraiOK: 部分开源于: github.com/LXY1226/MiraiOK
2020-09-06 19:49:xx I/MiraiOK: openjdk version "11.0.8" 2020-07-14
2020-09-06 19:49:xx I/MiraiOK: OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1)
2020-09-06 19:49:xx I/MiraiOK: OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1, mixed mode, sharing)
2020-09-06 19:49:xx I/MiraiOK: 读取库列表出现错误 open libs/version.txt: permission denied
2020-09-06 19:49:xx I/MiraiOK: 删除.lastupdate来在下次启动时强制检查更新
CLASSPATH=
2020-09-06 19:49:xx I/MiraiOK: 启动Mirai...
Error: Could not find or load main class net.mamoe.mirai.console.pure.MiraiConsolePureLoader
Caused by: java.lang.ClassNotFoundException: net.mamoe.mirai.console.pure.MiraiConsolePureLoader
2020/09/06 19:49:00 java退出,exit status 1
2020-09-06 19:49:xx E/MiraiOK: 运行失败,尝试更新mirai三件套 exit status 1
2020-09-06 19:49:xx I/MiraiOK: 开始检查Mirai更新... 也可以通过创建.noupdate文件来禁用更新
2020-09-06 19:49:02 E/MiraiOK: 无法写入库列表 open libs/version.txt: permission denied
2020-09-06 19:49:02 I/MiraiOK: 下载 mirai-core-qqandroid 版本 1.2.2
2020-09-06 19:49:02 I/MiraiOK: 下载 mirai-console 版本 1.0-M4-dev-3
2020-09-06 19:49:02 I/MiraiOK: 下载 mirai-console-pure 版本 1.0-M4-dev-3
panic: open libs/mirai-console-1.0-M4-dev-3.jar: permission denied
goroutine 23 [running]:
main.save(0xc0001ae900, 0xc00001c570, 0x23, 0xc00059cee0)
/home/runner/work/MiraiOK/MiraiOK/download.go:26 +0x109
main.updateMirai.func1(0x1, 0xc000196000, 0xd, 0xc000196010, 0xc)
/home/runner/work/MiraiOK/MiraiOK/update.go:67 +0x3d9
created by main.updateMirai
/home/runner/work/MiraiOK/MiraiOK/update.go:62 +0x2a5
必须以root/sudoer运行。以下情况均为sudo运行
下载miraiOK后,以sudo运行第一次,正常的报无法启动(尝试下载进入libs)和更新到最新版本后,再次运行miraiOK,报
Bus error.
解决Bus error问题可通过删除libs/目录实现。由于libs/目录权限问题(libs/目录权限在近期版本由于未知原因,为644(drw-r--r--)),需 sudo rm -r libs/
更新到最新版本miraiOK后,可以通过sudo ./miraiOK_linux-amd64
启动(第一次报错下lib,重启后正常运行)
补充:
经过本人测试,权限问题大概率锁定在创建libs/目录:
以非root用户第一次运行miraiOK,创建的libs/目录,是root:root,权限644,没有以普通用户创建,而是root用户配644
这导致非root用户运行的miraiOK无法把下载的lib文件和version.txt写入root+644的libs/目录(权限不足,只有read)
此时,只要将libs/这个目录的权限设置为755,就可以继续以非root用户第二次运行miraiOK,这次jar和txt就能写入libs/文件夹,并且权限自动继承为755,然后重启,第三次运行直接就开起来了。
此前的version.txt权限为644(即使代码里设置了777,也是644)可能来自于libs/目录权限为644导致的权限继承。
临时解决方案: 首次运行miraiOK后,修改libs/目录的权限:
sudo chmod 755 libs
之后就可以继续以普通用户运行miraiOK了
Fixed: 版本20200906.200346
正常啦,普通用户运行miraiOK创建的libs的owner和权限组都正确了,回到了2次运行miraiOK就开起来的状态了
总之不要乱用奇怪的用户初始化😃