Maison  >  Article  >  Tutoriel système  >  Créez une image d'usine contenant un snap privé !

Créez une image d'usine contenant un snap privé !

WBOY
WBOYavant
2024-01-07 10:26:09646parcourir
Présentation Cet article est un ajout à la série sur le développement de ROS du prototype au produit fini sur Ubuntu Core, en réponse à une question que j'ai reçue : "Je veux créer une image d'usine, mais je ne veux pas rendre mon snap public " Bien entendu, ces questions et réponses ne sont pas spécifiques à la robotique. Dans cet article, je répondrai à cette question de deux manières.

Avant de commencer, vous devez connaître quelques connaissances de base sur la création d'images Ubuntu Core. Si vous avez lu [Développement du prototype ROS jusqu'au produit fini dans la série d'articles Ubuntu Core 3 (en particulier la partie 5), vous disposez déjà des connaissances de base nécessaires. si vous ne l'avez pas vu, vous pouvez consulter le tutoriel sur la création de votre image Ubuntu Core.

Si vous êtes à jour et savez de quoi je parle quand je dis « définition de modèle » ou « assertion de modèle », commençons à utiliser des sanps privés à travers différentes méthodes pour créer des images Ubuntu Core.

Méthode 1 : Ne téléchargez pas votre snap sur la boutique

C'est le moyen le plus simple. Jetez d'abord un œil à cet exemple de définition de modèle - 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"]
}

Convertissons cela en assertion de modèle :

$ 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
...

Après avoir obtenu l'assertion de modèle : amd64.model, si vous la donnez à ubuntu-image maintenant, vous vous heurterez à un mur :

$ 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

Actuellement, il n'y a pas de snap nommé kyrofa-test-snap dans le magasin. Il est important de noter ici que la définition du modèle (et l'assertion convertie) ne contient qu'une série de noms instantanés. Si vous avez un snap avec ce nom localement, même s'il n'existe pas dans le magasin, vous pouvez dire à ubuntu-image de l'utiliser en faisant correspondre ce nom dans les assertions via l'option --extra-snaps :

$ 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.

Maintenant, sans que le snap soit téléchargé sur le magasin, vous avez obtenu une image Ubuntu Core (nommée pc.img) avec le snap privé préinstallé. Mais il y a un gros problème avec cela. ubuntu-image affichera un avertissement : ne pas préinstaller le snap via le magasin connecté signifie que vous n'avez aucun moyen de le mettre à jour sur l'appareil qui a gravé ces images. Vous ne pouvez la mettre à jour qu'en créant une nouvelle image et en la reflasher sur l'appareil.

Méthode 2 : Utiliser un magasin de marque

Lorsque vous créez un compte de magasin et visitez Dashboard.snapcraft.io, vous visualisez réellement vos clichés dans la boutique Ubuntu standard. Si vous avez récemment installé Snapd sur votre système, il sera téléchargé par défaut à partir de cette boutique. Bien que vous puissiez publier des instantanés privés dans l'Ubuntu Store, vous ne pouvez pas les préinstaller dans une image car vous seul (et les collaborateurs que vous ajoutez) êtes autorisé à l'utiliser. La seule façon de créer un miroir dans cette situation est de publier votre cliché publiquement, mais cela ne répond pas au but de cet article.

Pour ce cas d'utilisation, nous avons ce que l'on appelle des Brand Stores. Les magasins de marque sont toujours hébergés dans la boutique Ubuntu, mais il s'agit d'une version personnalisée et spécialisée pour une entreprise ou un appareil spécifique. Les magasins de marque peuvent ou non hériter du magasin Ubuntu standard, et les magasins de marque peuvent choisir d'être ouverts à tous les développeurs ou limités à un groupe spécifique (les garder privés est ce que nous voulons).

Veuillez noter qu'il s'agit d'une fonctionnalité payante. Vous devez postuler pour un magasin de marque. Une fois la demande approuvée, vous pourrez voir votre nouveau magasin en accédant aux « magasins auxquels vous pouvez accéder » sous votre nom d'utilisateur.
制作包含私有 snap 的工厂镜像!
Là, vous pouvez voir plusieurs magasins auxquels vous avez accès. Il y en aura au minimum deux : la boutique Ubuntu standard et votre nouvelle boutique de marque. Sélectionnez la boutique de la marque (case rouge), saisissez et enregistrez votre identifiant de boutique (case bleue) : vous en aurez besoin plus tard.
制作包含私有 snap 的工厂镜像!
L'enregistrement d'un nom ou le téléchargement d'un snap dans la boutique de marque utilise les mêmes méthodes que dans la boutique standard, sauf qu'ils sont désormais téléchargés sur la boutique de votre marque au lieu de la boutique standard. Si vous placez la boutique de votre marque en mode non répertorié, ces snaps ne seront pas visibles par les utilisateurs externes. Mais ce qu’il faut noter ici, c’est que lors du premier téléchargement d’un snap, celui-ci doit être exploité via l’interface Web. Après cela, vous pouvez continuer à travailler avec Snapcraft comme d'habitude.

Alors, comment cela a-t-il changé ? Mon "kyrofal-store" hérite des snaps du magasin Ubuntu et contient également un "kyrofa-bran-test-snap" publié dans le canal stable. Ce snap n'est pas disponible dans la boutique Ubuntu et si vous le recherchez, vous ne le trouverez pas :

$ snap find kyrofa-branded
The search "kyrofa-branded" returned 0 snaps

Mais en utilisant l'ID de magasin que nous avons enregistré plus tôt, nous pouvons créer une assertion de modèle qui télécharge le snap depuis le magasin de la marque au lieu du magasin Ubuntu. Il suffit d'ajouter la clé « store » au fichier JSON, comme ceci :

{
"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"
}

Signez-le en utilisant la méthode de la méthode 1, puis nous pouvons simplement créer une image Ubuntu Core préinstallée avec notre snap privé de magasin de marque comme ceci :

$ 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.

Maintenant, comme à la fin de la méthode 1, vous avez un pc.img prêt pour l'usine. Et tous les clichés des images créées à l'aide de cette méthode sont téléchargés depuis la boutique, ce qui signifie qu'ils seront mis à jour automatiquement comme d'habitude.

Conclusion

Jusqu'à présent, il n'y a que deux façons de procéder. Quand j'ai commencé à écrire cet article, je pensais qu'il pourrait y avoir une troisième solution (rendre le snap privé puis l'utiliser pour créer un miroir), mais cela s'est avéré impossible.

De plus, nous avons également reçu de nombreuses demandes de déploiement interne ou de magasins d'entreprise. Bien que de tels produits n'aient pas encore été annoncés, l'équipe du magasin y travaille. J'écrirai un article à ce sujet dès qu'il sera disponible.

J'espère que cela vous aidera !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer