记一次deepin的ll-cli的报错:./apps/ll-cli/src/main.cpp:124 failed to create directory

报错如下:

(.venv) likewendy@likewendy-PC:~/Desktop/optillm/yolo$ ll-cli install linux.qq.com.linyaps
(480583) ./apps/ll-cli/src/main.cpp:124 failed to create directory: 没有那个文件或目录
已放弃(核心已转储)

修复过程:

  1. 我搜索了谷歌、deepin中国论坛、github deepin开发人员中心的 issue,没有找到结果。
  2. 根据论坛上的提醒,ll-cli是玲珑应用的一部分,于是重装这些软件包sudo apt reinstall linglong*,但不起作用。
  3. 没有在github找到ll-cli的仓库。
  4. 准备在github deepin开发人员中心的 issue 提交 issue,在提供版本信息时,意外发现ll-cli -h可以得到
……
如果在使用过程中遇到任何问题,
您可以通过此项目向如意玲珑项目团队报告错误:https://github.com/OpenAtom-Linyaps/linyaps/issues
  1. 在OpenAtom-Linyaps/linyaps/issues搜索,没有符合的内容。
  2. 给定报错含有文件行号,于是阅读代码。
  3. 给定行号的报错与仓库代码文件该行的内容不符,原来是master分支的问题,切换为 v1.7.0Tag 继续阅读代码。
  4. 代码文件为https://github.com/OpenAtom-Linyaps/linyaps/blob/V1.7.0/apps/ll-cli/src/main.cpp
  5. 行号为124,该行代码为qCritical() << "failed to create directory:" << ec.message().c_str();
113 void ensureDirectory(const std::filesystem::path &dir)
114 {
115     std::error_code ec;
116     if (!std::filesystem::exists(dir, ec)) {
117         if (ec) {
118             qCritical() << QString{ "get status of" } << dir.c_str()
119                         << "failed:" << ec.message().c_str();
120             std::abort();
121         }
122 
123         if (!std::filesystem::create_directory(dir, ec)) {
124             qCritical() << "failed to create directory:" << ec.message().c_str();
125             QCoreApplication::exit(ec.value());
126             std::abort();
127         }
128     }
129 }

可以看到,如果if (!std::filesystem::create_directory(dir, ec)) {执行失败就会执行第124行。
也就是说,如果目录创建失败,就会执行错误打印。
该函数ensureDirectory在539行被调用。

527    auto ret = QMetaObject::invokeMethod(
528      QCoreApplication::instance(),
529      [&argc, &argv, &commandParser, &noDBus, &jsonFlag, &options]() {
530          auto repoRoot = QDir(LINGLONG_ROOT);
531          if (!repoRoot.exists()) {
532              qCritical() << "underlying repository doesn't exist:" << repoRoot.absolutePath();
533              QCoreApplication::exit(-1);
534              return;
535          }
536
537          auto userContainerDir =
538            std::filesystem::path{ "/run/linglong" } / std::to_string(::getuid());
539          ensureDirectory(userContainerDir);
540
541          while (true) {
542              auto lockOwner = lockCheck();
543              if (lockOwner == -1) {
544                  qCritical() << "lock check failed";
545                  QCoreApplication::exit(-1);
546                  return;
547              }

从538行可见,被创建的目录为/run/linglong的子目录。
也就是说,因为创建/run/linglong的子目录失败而导致报错。
那么,首先排除权限问题,因为我使用sudo执行也不起作用。
由代码 "/run/linglong" } / std::to_string(::getuid())可知,它在拼接路径,它在创建子目录,那么,还有一种可能是父级目录并不存在。

  1. 执行命令创建该目录,并修改所有者为你使用的用户和linglong用户组
sudo mkdir /run/linglong && sudo chown -R likewendy:deepin-linglong /run/linglong
  1. 问题解决,之前报错的命令可正常执行。
(.venv) likewendy@likewendy-PC:~/Desktop/optillm/yolo$ ll-cli search linux.qq.com.linyaps
id                               name                             version         arch        channel         module      description
linux.qq.com.linyaps             linux.qq.com                     3.2.12.0        x86_64      main            binary      convert from 3.2.12-27254 QQ
linux.qq.com.linyaps             QQ                               3.2.15.30484    x86_64      main            binary      腾讯推出的即时通讯工具。支持在线聊天、点对点断点续传...
linux.qq.com.linyaps             QQ                               3.2.15.30899    x86_64      main            binary      腾讯推出的即时通讯工具。支持在线聊天、点对点断点续传...
linux.qq.com.linyaps             linux.qq.com                     3.2.9.0         x86_64      main            binary      convert from 3.2.9-240617 QQ

后记

修复ll-cli报错的原因是,我需要使用它来解决我的qq无法打开并且从应用商店已安装列表消失的问题。

后来,遇到了linux.qq.com.linyaps无法删除的问题,也就是玲珑的qq而不是deb的qq。
我通过在/var/lib/linglong/下搜索linux.qq.com.linyapsqq找到了几个目录,备份后删除了它们。

然后修改了/var/lib/linglong/states.json,删除了有关linux.qq.com.linyaps的元素,解决了这个问题。

玲珑应用经常出问题。

If this helps you, and if you have enough money, can you give me 1$? I am facing a financial crisis.
If you do this, I will pass on the kindness.
This is my bank card number:5592921230414708
Thank you!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Deng_Xian_Shemg

捐助1元钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值