2017-04-12 54 views
2

基地問題/目標:如何添加自定義PPA到snapcraft

我希望能夠從自定義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,我得到的錯誤:

Could not find a required package in 'build-packages': "The cache has no package named 'libmraa-dev'"

有一種解決這個問題的方法?

回答

1

背景:

有努力抽象GNOME庫到被使用的是Ubuntu桌面團隊的侏儒3-26 PPA Launchpad上建立一個獨立的「平臺」管理單元。 PPA包含經過編譯以適應Ubuntu Xenial(16.04)的運行環境的gnome平臺,該平臺允許針對較新的Gnome構建捕捉,而不是構建環境通常包含的捕捉。但是這需要在構建環境中使用自定義PPA,並且像我一樣,我正在努力研究如何執行此操作。

一旦啓用了gnome平臺PPA,您仍然需要將您的snap與運行時管理單元相鏈接。這是通過將它連接到gnome-3-26-1604一個插件,並使用desktop-gnome-platform助手處理

我的解決方案:

我使用一個多部分構建解決那裏的主要應用程序「部分」靠後的一部分聲明爲使用「無」插件,這意味着它實際上沒有做任何事情。然後,我添加了一個「準備」腳本到零部件,這些零部件需要添加PPA,它是PGP密鑰,並強制更新/升級週期。

我相信這需要是一個獨立的部分,而不是作爲主應用程序的準備腳本,因爲在準備腳本運行之前獲取構建包,這意味着它將無法找到依賴關係的包並且死於一個很好的錯誤信息。這通過執行多部分方法來解決。我用它來建立gnome-twitch快照,這是幾天前宣佈的,代表Snapcrafters的努力。

例子:

下面是GNOME肌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 
+0

FWIW,其主訴其witth不同的相同文件,但包含'desktop-gtk3'部分時的內容。 – Cimm