首頁 > 系統教程 > Linux > 主體

製作包含私有 snap 的工廠鏡像!

WBOY
發布: 2024-01-07 10:26:09
轉載
694 人瀏覽過
導讀 這篇文章是有關在Ubuntu Core 開發ROS 原型到成品系列的補充,用來回答我收到的一個問題: “我想做一個工廠鏡像,但我不想使我的snap 公開”當然,這個問題和答案都不只是針對於機器人技術。在這篇文章中,我將會透過兩種方法來回答這個問題。

開始之前,你需要了解一些製作Ubuntu Core 鏡像的背景知識,如果你已經看過[在Ubuntu Core 開發ROS 原型到成品3 系列文章(具體是第5 部分),你就已經有了需要的背景知識,如果沒有看過的話,可以查看有關製作你的Ubuntu Core 鏡像的教學。

如果你已經了解了最新的情況,並且當我說「模型定義」 或「模型斷言」 時知道我在談論什麼,那就讓我們開始透過不同的方法使用私有sanps 來製作Ubuntu Core 鏡像吧。

方法 1: 不要上傳你的 snap 到商店

這是最簡單的方法了。首先來看這個有關模型定義的範例—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 意味著你沒有辦法在燒錄了這些鏡像的裝置上更新它。你只能透過製作新的鏡像並重新燒錄到裝置的方式來更新它。

方法 2: 使用品牌商店

當你註冊了一個商店帳號並造訪 dashboard.snapcraft.io 時,你其實是在標準的 Ubuntu 商店中查看你的 snap。如果你是在系統中新安裝的 snapd,預設會從這個商店下載。雖然你可以在 Ubuntu 商店中發布私有的 snap,但是你不能將它們預先安裝到鏡像中,因為只有你(以及你添加的合作者)才有權限去使用它。在這種情況下製作鏡像的唯一方法就是公開發布你的 snap,然而這並不符合這篇文章的目的。

對於這種用例,我們有所謂的 品牌商店。品牌商店仍然託管在 Ubuntu 商店裡,但是它們是針對於某一特定公司或設備的一個定制的、專門的版本。品牌商店可以繼承或不繼承標準的 Ubuntu 商店,品牌商店也可以選擇開放給所有的開發者或將其限制在特定的群組內(保持私有正是我們想要的)。

請注意,這是一個付費功能。你需要 申請一個品牌商店。請求通過後,你將可以透過造訪用戶名下的 “stores you can access” 看到你的新商店。
制作包含私有 snap 的工厂镜像!
在那裡你可以看到多個有權使用的商店。最少的情況下也會有兩個:標準的 Ubuntu 商店以及你的新的品牌商店。選擇品牌商店(紅框),進去後記錄你的商店 ID(藍框):等下你將會用到它。
制作包含私有 snap 的工厂镜像!
在品牌商店裡註冊名字或上傳 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 設定為私有然後使用它製作鏡像),但最後證明是不行的。

另外,我們也收到很多內部部署或企業商店的請求,雖然這樣的產品還沒有公佈,但是商店團隊正在從事這項工作。一旦可用,我將會寫一篇有關它的文章。

希望能幫助您!

以上是製作包含私有 snap 的工廠鏡像!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:linuxprobe.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!