Einführung | Dieser Beitrag ist eine Ergänzung zur Serie über die Entwicklung von ROS vom Prototyp bis zum fertigen Produkt auf Ubuntu Core, als Antwort auf eine Frage, die ich erhalten habe: „Ich möchte ein Factory-Image erstellen, aber ich möchte meinen Snap nicht veröffentlichen.“ „Natürlich sind diese Frage und Antworten nicht spezifisch für die Robotik. In diesem Beitrag werde ich diese Frage auf zwei Arten beantworten. |
Bevor Sie beginnen, müssen Sie über einige Hintergrundkenntnisse zum Erstellen von Ubuntu Core-Images verfügen. Wenn Sie die Artikelreihe „Entwicklung eines ROS-Prototyps zum fertigen Produkt“ (insbesondere Teil 5) gelesen haben, verfügen Sie bereits über das erforderliche Hintergrundwissen. Wenn Sie es noch nicht gesehen haben, können Sie sich das Tutorial zum Erstellen Ihres Ubuntu Core-Images ansehen.
Wenn Sie auf dem neuesten Stand sind und wissen, wovon ich spreche, wenn ich „Modelldefinition“ oder „Modellbehauptung“ sage, beginnen wir mit der Verwendung privater Sanps über verschiedene Methoden, um Ubuntu Core-Images zu erstellen.
Methode 1: Laden Sie Ihren Snap nicht in den Store hochDas ist der einfachste Weg. Schauen Sie sich zunächst dieses Beispiel einer Modelldefinition an – 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"] }
Lassen Sie uns dies in eine Modellaussage umwandeln:
$ 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 ...
Nachdem Sie die Modellzusicherung erhalten haben: amd64.model, wenn Sie sie jetzt an ubuntu-image übergeben, werden Sie an eine Wand stoßen:
$ 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
Eigentlich gibt es im Shop keinen Snap namens kyrofa-test-snap. Hierbei ist zu beachten, dass die Modelldefinition (und die konvertierte Behauptung) nur eine Reihe von Snap-Namen enthält. Wenn Sie lokal einen Snap mit diesem Namen haben, auch wenn dieser nicht im Store vorhanden ist, können Sie ubuntu-image anweisen, ihn zu verwenden, indem Sie diesen Namen in Behauptungen über die Option --extra-snaps abgleichen:
$ 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.
Jetzt haben Sie, ohne dass der Snap in den Store hochgeladen wurde, ein Ubuntu Core-Image (mit dem Namen pc.img) erhalten, auf dem der private Snap vorinstalliert ist. Dabei gibt es jedoch ein großes Problem. Ubuntu-Image gibt eine Warnung aus: Wenn Sie den Snap nicht über den verbundenen Store vorinstallieren, haben Sie keine Möglichkeit, ihn auf dem Gerät zu aktualisieren, auf dem diese Images gebrannt wurden. Sie können es nur aktualisieren, indem Sie ein neues Image erstellen und es erneut auf das Gerät flashen.
Methode 2: Nutzen Sie einen MarkenshopWenn Sie sich für ein Store-Konto anmelden und Dashboard.snapcraft.io besuchen, sehen Sie Ihre Snaps tatsächlich im Standard-Ubuntu-Store. Wenn Sie snapd neu auf Ihrem System installiert haben, wird es standardmäßig aus diesem Store heruntergeladen. Während Sie private Schnappschüsse im Ubuntu Store veröffentlichen können, können Sie sie nicht in einem Image vorinstallieren, da nur Sie (und die von Ihnen hinzugefügten Mitarbeiter) die Berechtigung zur Verwendung haben. Die einzige Möglichkeit, in dieser Situation einen Spiegel zu erstellen, besteht darin, Ihren Schnappschuss öffentlich zu veröffentlichen. Dies dient jedoch nicht dem Zweck dieses Beitrags.
Für diesen Anwendungsfall haben wir sogenannte Brand Stores. Marken-Stores werden weiterhin im Ubuntu Store gehostet, es handelt sich jedoch um eine angepasste, spezialisierte Version für ein bestimmtes Unternehmen oder Gerät. Brand Stores können vom Standard-Ubuntu-Store erben oder auch nicht, und Brand Stores können sich dafür entscheiden, allen Entwicklern offen zu stehen oder auf eine bestimmte Gruppe beschränkt zu sein (wir wollen, dass sie privat bleiben).
Bitte beachten Sie, dass es sich hierbei um eine kostenpflichtige Funktion handelt. Sie müssen sich für einen Markenshop bewerben. Sobald die Anfrage genehmigt wurde, können Sie Ihren neuen Shop sehen, indem Sie unter Ihrem Benutzernamen auf „Shops, auf die Sie zugreifen können“ zugreifen.
Dort sehen Sie mehrere Geschäfte, auf die Sie Zugriff haben. Es wird mindestens zwei geben: den Standard-Ubuntu-Store und Ihren neuen Marken-Store. Wählen Sie den Markenshop (rotes Feld) aus, geben Sie Ihre Store-ID ein und notieren Sie sie (blaues Feld): Sie werden sie später benötigen.
Für die Registrierung eines Namens oder das Hochladen eines Snaps im Marken-Store werden die gleichen Methoden wie im Standard-Store verwendet, mit der Ausnahme, dass sie jetzt in Ihren Marken-Store hochgeladen werden, statt in den Standard-Store. Wenn Sie Ihren Markenshop auf „Nicht gelistet“ platzieren, sind diese Snaps für externe Benutzer nicht sichtbar. Hierbei ist jedoch zu beachten, dass beim erstmaligen Hochladen eines Snaps dieser über die Weboberfläche bedient werden muss. Danach können Sie wie gewohnt mit Snapcraft weiterarbeiten.
Wie haben sich diese verändert? Mein „kyrofal-store“ erbt Snaps vom Ubuntu-Store und enthält auch einen „kyrofa-bran-test-snap“, der im Stable-Channel veröffentlicht wird. Dieser Snap ist nicht im Ubuntu-Store verfügbar und wenn Sie danach suchen, werden Sie ihn nicht finden:
$ snap find kyrofa-branded The search "kyrofa-branded" returned 0 snaps
Aber mithilfe der Store-ID, die wir zuvor aufgezeichnet haben, können wir eine Modellbehauptung erstellen, die den Snap aus dem Marken-Store und nicht aus dem Ubuntu-Store herunterlädt. Wir müssen nur den „store“-Schlüssel zur JSON-Datei hinzufügen, etwa so:
{ "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" }
Signieren Sie es mit der Methode in Methode 1, und dann können wir einfach ein Ubuntu Core-Image erstellen, auf dem unser privater Marken-Store-Snap vorinstalliert ist, wie folgt:
$ 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.
Jetzt haben Sie, genau wie am Ende von Methode 1, ein pc.img für die Fabrik bereit. Und alle Schnappschüsse in Bildern, die mit dieser Methode erstellt wurden, werden aus dem Store heruntergeladen, was bedeutet, dass sie wie gewohnt automatisch aktualisiert werden.
FazitBisher gibt es nur zwei Möglichkeiten, dies zu tun. Als ich anfing, diesen Beitrag zu schreiben, dachte ich, es gäbe vielleicht einen dritten Weg (den Schnappschuss privat zu machen und ihn dann zum Erstellen eines Spiegels zu verwenden), aber das erwies sich als nicht möglich.
Darüber hinaus haben wir auch viele Anfragen für interne Bereitstellungen oder Enterprise-Stores erhalten. Obwohl solche Produkte noch nicht angekündigt wurden, arbeitet das Store-Team daran. Ich werde einen Artikel darüber schreiben, sobald es verfügbar ist.
Ich hoffe, es hilft dir!
Das obige ist der detaillierte Inhalt vonErstellen Sie ein Factory-Image mit einem privaten Schnappschuss!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!