Ubuntu 23.10下创建Snap包失败求助
首次尝试在Ubuntu 23.10中打包自主开发的应用为Snap包,按官方指南创建了lamiavideoteca/usr/bin存放可执行文件、lamiavideoteca/usr/lib存放依赖库,编写的snapcraft.yaml配置如下:
name: lamiavideoteca base: core22 version: "2.40" summary: Program for cataloging Films description: Program that allows you to catalog your collection of Films and/or Video/Audio. grade: stable confinement: strict apps: lamiavideoteca: command: MyVideo Library parts: lamiavideoteca: plugin: dump source: . organize: bin/: usr/bin/ lib/: usr/lib/
执行snapcraft编译时失败,日志提示路径“LaMiaVideoteca”不存在,无法打包/root/prime目录。已在干净Ubuntu虚拟机验证依赖齐全,手动创建/root/prime和/root/project目录后问题仍未解决。
修正
command字段的路径与格式:
可执行文件名带空格时,必须用引号包裹绝对路径。如果你的可执行文件实际位于snap的usr/bin/目录下,正确的command应为:command: usr/bin/"MyVideo Library"另外日志提示“LaMiaVideoteca”不存在,需确认可执行文件的实际名称是否为
LaMiaVideoteca(Linux环境大小写敏感),如果是,直接将command改为usr/bin/LaMiaVideoteca。匹配文件结构与
source配置:
当前配置中source: .表示打包当前目录的所有内容,但你的可执行文件和依赖在lamiavideoteca/usr/bin/、lamiavideoteca/usr/lib/子目录下,这会导致snapcraft将lamiavideoteca/目录本身复制到prime目录,最终路径变为lamiavideoteca/usr/bin/xxx,而非预期的usr/bin/xxx。
解决方式二选一:- 将
source改为lamiavideoteca/,让dump插件直接读取该子目录下的usr/结构; - 调整本地文件结构,将
usr/bin/和usr/lib/直接放在当前目录下,保持source: .不变。
- 将
删除手动创建的临时目录:
snapcraft会自动管理打包过程中的/root/prime、/root/project等临时目录,手动创建这些目录会干扰正常流程,删除后重新执行snapcraft即可。
内容的提问来源于stack exchange,提问作者Enrico Tarro Boiro

