基本问题/目标:
我希望能够使用一些共享库,这些库应该在自定义PPA的cmake步骤(插件)之前获取。
snapcraft.yaml:
name: mraa-blink-example
version: 'Latest'
summary: mraa for snapcraft
description: |
Blink Example from MRAA lib
grade: stable #devel # must be 'stable' to release into candidate/stable channels
confinement: strict # use 'strict' once you have the right plugs and slots
apps:
blinkapp:
command: bin/blink
parts:
blink:
plugin: cmake
build-packages:
- libmraa1
- libmraa-dev
- mraa-tools
- python-mraa
- python3-mraa
的CMakeLists.txt
cmake_minimum_required(VERSION 2.8.9)
project (MRAA)
file(GLOB SOURCES "src/*.cpp")
#For the shared library:
set ( PROJECT_LINK_LIBS libmraa.so )
add_executable(blink ${SOURCES})
target_link_libraries(blink ${PROJECT_LINK_LIBS} )
install(TARGETS blink DESTINATION /bin)
因为构建包来自自定义PPA,所以我收到错误:
无法在' build-packages'中找到所需的包:"缓存有 没有名为' libmraa-dev'"
的软件包
有没有办法解决这个问题?
答案 0 :(得分:2)
<强>背景强>
努力将Gnome Libraries抽象为一个独立的平台&#34;使用Ubuntu桌面团队的Gnome-3-26 PPA在Launchpad上构建的snap。 PPA包含编译的gnome平台,以适应Ubuntu Xenial(16.04)的运行时环境,该环境允许针对较新的Gnome构建快照,而不是构建环境通常包含的。但这需要在构建环境中使用自定义PPA,并且像我一样努力解决如何执行此操作。
一旦您启用了gnome-platform PPA,您仍然需要将捕捉链接到运行时捕捉。通过添加连接到gnome-3-26-1604
的插件并使用desktop-gnome-platform
帮助程序来处理此问题
我的解决方案:
我决定使用多部分构建,主要应用程序&#34;部分&#34;取决于宣称使用&#34; nil&#34;插件意味着它实际上并没有做任何事情。然后我添加了一个&#34;准备&#34;编写nil部分的脚本,用于添加PPA,它的PGP密钥,以及强制更新/升级周期。
我认为这需要是一个单独的部分,而不是作为主应用程序的准备脚本,因为在运行准备脚本之前获取构建包,这意味着它将无法找到依赖项的包并且死有一个很好的错误消息。这是通过执行多部分方法来解决的。我用它来构建几天前代表Snapcrafters努力宣布的gnome-twitch
快照。
示例:强>
下面是gnome-twitch snapcraft.yaml的不完整粘贴,用于解释我是如何做到的:
parts:
prepare:
plugin: nil
prepare: |
echo "deb http://ppa.launchpad.net/ubuntu-desktop/gnome-3-26/ubuntu xenial main" | tee /etc/apt/sources.list.d/gnome-3-24.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 399B698EEA9EF163B6F9A0F62CC98497A1231595
apt update
apt upgrade -yy
prime: [-*]
...
gnome-twitch:
after: [prepare, desktop-gnome-platform]
...
plugs:
gnome-3-26-1604:
interface: content
content: gnome-3-26-1604
target: gnome-platform
default-provider: gnome-3-26-1604
apps:
gnome-twitch:
command: desktop-launch $SNAP/usr/bin/gnome-twitch
plugs:
- ... # all the plugs required
- gnome-3-26-1604
答案 1 :(得分:0)
不幸的是,以上答案不再适用于最近对snapcraft的更改。根据上面Daniel的回答,当前有效的设置如下:
首先,在根范围内,我们需要设置体系结构以匹配PPA中已构建的软件包:
architectures:
- build-on: amd64
run-on: amd64
我们需要software-properties-common
和dirmngr
才能访问apt
和apt-key
:
build-packages:
[... other packages ...]
- software-properties-common
- dirmngr
通过覆盖
pull
阶段:
parts:
add-ppa:
plugin: nil
override-pull: |
echo "deb http://ppa.launchpad.net/[... your ppa ...]/ubuntu bionic main" | tee /etc/apt/sources.list.d/custom.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [... your key ...]
apt update
apt upgrade -yy
最后,我们将add-ppa
部分添加为“主要”部分的依赖项:
parts:
[... other parts ...]
core:
after: [add-ppa]