halo icon indicating copy to clipboard operation
halo copied to clipboard

使用JAR安装halo_2.12.1遇到的问题

Open Tonmyn opened this issue 1 year ago • 11 comments

系统信息

  • 外部访问地址:
  • 启动时间: 2024-02-04 16:35
  • 版本: 2.12.1
  • 构建时间: 2024-02-02 21:39
  • Git Commit: c71b2ec
  • Java: Java(TM) SE Runtime Environment / 17.0.8+9-LTS-211
  • 数据库: H2 / 2.2.224
  • 操作系统: Linux / 5.4.0-48-generic
  • 已激活主题: Earth
  • 已启动插件:

使用的哪种方式运行?

JAR

在线站点地址

http://halo.tomee.top:8090

发生了什么?

1、使用JAR安装halo_2.12.1 后远程安装插件提示“服务器内部错误,请稍后再试” 微信截图_20240204164029

2、部署hola 2.12.1后运行正常,但是无法调用mysql数据库还是以H2数据库方式运行 (注:mysql数据库已经提前创建,JKD版本为17.0.8);

  • 下载halo.jar文件存放在/home/www/app/halo.jar 并设置755权限; 微信截图_20240204171312

  • 在/home/www/.halo2/路径下创建了application.yaml文件,设置755权限并在文件中按配置文档填写相关内容; 微信截图_20240204165558

server:
  # 运行端口
  port: 8090
spring:
  # 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
  r2dbc:
    url: r2dbc:pool:mysql://localhost:3306/halo_2_12
    username: halo_2_12
    password: MzADnJyanax6hdeB
  sql:
    init:
      mode: always
      # 需要配合 r2dbc 的配置进行改动
      platform: mysql
