製作包含私有 snap 的工廠映象!
導讀 | 這篇帖子是有關 在 Ubuntu Core 開發 ROS 原型到成品 系列的補充,用來回答我收到的一個問題: “我想做一個工廠映象,但我不想使我的 snap 公開” 當然,這個問題和回答都不只是針對於機器人技術。在這篇帖子中,我將會透過兩種方法來回答這個問題。 |
開始之前,你需要了解一些製作 Ubuntu Core 映象的背景知識,如果你已經看過 [在 Ubuntu Core 開發 ROS 原型到成品3 系列文章(具體是第 5 部分),你就已經有了需要的背景知識,如果沒有看過的話,可以檢視有關 製作你的 Ubuntu Core 映象 的教程。
如果你已經瞭解了最新的情況,並且當我說 “模型定義” 或者 “模型斷言” 時知道我在談論什麼,那就讓我們開始透過不同的方法使用私有 sanps 來製作 Ubuntu Core 映象吧。
這是最簡單的方法了。首先看一下這個有關模型定義的例子——amd64-model.json:
{ "type": "model", "series": "16", "model": "custom-amd64", "architecture": "amd64", "gadget": "pc", "kernel": "pc-kernel", "authority-id": "4tSgWHfAL1vm9l8mSiutBDKnnSQBv0c8", "brand-id": "4tSgWHfAL1vm9l8mSiutBDKnnSQBv0c8", "timestamp": "2017-06-23T21:03:24+00:00", "required-snaps": ["kyrofa-test-snap"] }
讓我們將它轉換成模型斷言:
$ cat amd64-model.json | snap sign -k my-key-name > amd64.model You need a passphrase to unlock the secret key for user: "my-key-name" 4096-bit RSA key, ID 0B79B865, created 2016-01-01 ...
獲得模型斷言:amd64.model 後,如果你現在就把它交給 ubuntu-image 使用,你將會碰釘子:
$ sudo ubuntu-image -c stable amd64.model Fetching core Fetching pc-kernel Fetching pc Fetching kyrofa-test-snap error: cannot find snap "kyrofa-test-snap": snap not found COMMAND FAILED: snap prepare-image --channel=stable amd64.model /tmp/tmp6p453gk9/unpack
實際上商店中並沒有名為 kyrofa-test-snap 的 snap。這裡需要重點說明的是:模型定義(以及轉換後的斷言)只包含了一系列的 snap 的名字。如果你在本地有個那個名字的 snap,即使它沒有存在於商店中,你也可以透過 --extra-snaps 選項告訴 ubuntu-image 在斷言中匹配這個名字來使用它:
$ sudo ubuntu-image -c stable \ --extra-snaps /path/to/kyrofa-test-snap_0.1_amd64.snap \ amd64.model Fetching core Fetching pc-kernel Fetching pc Copying "/path/to/kyrofa-test-snap_0.1_amd64.snap" (kyrofa-test-snap) kyrofa-test-snap already prepared, skipping WARNING: "kyrofa-test-snap" were installed from local snaps disconnected from a store and cannot be refreshed subsequently! Partition size/offset need to be a multiple of sector size (512). The size/offset will be rounded up to the nearest sector.
現在,在 snap 並沒有上傳到商店的情況下,你已經獲得一個預裝了私有 snap 的 Ubuntu Core 映象(名為 pc.img)。但是這樣做有一個很大的問題,ubuntu-image 會提示一個警告:不透過連線商店預裝 snap 意味著你沒有辦法在燒錄了這些映象的裝置上更新它。你只能透過製作新的映象並重新燒錄到裝置的方式來更新它。
當你註冊了一個商店賬號並訪問 dashboard.snapcraft.io 時,你其實是在標準的 Ubuntu 商店中檢視你的 snap。如果你是在系統中新安裝的 snapd,預設會從這個商店下載。雖然你可以在 Ubuntu 商店中釋出私有的 snap,但是你不能將它們預裝到映象中,因為只有你(以及你新增的合作者)才有許可權去使用它。在這種情況下製作映象的唯 一方式就是公開發布你的 snap,然而這並不符合這篇帖子的目的。
對於這種用例,我們有所謂的 品牌商店。品牌商店仍然託管在 Ubuntu 商店裡,但是它們是針對於某一特定公司或裝置的一個定製的、專門的版本。品牌商店可以繼承或者不繼承標準的 Ubuntu 商店,品牌商店也可以選擇開放給所有的開發者或者將其限制在一個特定的組內(保持私有正是我們想要的)。
請注意,這是一個付費功能。你需要 申請一個品牌商店。請求透過後,你將可以透過訪問使用者名稱下的 “stores you can access” 看到你的新商店。
在那裡你可以看到多個有權使用的商店。最少的情況下也會有兩個:標準的 Ubuntu 商店以及你的新的品牌商店。選擇品牌商店(紅框),進去後記錄下你的商店 ID(藍框):等下你將會用到它。
在品牌商店裡註冊名字或者上傳 snap 和標準的商店使用的方法是一樣的,只是它們現在是上傳到你的品牌商店而不是標準的那個。如果你將品牌商店放在 unlisted 裡面,那麼這些 snap 對外部使用者是不可見。但是這裡需要注意的是第一次上傳 snap 的時候需要透過 web 介面來操作。在那之後,你可以繼續像往常一樣使用 Snapcraft 來操作。
那麼這些是如何改變的呢?我的 “kyrofal-store” 從 Ubuntu 商店繼承了 snap,並且還包含一個釋出在穩定通道中的 “kyrofa-bran-test-snap” 。這個 snap 在 Ubuntu 商店裡是使用不了的,如果你去搜尋它,你是找不到的:
$ snap find kyrofa-branded The search "kyrofa-branded" returned 0 snaps
但是使用我們前面記錄的商店 ID,我們可以建立一個從品牌商店而不是 Ubuntu 商店下載 snap 的模型斷言。我們只需要將 “store” 鍵新增到 JSON 檔案中,就像這樣:
{ "type": "model", "series": "16", "model": "custom-amd64", "architecture": "amd64", "gadget": "pc", "kernel": "pc-kernel", "authority-id": "4tSgWHfAL1vm9l8mSiutBDKnnSQBv0c8", "brand-id": "4tSgWHfAL1vm9l8mSiutBDKnnSQBv0c8", "timestamp": "2017-06-23T21:03:24+00:00", "required-snaps": ["kyrofa-branded-test-snap"], "store": "kyek" }
使用方法 1 中的方式對它簽名,然後我們就可以像這樣很簡單的製作一個預裝有我們品牌商店私有 snap 的 Ubuntu Core 映象:
$ sudo ubuntu-image -c stable amd64.model Fetching core Fetching pc-kernel Fetching pc Fetching kyrofa-branded-test-snap Partition size/offset need to be a multiple of sector size (512). The size/offset will be rounded up to the nearest sector.
現在,和方法 1 的最後一樣,你獲得了一個為工廠準備的 pc.img。並且使用這種方法制作的映象中的所有 snap 都從商店下載的,這意味著它們將能像平常一樣自動更新。
到目前為止,做這個只有兩種方法。當我開始寫這篇帖子的時候,我想過可能還有第三種(將 snap 設定為私有然後使用它製作映象),但最後證明是不行的。
另外,我們也收到很多內部部署或者企業商店的請求,雖然這樣的產品還沒有公佈,但是商店團隊正在從事這項工作。一旦可用,我將會寫一篇有關它的文章。
希望能幫助到您!
via: https://insights.ubuntu.com/2017/07/11/ubuntu-core-making-a-factory-image-with-private-snaps/
作者:[Kyle Fazzari][a] 譯者:Snaplee 校對:wxy
本文由 LCTT 原創編譯, 中國 榮譽推出
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2987776/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Dockerfile映象的製作Docker
- 製作KubeVirt映象
- 製作Docker映象Docker
- proxmox映象製作
- Docker入門系列之二:使用dockerfile製作包含指定web應用的映象DockerWeb
- YashanDB Docker映象製作Docker
- oracle製作docker映象OracleDocker
- Docker製作jdk映象DockerJDK
- Docker 映象製作方法Docker
- 工廠的立體圖怎麼畫好看?智慧工廠電子地圖製作平臺地圖
- 製作容器映象的最佳實踐
- Docker如何製作映象-Dockerfile的使用Docker
- Docker二所映象製作Docker
- Linux 製作系統映象Linux
- Docker私有映象Docker
- 製作CocoaPods公有庫和私有庫
- 如何製作一個CocoaPods私有庫
- 製作 Python Docker 映象的最佳實踐PythonDocker
- 映象的製作CMD與ENTRYPOINT區別
- docker 製作與使用 arcgisserver 映象DockerServer
- alpine 製作 PHP 環境映象PHP
- 自己製作redis 和mongo 映象RedisGo
- 樹莓派製作映象並縮小映象尺寸樹莓派
- 構建私有映象
- 自編譯製作docker版本的onlyoffice映象編譯Docker
- docker製作自己的映象並上傳dockerhubDocker
- 伺服器:如何製作docker映象伺服器Docker
- 如何用ffmpeg製作包含背景圖的音訊影片?音訊
- 智慧工廠——智慧製造的載體
- 自己動手製作elasticsearch-head的Docker映象ElasticsearchDocker
- docker決戰到底(五) 製作自己的Jenkins映象DockerJenkins
- 製作Windows 11與M365的整合映象Windows
- 定製 ERP 工廠版本功能
- cnetos7 ISO 映象自定義製作
- OrangePiPC替代法完成Gentoo映象製作
- 怎樣製作win10的iOS映象安裝U盤_製作win10 iso映象安裝U盤教程Win10iOS
- centos製作具備telnet和ping功能的docker映象CentOSDocker
- 湃兔更新映象檔案的製作與燒寫