[ Technical exchange] ll-pica使用install_dep时报错无法删除systemd的问题解决方案
Tofloor
poster avatar
MeGusta
deepin
2025-08-18 00:39
Author

操作系统环境:UOS v20 1070 arm64 鲲鹏920cpu

在linglong.yaml中,在使用vscode玲珑插件添加依赖之后,在build字段,通常会这么写,用来使用linglong-pica的install_dep脚本安装依赖:

build: |
  export PATH=$PATH:/usr/libexec/linglong/builder/helper
  SOURCES=/project/linglong/sources
  install_dep $SOURCES $PREFIX

由于未知的原因,在使用 base: org.deepin.base/25.2.0时,会出现类似如下的报错,提示无法删除systemd:

/project/linglong/sources/libkeybinder-3.0-0_0.3.2-1.1_amd64.deb
rm: cannot remove '/tmp/tmp.08msb3a8lX/data/usr/share/systemd': No such file or directory
(46506) /usr/src/packages/BUILD/apps/ll-builder/src/main.cpp:279 Build failed:  [code -1 ] message:

通过查看 /usr/libexec/linglong/builder/helper/install_dep脚本的代码,发现了问题:

    # 复制/lib,/bin,/usr目录
    ...
    rm -r "${data_list_dir:?}/usr/share/systemd" 2>/dev/null || true
    rm -r "${data_list_dir:?}/usr/lib/systemd" 2>/dev/null || true
    ...
    rm -r "$data_list_dir"
done <"$deb_list_file"

在删除文件时,使用了 rm -r,在目录不存在的时候,就会报错。

解决方案就是,把上述的代码中的 rm -r 修改为 rm -rf,无论数目录是否存在都删除,即:

    # 复制/lib,/bin,/usr目录
    ...
    rm -rf "${data_list_dir:?}/usr/share/systemd" 2>/dev/null || true
    rm -rf "${data_list_dir:?}/usr/lib/systemd" 2>/dev/null || true
    ...
    rm -rf "$data_list_dir"
done <"$deb_list_file"

然后,在linglong.yaml里面,把install_dep这个命令替换成修复之后的脚本路径,如:

build: |
  export PATH=$PATH:/usr/libexec/linglong/builder/helper
  SOURCES=/project/linglong/sources
  /project/install_dep-fixed $SOURCES $PREFIX

再按正常流程构建就行了。

image.png

Reply Favorite View the author
All Replies
会飞的鱼11
deepin
Community Developer
a day ago
#1

这里打包感觉不是这个引起的,|| true 后即使没有那个文件,也只是报的一个警告,脚本并没有返回,得看一下具体报错在哪里

Reply View the author
MeGusta
deepin
15 hours ago
#2
会飞的鱼11

这里打包感觉不是这个引起的,|| true 后即使没有那个文件,也只是报的一个警告,脚本并没有返回,得看一下具体报错在哪里

我就是在UOS环境下才有这样的问题,不知怎的,这么搞它就灵了。

deepin上都还正常。

Reply View the author