halo:
  caches:
    page:
      # 是否禁用页面缓存
      disabled: true
  # 工作目录位置
  work-dir: ${user.home}/.halo2
  # 外部访问地址
  external-url: http://halo.tomee.top:8090
  # 附件映射配置,通常用于迁移场景
  attachment:
    resource-mappings:
      - pathPattern: /upload/**
        locations:
          - migrate-from-1.x

微信截图_20240204165412

  • 我用www用户运行halo.jar,启动命令如下:
/www/server/java/jdk-17.0.8/bin/java  -jar -Xmx512M -Xms256M  /home/www/app/halo-2.12.1.jar

微信截图_20240204170037

相关日志输出

2024-02-04T16:40:03.348+08:00 WARN 3821873 --- [or-http-epoll-1] r.netty.http.client.HttpClientConnect : [7cd64124, L:/10.60.140.23:39562 ! R:halo-store-assets.031150231bf47fe490654f9e3d11f01d.r2.cloudflarestorage.com/100.65.128.100:443] The connection observed an error
2024-02-04T16:41:14.197+08:00 INFO 3821873 --- [nReconciler-t-1] org.pf4j.AbstractPluginManager : Stop plugin '[email protected]'
2024-02-04T16:41:14.199+08:00 INFO 3821873 --- [nReconciler-t-1] org.pf4j.AbstractPluginManager : Disabled plugin '[email protected]'
2024-02-04T16:41:14.207+08:00 WARN 3821873 --- [nReconciler-t-1] io.r2dbc.h2.H2Connection : Option{name='readOnly', sensitive=false} + isn't supported in H2 at the transaction level. You must set it on conenction URL. See http://www.h2database.com/html/features.html#read_only
2024-02-04T16:41:14.246+08:00 INFO 3821873 --- [nReconciler-t-1] r.h.a.c.e.reconciler.PluginReconciler : Initializing setting and config map for plugin app-store-integration
2024-02-04T16:41:14.274+08:00 WARN 3821873 --- [nReconciler-t-1] io.r2dbc.h2.H2Connection : Option{name='readOnly', sensitive=false} + isn't supported in H2 at the transaction level. You must set it on conenction URL. See http://www.h2database.com/html/features.html#read_only
2024-02-04T16:41:14.290+08:00 INFO 3821873 --- [nReconciler-t-1] r.h.a.c.e.reconciler.PluginReconciler : Initialized setting plugin-app-store-integration-setting for plugin app-store-integration
2024-02-04T16:41:14.293+08:00 WARN 3821873 --- [nReconciler-t-1] io.r2dbc.h2.H2Connection : Option{name='readOnly', sensitive=false} + isn't supported in H2 at the transaction level. You must set it on conenction URL. See http://www.h2database.com/html/features.html#read_only
2024-02-04T16:41:14.300+08:00 INFO 3821873 --- [nReconciler-t-1] r.h.a.c.e.reconciler.PluginReconciler : Initialized config map plugin-app-store-integration-configmap for plugin app-store-integration
2024-02-04T16:41:14.311+08:00 WARN 3821873 --- [nReconciler-t-1] io.r2dbc.h2.H2Connection : Option{name='readOnly', sensitive=false} + isn't supported in H2 at the transaction level. You must set it on conenction URL. See http://www.h2database.com/html/features.html#read_only

附加信息

halo.log halo-2_12.log

Tonmyn avatar Jan 27 '24 10:01 Tonmyn

Thank @Tonmyn for reaching out here!

从提供的日志来看,你的 Halo 容器中无法正常通过 HTTPS 协议请求 halo-store-assets.031150231bf47fe490654f9e3d11f01d.r2.cloudflarestorage.com 资源。关键日志如下所示:

024-01-27T17:58:16.922+08:00  WARN 6 --- [reactor-http-epoll-1] r.netty.http.client.HttpClientConnect    : [c1c9e211, L:/10.60.140.23:42008 ! R:halo-store-assets.031150231bf47fe490654f9e3d11f01d.r2.cloudflarestorage.com/100.65.128.100:443] The connection observed an error

io.netty.handler.codec.DecoderException: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:499) ~[netty-codec-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) ~[netty-codec-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:800) ~[netty-transport-classes-epoll-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:509) ~[netty-transport-classes-epoll-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:407) ~[netty-transport-classes-epoll-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.101.Final.jar:4.1.101.Final]
	at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at java.base/sun.security.ssl.Alert.createSSLException(Unknown Source) ~[na:na]
	at java.base/sun.security.ssl.TransportContext.fatal(Unknown Source) ~[na:na]
	at java.base/sun.security.ssl.TransportContext.fatal(Unknown Source) ~[na:na]
	at java.base/sun.security.ssl.TransportContext.fatal(Unknown Source) ~[na:na]
	at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(Unknown Source) ~[na:na]
	at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(Unknown Source) ~[na:na]
	at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(Unknown Source) ~[na:na]
	at java.base/sun.security.ssl.SSLHandshake.consume(Unknown Source) ~[na:na]
	at java.base/sun.security.ssl.HandshakeContext.dispatch(Unknown Source) ~[na:na]
	at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(Unknown Source) ~[na:na]
	at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(Unknown Source) ~[na:na]
	at java.base/java.security.AccessController.doPrivileged(Unknown Source) ~[na:na]
	at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(Unknown Source) ~[na:na]
	at io.netty.handler.ssl.SslHandler.runDelegatedTasks(SslHandler.java:1651) ~[netty-handler-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1497) ~[netty-handler-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1338) ~[netty-handler-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1387) ~[netty-handler-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529) ~[netty-codec-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468) ~[netty-codec-4.1.101.Final.jar:4.1.101.Final]
	... 15 common frames omitted
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at java.base/sun.security.validator.PKIXValidator.doBuild(Unknown Source) ~[na:na]
	at java.base/sun.security.validator.PKIXValidator.engineValidate(Unknown Source) ~[na:na]
	at java.base/sun.security.validator.Validator.validate(Unknown Source) ~[na:na]
	at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source) ~[na:na]
	at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source) ~[na:na]
	... 30 common frames omitted
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source) ~[na:na]
	at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source) ~[na:na]
	at java.base/java.security.cert.CertPathBuilder.build(Unknown Source) ~[na:na]
	... 35 common frames omitted

我们也是第一次遇到这个问题,可能需要一定时间排查具体是什么原因。目前你可以先下载离线包后手动上传安装。

同时,我也尝试在生产环境下使用 Docker 镜像 halohub/halo:2.11.3 运行 Halo,可通过应用市场插件一键安装其他插件,且无任何报错。

/triage needs-information

JohnNiang avatar Jan 27 '24 17:01 JohnNiang

@JohnNiang 我在新版本的部署中又遇到问题了,还麻烦大佬看一下

Tonmyn avatar Feb 04 '24 09:02 Tonmyn

如果还是同样的错误,建议更新一下 JRE。

JohnNiang avatar Feb 04 '24 09:02 JohnNiang

@JohnNiang 还有新问题出现,我配置了mysql 但是运行后还是以H2数据库运行,怀疑程序没有按配置文件运行

Tonmyn avatar Feb 04 '24 09:02 Tonmyn

此时你应该提供更多的信息,例如配置的步骤和细节,否则没有人能够帮助到你。

JohnNiang avatar Feb 04 '24 09:02 JohnNiang

@JohnNiang 我已经上传了新的配置步骤和配置过程中的截图,和上传了新的输出文档,覆盖了之前提问的内容

Tonmyn avatar Feb 04 '24 09:02 Tonmyn

第一个问题已经自行解决了,只需要将建立的application.yaml文件放到与halo.jar共同的~/app文件夹下面即可。 如果根据部署文档描述,会引起歧义,新手可能会将application.yaml文件放到~./halo2文件夹下面,造成部署后不按配置文件运行的问题。

Tonmyn avatar Feb 04 '24 10:02 Tonmyn

系统信息

  • 外部访问地址: http://localhost:8090
  • 启动时间: 2024-02-04 18:35
  • 版本: 2.12.1
  • 构建时间: 2024-02-02 21:39
  • Git Commit: c71b2ec
  • Java: Java(TM) SE Runtime Environment / 18.0.2.1+1-1
  • 数据库: Source distribution / 5.7.37-log
  • 操作系统: Linux / 5.4.0-48-generic
  • 已激活主题: Earth
  • 已启动插件:

相关输出日志

2024-02-04T18:37:25.105+08:00 WARN 3828534 --- [or-http-epoll-1] r.netty.http.client.HttpClientConnect : [dd25a8f4, L:/10.60.140.23:41082 ! R:halo-store-assets.031150231bf47fe490654f9e3d11f01d.r2.cloudflarestorage.com/100.65.128.100:443] The connection observed an error

io.netty.handler.codec.DecoderException: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:499) ~[netty-codec-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) ~[netty-codec-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:800) ~[netty-transport-classes-epoll-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:509) ~[netty-transport-classes-epoll-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:407) ~[netty-transport-classes-epoll-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.105.Final.jar!/:4.1.105.Final]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131) ~[na:na]
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:371) ~[na:na]
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:314) ~[na:na]
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:309) ~[na:na]
at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:654) ~[na:na]
at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:473) ~[na:na]
at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:369) ~[na:na]
at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:396) ~[na:na]
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:480) ~[na:na]
at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1277) ~[na:na]
at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1264) ~[na:na]
at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) ~[na:na]
at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:1209) ~[na:na]
at io.netty.handler.ssl.SslHandler.runDelegatedTasks(SslHandler.java:1651) ~[netty-handler-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1497) ~[netty-handler-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1338) ~[netty-handler-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1387) ~[netty-handler-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529) ~[netty-codec-4.1.105.Final.jar!/:4.1.105.Final]
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468) ~[netty-codec-4.1.105.Final.jar!/:4.1.105.Final]
... 15 common frames omitted
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:388) ~[na:na]
at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:271) ~[na:na]
at java.base/sun.security.validator.Validator.validate(Validator.java:256) ~[na:na]
at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:285) ~[na:na]
at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:144) ~[na:na]
at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:632) ~[na:na]
... 29 common frames omitted
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) ~[na:na]
at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) ~[na:na]
at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297) ~[na:na]
at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:383) ~[na:na]
... 34 common frames omitted

附加信息

halo-log-2024-02-04 18_40.log

@JohnNiang 使用JDK-18.0.2运行后依然出现“服务器内部错误,请稍后再试”的提示,甚至在初始化过程中也会提示,之前只会在安装插件操作时出现此提示

Tonmyn avatar Feb 04 '24 10:02 Tonmyn

第一个问题已经自行解决了,只需要将建立的application.yaml文件放到与halo.jar共同的~/app文件夹下面即可。 如果根据部署文档描述,会引起歧义,新手可能会将application.yaml文件放到~./halo2文件夹下面,造成部署后不按配置文件运行的问题。

感谢指出,这是一个被忽略的问题,将工作目录的 application.yaml 作为外挂配置并不是程序支持的,在 2.12 之前一直是通过 Dockerfile 中构建镜像添加的环境变量:https://github.com/halo-dev/halo/blob/b4e196372d5a0253a6abed976fac5791b2d83cf7/Dockerfile#L20

所以,如果不打算在 2.12.x 添加这个支持的话,我将修改文档。

ruibaby avatar Feb 04 '24 14:02 ruibaby

Hi @Tonmyn ,

  1. 请根据日志中的错误提示 unable to find valid certification path to requested target 自行 Google 去寻找答案,大概率是和 JRE 缺少部分组件导致的。

  2. 通过 Jar 包安装的 Halo 在初始化的时候报错,请参考 https://github.com/halo-dev/halo/issues/5289

  3. 关于通过 Jar 包运行的配置文件路径问题确实忽略了。不过目前你可以通过配置环境变量 SPRING_CONFIG_LOCATION="optional:classpath:/;optional:file:/root/.halo2/" 来实现和 Docker 部署同样的体验。

/kind bug /area core /remove-triage needs-information /triage accepted

JohnNiang avatar Feb 05 '24 03:02 JohnNiang

使用jar文件部署时,作为服务运行里面ExecStart里面参数 --spring.config.location="optional:classpath:/;optional:file:/home/halo/.halo2/" 带引号时会报错 命令直接运行是没问题的

bynowi avatar Feb 07 '24 08:02 bynowi