【问题标题】:How to add a custom PPA to snapcraft如何将自定义 PPA 添加到 snapcraft
【发布时间】:2017-09-08 04:36:35
【问题描述】:

基本问题/目标:

我希望能够使用一些共享库,它们应该在 cmake step(plugin) 之前从自定义 PPA 中获取。

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”的包”

有没有办法解决这个问题?

【问题讨论】:

    标签: snapcraft


    【解决方案1】:

    背景:

    努力将 Gnome 库抽象为一个单独的“平台”快照,该快照使用 Ubuntu 桌面团队的 Gnome-3-26 PPA 在 Launchpad 上构建。 PPA 包含编译为适合 Ubuntu Xenial (16.04) 的运行时环境的 gnome 平台,这将允许针对比构建环境通常包含的更新的 Gnome 构建快照。但这需要构建环境中的自定义 PPA,并且像您一样,我在努力解决如何做到这一点。

    启用 gnome 平台 PPA 后,您仍然需要将 snap 链接到运行时 snap。这是通过添加一个连接到gnome-3-26-1604 的插头并使用desktop-gnome-platform 帮助器来处理的

    我的解决方案:

    我决定使用多部分构建,其中主应用程序“部分”依赖于声明为使用“nil”插件的部分,这意味着它实际上并没有做任何事情。然后,我在 nil 部分添加了一个“准备”脚本,该脚本执行添加 PPA、PGP 密钥和强制更新/升级周期所必需的操作。

    我认为这需要是一个单独的部分,而不是作为主应用程序上的准备脚本,因为构建包是在准备脚本运行之前获取的,这意味着它将无法找到依赖项的包并死掉带有很好的错误消息。这是通过执行多部分方法来解决的。我用它来构建 gnome-twitch snap,这是几天前宣布的,代表 Snapcrafters 的努力。

    示例:

    以下是 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
    

    【讨论】:

    • FWIW,它抱怨包含 desktop-gtk3 部分时具有相同的文件但内容不同。
    • 那是因为您应该在此设置中使用 desktop-gnome-platform 部分。
    【解决方案2】:

    不幸的是,上面的答案不再适用于 snapcraft 的最新更改。根据丹尼尔上面的回答,当前有效的设置如下所示:

    首先,在根范围内,我们需要设置架构以匹配 PPA 中构建的包:

    architectures:
      - build-on: amd64
        run-on: amd64
    

    我们需要software-properties-commondirmngr 才能访问aptapt-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]
    

    【讨论】:

      猜你喜欢
      • 2017-08-16
      • 2021-08-08
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 2012-08-28
      • 2016-11-06
      • 2014-06-26
      • 2020-07-31
      相关资源
      最近更新 更多