<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Metal as a Service on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/metal-as-a-service/</link><description>Recent content in Metal as a Service on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Sat, 04 Jan 2025 18:00:00 +0200</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/metal-as-a-service/index.xml" rel="self" type="application/rss+xml"/><item><title>Sidero Omni - Talos Linux sur Oracle Cloud (en free tier)</title><link>https://blog.zwindler.fr/2025/01/04/sideros-omni-talos-oracle-cloud/</link><pubDate>Sat, 04 Jan 2025 18:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2025/01/04/sideros-omni-talos-oracle-cloud/</guid><description>&lt;img src="https://blog.zwindler.fr/2025/01/omni-oracle.webp" alt="Featured image of post Sidero Omni - Talos Linux sur Oracle Cloud (en free tier)" /&gt;&lt;p&gt;Fun fact, le 4 janvier 2024 (il y a tout pile un an donc), mon premier article de l&amp;rsquo;année était sur &lt;a class="link" href="https://blog.zwindler.fr/2024/01/04/un-peu-plus-loin-avec-maas-canonical" &gt;Maas&lt;/a&gt;. Commencer 2025, le même jour, avec un autre article à propos d&amp;rsquo;une solution qui vise à automatiser de l&amp;rsquo;infra, notamment en bare metal, c&amp;rsquo;est drôle :)&lt;/p&gt;
&lt;h2 id="contexte"&gt;Contexte
&lt;/h2&gt;&lt;p&gt;J&amp;rsquo;ai gagné !!!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/01/sidero-win.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Je joue de temps en temps à des jeux sur les réseaux sociaux (plus rarement maintenant) et il m&amp;rsquo;arrive aussi de faire des concours parfois en conférence.&lt;/p&gt;
&lt;p&gt;Et là, j&amp;rsquo;ai gagné un an d&amp;rsquo;abonnement au SaaS de Sidero Labs (les créateurs de Talos Linux), &lt;strong&gt;Omni&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pour celles et ceux qui se demandent, Omni est une solution de déploiement de clusters Kubernetes qui permet d&amp;rsquo;orchestrer des serveurs sous Talos, un système d&amp;rsquo;exploitation Linux minimaliste et sécurisé dédié à Kubernetes. Pour ce qui est de Talos, on en reparlera certainement dans de prochains articles.&lt;/p&gt;
&lt;h2 id="quel-rapport-avec-oracle-cloud-"&gt;Quel rapport avec Oracle Cloud ?
&lt;/h2&gt;&lt;p&gt;Gagner, c&amp;rsquo;est bien, ça fait toujours plaisir. Mais j&amp;rsquo;en fais quoi, désormais, de ce SaaS ?&lt;/p&gt;
&lt;p&gt;La première idée qui vient à l&amp;rsquo;esprit est de commander un serveur dédié quelque part et d&amp;rsquo;installer Talos dessus (avec un ISO généré par Omni), ou alors de faire la même chose, mais d&amp;rsquo;installer un hyperviseur, puis de créer des VMs Talos Linux (là encore, grâce à Omni).&lt;/p&gt;
&lt;p&gt;Mais je suis &lt;del&gt;radin&lt;/del&gt; un éternel économe et j&amp;rsquo;ai vu qu&amp;rsquo;Oracle Cloud Infrastructure (OCI) est supporté par Talos Linux et Omni, et donc j&amp;rsquo;ai voulu essayer.&lt;/p&gt;
&lt;p&gt;Pour ceux qui ne connaissent pas OCI, j&amp;rsquo;ai fait une série d&amp;rsquo;articles en 2023 pour expliquer comment créer un cluster gratuit avec &lt;code&gt;kubeadm&lt;/code&gt; sur le free tier (assez généreux) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/04/24/cluster-kubernetes-gratuit-part1/" &gt;Un cluster Kubernetes gratuit pour vos labs persos ! - part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/05/23/cluster-kubernetes-gratuit-part2/" &gt;Un cluster Kubernetes gratuit pour vos labs persos ! - part 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On va donc réutiliser le free tier ici, mais pour déployer et gérer des clusters avec Omni.&lt;/p&gt;
&lt;p&gt;Note : vous pouvez les relire, mais j&amp;rsquo;ai fait mieux depuis car j&amp;rsquo;ai réussi à intégrer les machines du free tier DANS un cluster Kubernetes managé, bien plus agréable à utiliser. Stay tuned pour l&amp;rsquo;article à venir ;).&lt;/p&gt;
&lt;h2 id="prérequis"&gt;Prérequis
&lt;/h2&gt;&lt;p&gt;Pour Talos Linux sur Oracle Cloud Infrastructure (OCI) et plus spécifiquement intégrer les machines à Omni, il y a quelques étapes de configuration nécessaires.&lt;/p&gt;
&lt;p&gt;Note : ce tutoriel s&amp;rsquo;appuie partiellement sur &lt;a class="link" href="https://www.talos.dev/v1.9/talos-guides/install/cloud-platforms/oracle/" target="_blank" rel="noopener"
&gt;la documentation officielle de Talos Linux&lt;/a&gt;, adaptée pour Omni et avec des détails complémentaires sur Oracle Cloud Infrastructure.&lt;/p&gt;
&lt;p&gt;Je pars du principe que vous avez déjà un compte sur Oracle Cloud Infrastructure, ainsi que les binaires &lt;code&gt;talosctl&lt;/code&gt; et la CLI &lt;code&gt;oci&lt;/code&gt;. Sinon un petit :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; brew install oci-cli talosctl
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Authentifiez-vous avec l&amp;rsquo;outil CLI :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;oci session authenticate
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lorsque l&amp;rsquo;authentification est demandée, choisissez la région correspondant à votre localisation (par exemple, eu-paris-1). Une fois terminé, vous verrez un message de confirmation dans le navigateur et il faudra donner un petit nom mignon au profil pour &lt;code&gt;oci&lt;/code&gt; dans le terminal et valider.&lt;/p&gt;
&lt;h2 id="récupération-du-compartment-id"&gt;Récupération du compartment ID
&lt;/h2&gt;&lt;p&gt;Un des concepts intéressants d&amp;rsquo;Oracle Cloud Infrastructure (qu&amp;rsquo;on retrouve chez d&amp;rsquo;autres cloud providers sous une forme ou une autre) est la notion de &amp;ldquo;compartment&amp;rdquo;. Grosso modo, les ressources sont stockées dans des &amp;ldquo;compartiments&amp;rdquo; (la traduction littérale fonctionne pour comprendre) pour organiser les ressources.&lt;/p&gt;
&lt;p&gt;On peut travailler dans le &amp;ldquo;root&amp;rdquo; compartment, mais c&amp;rsquo;est quand même plus propre d&amp;rsquo;en créer un spécifique pour l&amp;rsquo;occasion.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/01/compartments.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Exemple d&amp;rsquo;OCID :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ocid1.compartment.oc1..aaaaaaaayrmiilkb5m2b7never345435gonna345give87978you12upu6ifoh6csihm4awsjq
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="préparation-de-lenvironnement-oracle-cloud"&gt;Préparation de l&amp;rsquo;environnement Oracle Cloud
&lt;/h2&gt;&lt;p&gt;Une fois qu&amp;rsquo;on a ça, on va utiliser la CLI pour créer tous les trucs dont on va avoir besoin pour que nos machines virtuelles puissent s&amp;rsquo;enregistrer sur le SaaS d&amp;rsquo;omni.&lt;/p&gt;
&lt;p&gt;Création d&amp;rsquo;un VCN (Virtual Cloud Network) et configuration réseau :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;cidr_block&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10.0.0.0/16
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;subnet_block&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10.0.0.0/24
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;compartment_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;votre_ocid_compartment&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Créer le VCN et le sous-réseau :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;vcn_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;oci network vcn create --cidr-block &lt;span class="nv"&gt;$cidr_block&lt;/span&gt; --display-name talos-example --compartment-id &lt;span class="nv"&gt;$compartment_id&lt;/span&gt; --query data.id --raw-output&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;rt_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;oci network subnet create --cidr-block &lt;span class="nv"&gt;$subnet_block&lt;/span&gt; --display-name kubernetes --compartment-id &lt;span class="nv"&gt;$compartment_id&lt;/span&gt; --vcn-id &lt;span class="nv"&gt;$vcn_id&lt;/span&gt; --query data.route-table-id --raw-output&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;À l&amp;rsquo;issue de la 2e commande, on récupère non pas l&amp;rsquo;OCID du subnet (on n&amp;rsquo;en a pas besoin), mais celui de la &amp;ldquo;Route Table&amp;rdquo;, un sous-composant du subnet, qui permet de définir la table de routage du subnet qu&amp;rsquo;on vient de créer.&lt;/p&gt;
&lt;p&gt;Configurer une passerelle (Internet Gateway) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;ig_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;oci network internet-gateway create --compartment-id &lt;span class="nv"&gt;$compartment_id&lt;/span&gt; --is-enabled &lt;span class="nb"&gt;true&lt;/span&gt; --vcn-id &lt;span class="nv"&gt;$vcn_id&lt;/span&gt; --query data.id --raw-output&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ajouter une règle de routage (à notre route table) pour permettre l&amp;rsquo;accès Internet :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;oci network route-table update --rt-id &lt;span class="nv"&gt;$rt_id&lt;/span&gt; --route-rules &lt;span class="s2"&gt;&amp;#34;[{\&amp;#34;cidrBlock\&amp;#34;:\&amp;#34;0.0.0.0/0\&amp;#34;,\&amp;#34;networkEntityId\&amp;#34;:\&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$ig_id&lt;/span&gt;&lt;span class="s2"&gt;\&amp;#34;}]&amp;#34;&lt;/span&gt; --force
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Désactiver les règles par défaut du pare-feu (YOLO) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;sl_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;oci network vcn list --compartment-id &lt;span class="nv"&gt;$compartment_id&lt;/span&gt; --query &lt;span class="s1"&gt;&amp;#39;data[0].&amp;#34;default-security-list-id&amp;#34;&amp;#39;&lt;/span&gt; --raw-output&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;À partir de là, on a la partie réseau fonctionnelle, prête à accueillir nos machines !&lt;/p&gt;
&lt;h2 id="mais-ce-nest-pas-terminé--"&gt;Mais ce n&amp;rsquo;est pas terminé :-/
&lt;/h2&gt;&lt;p&gt;Chez Oracle Cloud Infrastructure, il est possible de booter une liste d&amp;rsquo;OS prédéfinis, mais dans notre cas, Talos Linux n&amp;rsquo;est pas dans la liste.&lt;/p&gt;
&lt;p&gt;Heureusement, Omni va nous générer un disque virtuel préconfiguré avec nos credentials, qui va nous permettre d&amp;rsquo;enrôler des serveurs Talos Linux à notre SaaS Omni dès le premier boot. Classe 😎.&lt;/p&gt;
&lt;p&gt;On se connecte donc à notre interface Omni et on télécharge l&amp;rsquo;image de Talos Linux adaptée :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/01/omni_iso_generation.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Ici, j&amp;rsquo;ai choisi la version 1.9.1 (la toute dernière car on aime le danger), pour architecture amd64. Je récupère l&amp;rsquo;image &lt;code&gt;oracle-amd64-omni-zwindler-v1.9.1.qcow2.xz&lt;/code&gt; que je décompresse :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;xz --decompress ./oracle-amd64-omni-zwindler-v1.9.1.qcow2.xz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Rappel : le free tier d&amp;rsquo;OCI consiste en :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2 machines &lt;strong&gt;amd64&lt;/strong&gt; de 1 oCPU (= vCPU) et 1 Go de RAM chacune&lt;/li&gt;
&lt;li&gt;une combinaison &lt;em&gt;flexible&lt;/em&gt; d&amp;rsquo;instances &lt;strong&gt;arm64&lt;/strong&gt; ayant 1 x &lt;strong&gt;n&lt;/strong&gt; oCPU et 6 x &lt;strong&gt;n&lt;/strong&gt; Go, tant que le total n&amp;rsquo;excède pas 4 oCPU (et donc 6x4 = 24 Go de RAM).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sur OCI, il existe plusieurs formats pour importer des disques. Le plus simple est d&amp;rsquo;utiliser le format &amp;ldquo;maison&amp;rdquo; d&amp;rsquo;OCI (le .oci, extra original comme nom), qui se compose d&amp;rsquo;un fichier de métadonnées et du QCOW2.&lt;/p&gt;
&lt;p&gt;Créez le fichier de métadonnées pour l&amp;rsquo;importation, avec la shape &lt;strong&gt;VM.Standard.E2.1.Micro&lt;/strong&gt; car on a une image amd64 (sinon c&amp;rsquo;est VM.Standard.A1.Flex) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; image_metadata.json &lt;span class="s"&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;version&amp;#34;: 2,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;externalLaunchOptions&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;firmware&amp;#34;: &amp;#34;UEFI_64&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;networkType&amp;#34;: &amp;#34;PARAVIRTUALIZED&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;bootVolumeType&amp;#34;: &amp;#34;PARAVIRTUALIZED&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;remoteDataVolumeType&amp;#34;: &amp;#34;PARAVIRTUALIZED&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;localDataVolumeType&amp;#34;: &amp;#34;PARAVIRTUALIZED&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;launchOptionsSource&amp;#34;: &amp;#34;PARAVIRTUALIZED&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;pvAttachmentVersion&amp;#34;: 2,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;pvEncryptionInTransitEnabled&amp;#34;: true,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;consistentVolumeNamingEnabled&amp;#34;: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;imageCapabilityData&amp;#34;: null,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;imageCapsFormatVersion&amp;#34;: null,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;operatingSystem&amp;#34;: &amp;#34;Talos&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;operatingSystemVersion&amp;#34;: &amp;#34;1.9.1&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;additionalMetadata&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;shapeCompatibilities&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;internalShapeName&amp;#34;: &amp;#34;VM.Standard.E2.1.Micro&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;ocpuConstraints&amp;#34;: null,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;memoryConstraints&amp;#34;: null
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et créez ensuite l&amp;rsquo;image pour l&amp;rsquo;importation :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qemu-img convert -f raw -O qcow2 oracle-amd64-omni-zwindler-v1.9.1.raw oracle-amd64-omni-zwindler-v1.9.1.qcow2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tar zcf oracle-amd64-omni-zwindler-v1.9.1.oci oracle-amd64-omni-zwindler-v1.9.1.qcow2 image_metadata.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="importation-de-limage-sur-oracle-cloud"&gt;Importation de l&amp;rsquo;image sur Oracle Cloud
&lt;/h2&gt;&lt;p&gt;On a le fichier prêt à être uploadé&amp;hellip; mais on l&amp;rsquo;uploade où ??&lt;/p&gt;
&lt;p&gt;Pas de chance, cette étape se fait en 2 parties. D&amp;rsquo;abord, il faut uploader le fichier .oci sur un bucket. C&amp;rsquo;est assez simple à faire dans l&amp;rsquo;UI (on aurait aussi pu le faire en CLI) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Créez un bucket dans la section Storage pour uploader l&amp;rsquo;image compressée.&lt;/li&gt;
&lt;li&gt;Uploadez l&amp;rsquo;image (oracle-amd64-omni-zwindler-v1.9.1.oci) dans ce bucket.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/01/bucket.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Deuxième étape, on transforme le fichier en &amp;ldquo;Custom images&amp;rdquo; (dans la section &lt;strong&gt;Compute&lt;/strong&gt;) :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/01/custom-images.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Cette étape est bizarrement assez longue, l&amp;rsquo;image qui ne fait que 100 Mo a pris 10 minutes à chaque essai que j&amp;rsquo;ai fait pour l&amp;rsquo;instant.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/01/custom-images-2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="création-de-la-vm"&gt;Création de la VM
&lt;/h2&gt;&lt;p&gt;Une fois l&amp;rsquo;image importée, on peut maintenant utiliser notre image customisée par Omni pour booter nos machines free tier.&lt;/p&gt;
&lt;p&gt;Je l&amp;rsquo;ai fait là aussi via l&amp;rsquo;interface OCI, mais là encore, on pourrait le faire en CLI.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/01/vm1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/01/vm2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Quelques secondes après le boot, elle apparaît dans l&amp;rsquo;UI d&amp;rsquo;Omni et peut être ajoutée à un cluster.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/01/omni-oracle.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Have fun !!&lt;/p&gt;
&lt;h2 id="addendum--est-ce-que-cest-vraiment-gratuit-"&gt;Addendum : est-ce que c&amp;rsquo;est vraiment gratuit ?
&lt;/h2&gt;&lt;p&gt;Oui&amp;hellip;-ish.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;En théorie&lt;/strong&gt;, les machines sont gratuites (forever free comme ils disent). Mais attention, plein de petits trucs peuvent être payants.&lt;/p&gt;
&lt;p&gt;Par exemple, le bucket sur lequel on a uploadé le QCOW2/.oci est très probablement payant. Idem pour la custom image, qui est facturée comme 1 Go de stockage (selon l&amp;rsquo;UI, je n&amp;rsquo;ai pas encore la facture LOL).&lt;/p&gt;
&lt;p&gt;Si vous mettez les VMs derrière un load balancer (il n&amp;rsquo;y a pas de raison que vous le fassiez ici), attention, seul le LB &amp;ldquo;non flexible&amp;rdquo; bridé à 10 Mbps est gratuit (et un seul).&lt;/p&gt;
&lt;p&gt;Et si comme moi, vous avez déjà 4 disques de 50 Go, le stockage de l&amp;rsquo;OS est payant (1,85€ / mois).&lt;/p&gt;
&lt;p&gt;Bref, vous l&amp;rsquo;aurez compris, c&amp;rsquo;est comme souvent dans le cloud, rien n&amp;rsquo;est vraiment gratuit et il faut bien lire tous les petits caractères.&lt;/p&gt;</description></item><item><title>Déployer un hyperviseur VMware ESXi avec MAAS</title><link>https://blog.zwindler.fr/2024/01/08/maas-canonical-esxi/</link><pubDate>Mon, 08 Jan 2024 18:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2024/01/08/maas-canonical-esxi/</guid><description>&lt;img src="https://blog.zwindler.fr/2024/01/bearmetal2.webp" alt="Featured image of post Déployer un hyperviseur VMware ESXi avec MAAS" /&gt;&lt;p&gt;Cet article fait partie d&amp;rsquo;une série d&amp;rsquo;articles dédiés à la découverte de MAAS, un outil de déploiement d&amp;rsquo;OS sur un parc de serveurs (souvent baremetal mais pas que) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/12/21/premiers-pas-avec-maas-baremetal-canonical" &gt;Premiers pas avec MAAS - Metal as a Service, l’outil de déploiement de machines baremetal de Canonical&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2024/01/04/un-peu-plus-loin-avec-maas-canonical" &gt;Un peu plus loin avec MAAS - Metal as a Service, l’outil de déploiement de machines baremetal de Canonical&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2024/01/08/maas-canonical-esxi" &gt;Déployer un hyperviseur VMware ESXi avec MAAS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="résumé-des-épisodes-précédents"&gt;Résumé des épisodes précédents
&lt;/h2&gt;&lt;p&gt;Dans les deux derniers épisodes, on a vu comment déployer MAAS sur un lab perso, comment déployer ensuite nos premiers OS sur des machines baremetal de manière automatisée, comment les customiser en changeant de version d&amp;rsquo;Ubuntu ou avec cloud-init.&lt;/p&gt;
&lt;p&gt;Mais dans les promesses de MAAS, il y a plus que ça. En théorie, on doit pouvoir démarrer &amp;ldquo;out of the box&amp;rdquo; (ouais pas tout à fait, mais je ne spoil pas plus) des serveurs d&amp;rsquo;autres OS, comme Windows (beurk) ou des hyperviseurs VMware ESXi. Et même plus (mais ça n&amp;rsquo;est pas le but de cet article pour l&amp;rsquo;instant).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/deploy-any.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="esxi-"&gt;ESXi ?
&lt;/h2&gt;&lt;p&gt;Vous l&amp;rsquo;avez compris, point de Windows Server dans ce tutoriel, cependant sachez qu&amp;rsquo;avec les deux liens que j&amp;rsquo;ai déjà donnés dans l&amp;rsquo;article précédent, vous devriez pouvoir vous en sortir :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://maas.io/docs/customising-images-for-specific-needs" target="_blank" rel="noopener"
&gt;Documentation de Canonical MAAS - How to customise images&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://discourse.maas.io/t/how-to-build-maas-images/5100" target="_blank" rel="noopener"
&gt;Discourse de Canonical MAAS - How to build MAAS images&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Même si c&amp;rsquo;est un hyperviseur propriétaire, j&amp;rsquo;ai quand même passé pas mal de temps à travailler avec VMware et j&amp;rsquo;ai toujours été relativement content d&amp;rsquo;ESXi (no comment sur le reste de la &amp;ldquo;suite&amp;rdquo; par contre).&lt;/p&gt;
&lt;p&gt;Note : vous pouvez d&amp;rsquo;ailleurs retrouver tous &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=vmware" target="_blank" rel="noopener"
&gt;les articles qui parlent de VMware&lt;/a&gt; sur ce blog, ça date un peu, mais il reste peut-être des trucs utiles.&lt;/p&gt;
&lt;p&gt;On va donc voir si c&amp;rsquo;est si facile que ça&amp;hellip;&lt;/p&gt;
&lt;h2 id="ubuntu-pro-"&gt;Ubuntu Pro ?
&lt;/h2&gt;&lt;p&gt;La première chose qu&amp;rsquo;on apprend dans la doc, c&amp;rsquo;est qu&amp;rsquo;il existe 2 manières de customiser des OS non Ubuntu pour les faire marcher dans MAAS :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/canonical/packer-maas" target="_blank" rel="noopener"
&gt;Packer MAAS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;MAAS Image Builder&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MAAS Image Builder nécessitant une souscription Ubuntu Pro, je vais évidemment me rabattre uniquement sur Packer MAAS&amp;hellip;&lt;/p&gt;
&lt;p&gt;Heureusement, le projet est relativement bien fourni, avec des CentOS (8 ou 9 stream), des Debian jusqu&amp;rsquo;à la 12, et donc&amp;hellip; VMware ESXi, de la 6 à la 8.&lt;/p&gt;
&lt;p&gt;Pour cet article, je me suis d&amp;rsquo;abord basé sur le &lt;a class="link" href="https://maas.io/tutorials/maas-esxi-quickstart#1-overview" target="_blank" rel="noopener"
&gt;tutoriel officiel&lt;/a&gt;, mais il est sévèrement &amp;ldquo;pas à jour&amp;rdquo; (on a un petit doute dès la première étape qui demande d&amp;rsquo;utiliser Ubuntu 18.04) et pointe vers des versions obsolètes&amp;hellip;&lt;/p&gt;
&lt;h2 id="installer-packer"&gt;Installer Packer
&lt;/h2&gt;&lt;p&gt;Comme son nom le laisse deviner, on va avoir besoin de Packer, un tool de mes copain⋅es de chez &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=hashicorp" target="_blank" rel="noopener"
&gt;Hashicorp&lt;/a&gt;. Pour l&amp;rsquo;instant personne n&amp;rsquo;a forké Packer, donc :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O- https://apt.releases.hashicorp.com/gpg &lt;span class="p"&gt;|&lt;/span&gt; sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;lsb_release -cs&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; main&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sudo tee /etc/apt/sources.list.d/hashicorp.list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt install packer
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On vérifie que ça a bien marché&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;packer --version
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Packer v1.10.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="récupérer-un-iso-chez-vmware"&gt;Récupérer un ISO chez VMware
&lt;/h2&gt;&lt;p&gt;Alors, là, c&amp;rsquo;est la partie pénible. Si on n&amp;rsquo;est pas client VMware, il n&amp;rsquo;est pas possible de télécharger d&amp;rsquo;ISO de VMware ESXi sans :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;se créer un compte&lt;/li&gt;
&lt;li&gt;demander un trial sur une version (idéalement la dernière) d&amp;rsquo;ESXi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C&amp;rsquo;est pénible, ça demande plein d&amp;rsquo;infos personnelles et ça pourri les BAL, mais bon&amp;hellip; c&amp;rsquo;est ça aussi, d&amp;rsquo;utiliser des logiciels privateurs. Avant, l&amp;rsquo;usage de l&amp;rsquo;ESXi était gratuit, mais visiblement, c&amp;rsquo;est de l&amp;rsquo;histoire ancienne&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/download-trial.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pas de bol, j&amp;rsquo;avais fait mes premiers tests sur VMware ESXi 8.0u1, et j&amp;rsquo;ai voulu récupérer la u2, mais voici ce que me dit VMware&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Your evaluation has expired on August 29, 2023&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pour paraphraser un certain Linus T., &lt;strong&gt;F&amp;hellip; YOU VMware!&lt;/strong&gt; Tant pis, je vais donc faire avec l&amp;rsquo;ISO que j&amp;rsquo;ai&amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VMware-VMvisor-Installer-8.0U1a-21813344.x86_64.iso&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="récupérer-packer-maas"&gt;Récupérer packer-maas
&lt;/h2&gt;&lt;p&gt;Si vous suivez le tuto que je vous ai donné en début d&amp;rsquo;article, il y a un moment où on va vous demander un Nom/Prénom/Email pour avoir le droit de télécharger un script pour transformer notre ISO VMware en image MAAS.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://maas.io/vmware-images" target="_blank" rel="noopener"
&gt;maas.io/vmware-images&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sauf que :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;l&amp;rsquo;archive que vous allez télécharger est obsolète et ne fonctionnera pas&lt;/li&gt;
&lt;li&gt;les sources et les releases sont dispos et à jour sur le &lt;a class="link" href="https://github.com/canonical/packer-maas/tree/main" target="_blank" rel="noopener"
&gt;github du projet&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Rant: Je suis éventuellement OK pour donner mes informations personnelles en échange de l&amp;rsquo;outil, mais s&amp;rsquo;il vous plait, gardez vos tutos à jour !?!&lt;/p&gt;
&lt;p&gt;On va donc plutôt télécharger directement la dernière version de packer-maas qui supporte les Debian et des variantes de RHEL supplémentaires :) et est disponible ici (&lt;a class="link" href="https://github.com/canonical/packer-maas/releases/tag/v1.1.0" target="_blank" rel="noopener"
&gt;page de la release&lt;/a&gt; / &lt;a class="link" href="https://github.com/canonical/packer-maas/archive/refs/tags/v1.1.0.tar.gz" target="_blank" rel="noopener"
&gt;archive tgz&lt;/a&gt;)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://github.com/canonical/packer-maas/archive/refs/tags/v1.1.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tar xzf v1.1.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; packer-maas-1.1.0/vmware-esxi/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="construire-limage-vmware-esxi-pour-maas"&gt;Construire l&amp;rsquo;image VMware ESXi pour MAAS
&lt;/h2&gt;&lt;p&gt;On commence par charger le driver &lt;code&gt;nbd&lt;/code&gt;. Si comme moi, vous ne savez pas ce que c&amp;rsquo;est, sachez que c&amp;rsquo;est &lt;a class="link" href="https://en.wikipedia.org/wiki/Network_block_device" target="_blank" rel="noopener"
&gt;Network Block Devices&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo modprobe nbd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# si ça ne renvoie rien, c&amp;#39;est bon&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ensuite, on lance Packer avec les arguments suivants :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo packer init .
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo &lt;span class="nv"&gt;PACKER_LOG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; packer build -var &lt;span class="s1"&gt;&amp;#39;vmware_esxi_iso_path=../../VMware-VMvisor-Installer-8.0U1a-21813344.x86_64.iso&amp;#39;&lt;/span&gt; .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note: packer-maas fourni aussi un Makefile pour vous simplifier encore plus la vie&amp;hellip; Vous pouvez juste lancer &lt;code&gt;make ISO=/path/to/VMware-VMvisor-Installer.iso&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;À ce moment-là, les scripts de packer-maas vont booter une VM avec notre ISO et réaliser des actions pour &amp;ldquo;l&amp;rsquo;installer&amp;rdquo; en envoyant des caractères dans une session VNC !&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/esxi-qemu-install.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Quand on y réfléchit, c&amp;rsquo;est à la fois un peu bourrin et &lt;em&gt;awesome&lt;/em&gt; à la fois.&lt;/p&gt;
&lt;p&gt;Si tout se passe bien, vous devriez vous retrouver avec un fichier &lt;code&gt;vmware-esxi.dd.gz&lt;/code&gt; au bout de quelques minutes.&lt;/p&gt;
&lt;h2 id="esxi-dans-maas"&gt;ESXi dans MAAS
&lt;/h2&gt;&lt;p&gt;Maintenant qu&amp;rsquo;on a notre image, on va l&amp;rsquo;envoyer dans MAAS !&lt;/p&gt;
&lt;p&gt;Sur l&amp;rsquo;UI, récupérer une clé pour API (sinon on ne pourra pas pousser l&amp;rsquo;image) sur votre utilisateur (il doit être avec des privilèges &lt;strong&gt;admin&lt;/strong&gt;) :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/apikey.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Je n&amp;rsquo;ai pas trouvé de menu dans la GUI pour le faire, mais on peut loguer notre terminal avec la commande suivante (en n&amp;rsquo;oubliant pas de renseigner l&amp;rsquo;API key) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;maas login admin http://192.168.x.y:5240/MAAS/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;API key &lt;span class="o"&gt;(&lt;/span&gt;leave empty &lt;span class="k"&gt;for&lt;/span&gt; anonymous access&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis envoyer l&amp;rsquo;image en CLI&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;maas admin boot-resources create &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;esxi/8.0u1&amp;#39;&lt;/span&gt; &lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;VMware ESXi 8.0u1&amp;#39;&lt;/span&gt; &lt;span class="nv"&gt;architecture&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;amd64/generic&amp;#39;&lt;/span&gt; &lt;span class="nv"&gt;filetype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ddgz&amp;#39;&lt;/span&gt; content@&lt;span class="o"&gt;=&lt;/span&gt;vmware-esxi.dd.gz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note 1 : ne faites pas de Packer sur une partition Windows montée sous Linux (fuse + packer = KK)
Note 2 : si vous avez installé MAAS en tant que snap sur votre poste, vous ne pouvez accéder aux fichiers que dans votre /home (vous vous prendrez un &amp;ldquo;no such file or directory&amp;rdquo;)&lt;/p&gt;
&lt;p&gt;À partir de là, elle devrait apparaitre dans la liste des &amp;ldquo;Images&amp;rdquo; disponibles !&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/esxi-image.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s go la déployer sur une machine du lab&amp;hellip; Et au bout de quelques minutes&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/esxi_booted.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/esxi-connected.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Victoire !&lt;/p&gt;</description></item><item><title>Un peu plus loin avec MAAS - Metal as a Service, l’outil de déploiement de machines baremetal de Canonical</title><link>https://blog.zwindler.fr/2024/01/04/un-peu-plus-loin-avec-maas-canonical/</link><pubDate>Thu, 04 Jan 2024 06:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2024/01/04/un-peu-plus-loin-avec-maas-canonical/</guid><description>&lt;img src="https://blog.zwindler.fr/2024/01/bearmetal.webp" alt="Featured image of post Un peu plus loin avec MAAS - Metal as a Service, l’outil de déploiement de machines baremetal de Canonical" /&gt;&lt;p&gt;Cet article fait partie d&amp;rsquo;une série d&amp;rsquo;articles dédiés à la découverte de MAAS, un outil de déploiement d&amp;rsquo;OS sur un parc de serveurs (souvent baremetal mais pas que) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/12/21/premiers-pas-avec-maas-baremetal-canonical" &gt;Premiers pas avec MAAS - Metal as a Service, l’outil de déploiement de machines baremetal de Canonical&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2024/01/04/un-peu-plus-loin-avec-maas-canonical" &gt;Un peu plus loin avec MAAS - Metal as a Service, l’outil de déploiement de machines baremetal de Canonical&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2024/01/08/maas-canonical-esxi" &gt;Déployer un hyperviseur VMware ESXi avec MAAS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="introduction"&gt;Introduction
&lt;/h2&gt;&lt;p&gt;Dans la première partie, nous nous étions arrêté au moment où MAAS était installé sur un Raspberry Pi, routeur entre mon LAN et mon lab. Nous avions également déployé un OS (Ubuntu 20.04 par défaut) pour valider que l&amp;rsquo;installation fonctionnait&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/maas.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Dans cette partie, on va essayer d&amp;rsquo;aller un peu plus loin et de faire des trucs plus funs pour déployer des OS différents, et pourquoi pas des hyperviseurs !&lt;/p&gt;
&lt;h2 id="modifier-los-par-défaut"&gt;Modifier l&amp;rsquo;OS par défaut
&lt;/h2&gt;&lt;p&gt;Il est possible de modifier l&amp;rsquo;OS installé par défaut sur nos machines lors des phases &amp;ldquo;Commissioning&amp;rdquo; et &amp;ldquo;Deploying&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Comme j&amp;rsquo;avais déjà récupéré les ISO pour Ubuntu 22.04, j&amp;rsquo;ai donc essayé de modifier toutes les étapes en Ubuntu 22.04.&lt;/p&gt;
&lt;p&gt;La procédure est assez simple, on peut même changer le kernel par défaut (pratique pour profiter des dernières avancées eBPF, notamment si vous voulez faire du Kubernetes! )&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/default_commissioning_os.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/default_deploy_os.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Rappel : la phase commissioning sert à faire une première installation d&amp;rsquo;un hôte minimal pour l&amp;rsquo;enrôler dans notre pool de serveurs disponibles avec MAAS, en vue d&amp;rsquo;une future installation. Si on veut modifier l&amp;rsquo;OS installé par défaut quand on déploie une machine, c&amp;rsquo;est bien le menu de la phase &amp;ldquo;Deploying&amp;rdquo; qu&amp;rsquo;il faut modifier.&lt;/p&gt;
&lt;h2 id="déployer-un-hôte-kvm"&gt;Déployer un hôte &amp;ldquo;KVM&amp;rdquo;
&lt;/h2&gt;&lt;p&gt;Par défaut, il est également possible de déployer des hôtes qui vont gérer des machines virtuelles directement depuis MAAS.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/deploy_libvirt.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/deploy_lxd.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Même si j&amp;rsquo;avais le doute au début, les machines LXD sont bien de vraies machines virtuelles (pas de containers LXC), comme l&amp;rsquo;explique la documentation officielle &lt;a class="link" href="https://web.archive.org/web/20231204160638/https://maas.io/docs/virtual-machines#heading--lxd-vs-libvirt" target="_blank" rel="noopener"
&gt;LXD vs libvirt - maas.io/docs/virtual-machines (lien mort, j&amp;rsquo;utilise Internet Archive)&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Both libvirt KVMs and LXD VMs are based on QEMU, but LXD VMs offer more advantages such as enhanced security and a robust API. Unlike libvirt KVMs, LXD VMs can be managed remotely without requiring SSH access.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A noter, les machines &lt;em&gt;libvirt&lt;/em&gt; sont aujourd&amp;rsquo;hui considérées comme &amp;ldquo;legacy&amp;rdquo; et il n&amp;rsquo;est pas possible d&amp;rsquo;en ajouter provenant de l&amp;rsquo;extérieur dans l&amp;rsquo;UI 3.4.0 beta que j&amp;rsquo;ai installé, contrairement aux machines LXD qui peuvent être ajoutées à MAAS même si elles ne sont pas sur des serveurs gérés par MAAS.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/virsh_host.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/lxd_host.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On peut ensuite aller dans virsh/LXD (selon ce qu&amp;rsquo;on a choisi) et poper des VMs depuis l&amp;rsquo;interface de MAAS.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/compose_vm.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et ce qui est rigolo, c&amp;rsquo;est qu&amp;rsquo;on peut ensuite installer des trucs sur ces machines, qui se retrouvent dans notre liste :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/NewLXDMachine.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Machines making machines! How perverse.&lt;/p&gt;
&lt;p&gt;&amp;ndash; C3PO - Star Wars Episode 2&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Et on peut déployer des trucs dessus bien sûr ;-)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/AwesomeVM1_deploying.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/AwesomeVM1_deployed.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Bon, ce n&amp;rsquo;est par contre pas spécialement user friendly (mais ça marche). L&amp;rsquo;idée est probablement un peu plus utile avec Juju (que je ne testerai pas ici).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;VM hosts offer unique benefits when integrated with Juju, including dynamic VM allocation with custom interface constraints.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="customiser-son-os-avec-cloud-init"&gt;Customiser son OS avec cloud-init
&lt;/h2&gt;&lt;p&gt;Avouez que déployer des OS nus (juste l&amp;rsquo;OS, rien d&amp;rsquo;autre) avec MAAS, c&amp;rsquo;est cool, mais c&amp;rsquo;est quand même un poil limité en prod. Pour aller plus loin, MAAS nous donne accès à plusieurs mécanismes pour customiser notre OS.&lt;/p&gt;
&lt;p&gt;Pour faire simple et parce que c&amp;rsquo;est devenu un des standards du marché, je vais tester l&amp;rsquo;utilisation de cloud-init avec MAAS pour customiser mon OS.&lt;/p&gt;
&lt;p&gt;Et parce que j&amp;rsquo;aime Kubernetes, je vais poper un &amp;ldquo;cluster&amp;rdquo; de test avec microk8s. En l&amp;rsquo;état celà ne servira pas à grand-chose en utilisation réelle, mais ça vous donne une idée de ce qu&amp;rsquo;on peut faire avec.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/maas-cloud-init.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#cloud-config
runcmd:
- |
# install and start microk8s
snap install microk8s --classic
microk8s start
usermod -a -G microk8s ubuntu
mkdir /home/ubuntu/.kube
chown -R ubuntu ~/.kube
apt_update: true
apt_upgrade: true
package_update: true
package_upgrade: true
package_reboot_if_required: false
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Au bout de quelques minutes, la machine est déployée, et l&amp;rsquo;OS est correctement customisé :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh -J 192.168.x.y ubuntu@10.10.0.4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;microk8s kubectl get pods
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;No resources found in default namespace.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note : Ici j&amp;rsquo;utilise le RPi comme &amp;ldquo;JumpHost&amp;rdquo; car je n&amp;rsquo;ai pas d&amp;rsquo;accès direct aux machines depuis mon LAN.&lt;/p&gt;
&lt;h2 id="aller-plus-loin---déployer-ses-propres-images-sur-ses-machines"&gt;Aller plus loin - déployer ses propres images sur ses machines
&lt;/h2&gt;&lt;p&gt;Ici, je tease un peu le(s) prochain(s) article(s). Ne vous attendez pas à lire la solution ici, il faudra attendre un peu ;-).&lt;/p&gt;
&lt;p&gt;Par défaut, les OS disponibles sur MAAS proviennent d&amp;rsquo;images qui sont stockées sur maas.io. On y retrouve toutes les LTS d&amp;rsquo;Ubuntu jusqu&amp;rsquo;à la 12.04 (!?!) ainsi que les non-LTS de la 20.10 à la 23.10, et pour plusieurs architectures.&lt;/p&gt;
&lt;p&gt;Dans la section &amp;ldquo;Other Images&amp;rdquo;, il n&amp;rsquo;y a malheureusement que CentOS 7 et 8.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/01/images-sync.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour utiliser d&amp;rsquo;autres images, on va pouvoir utiliser des &lt;em&gt;registry customs&lt;/em&gt; depuis l&amp;rsquo;interface ou créer nos propres builds qu&amp;rsquo;on poussera sur l&amp;rsquo;interface.&lt;/p&gt;
&lt;p&gt;Si vous êtes trop curieux, je vous laisse quand même quelques liens qui devraient vous donner une bonne idée de ce qu&amp;rsquo;on va faire la prochaine fois.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://maas.io/docs/customising-images-for-specific-needs" target="_blank" rel="noopener"
&gt;Documentation de Canonical MAAS - How to customise images&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://discourse.maas.io/t/how-to-build-maas-images/5100" target="_blank" rel="noopener"
&gt;Discourse de Canonical MAAS - How to build MAAS images&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En attendant, have fun !&lt;/p&gt;</description></item><item><title>Premiers pas avec MAAS - Metal as a Service, l’outil de déploiement de machines baremetal de Canonical</title><link>https://blog.zwindler.fr/2023/12/21/premiers-pas-avec-maas-baremetal-canonical/</link><pubDate>Thu, 21 Dec 2023 14:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2023/12/21/premiers-pas-avec-maas-baremetal-canonical/</guid><description>&lt;img src="https://blog.zwindler.fr/2023/12/pxe_tftp2.webp" alt="Featured image of post Premiers pas avec MAAS - Metal as a Service, l’outil de déploiement de machines baremetal de Canonical" /&gt;&lt;p&gt;Cet article fait partie d&amp;rsquo;une série d&amp;rsquo;articles dédiés à la découverte de MAAS, un outil de déploiement d&amp;rsquo;OS sur un parc de serveurs (souvent baremetal mais pas que) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/12/21/premiers-pas-avec-maas-baremetal-canonical" &gt;Premiers pas avec MAAS - Metal as a Service, l’outil de déploiement de machines baremetal de Canonical&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2024/01/04/un-peu-plus-loin-avec-maas-canonical" &gt;Un peu plus loin avec MAAS - Metal as a Service, l’outil de déploiement de machines baremetal de Canonical&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2024/01/08/maas-canonical-esxi" &gt;Déployer un hyperviseur VMware ESXi avec MAAS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="introduction"&gt;Introduction
&lt;/h2&gt;&lt;p&gt;Il y a quelques mois, après plusieurs discussions avec mon collègue (et ami!) Julien, j&amp;rsquo;ai voulu tester MAAS (Metal As A Service) sur mon homelab.&lt;/p&gt;
&lt;p&gt;Pour ceux qui ne connaissent pas cet outil, c&amp;rsquo;est un logiciel qui va permettre de déployer des machines baremetal de manière automatique.&lt;/p&gt;
&lt;p&gt;En théorie, l&amp;rsquo;outil est plutôt prévu pour faciliter le déploiement de serveurs de manière flexible en datacenters, mais il existe plusieurs exemples de personnes qui ont réussi à l&amp;rsquo;utiliser sur des NUCs ou des machines desktop.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est donc un parfait premier cas d&amp;rsquo;usage pour mon homelab, composé de &lt;a class="link" href="https://blog.zwindler.fr/2023/03/16/lab-2023-dell-micro-occasion" &gt;3 dell micro et d&amp;rsquo;un raspberry pi&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/dell_lab.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;avais deux possibilités en termes d&amp;rsquo;architecture et j&amp;rsquo;ai d&amp;rsquo;ailleurs testé les deux. La première était de créer le lab dans mon LAN. Ca nécessite de bidouiller un peu le DHCP de ma box Bouygues pour que MAAS puisse gérer les IPs des machines ainsi que de configurer le DHCP pour propager le PXE.&lt;/p&gt;
&lt;p&gt;A priori c&amp;rsquo;est faisable, mais j&amp;rsquo;ai trouvé ça pénible dans l&amp;rsquo;idée et potentiellement disruptif pour mon LAN perso, alors j&amp;rsquo;ai décidé de mettre le homelab dans un LAN à part, dont le RPi serait le routeur. J&amp;rsquo;ai ajouté une interface réseau à l&amp;rsquo;aide d&amp;rsquo;un adaptateur ethernet USB et roule ma poule.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/maas.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;A l&amp;rsquo;époque (en juin), ça n&amp;rsquo;avait pas marché (peut être à cause d&amp;rsquo;un bug ?), les machines étaient bien déployables, mais je ne pouvais pas réaliser l&amp;rsquo;action &amp;ldquo;Deploy&amp;rdquo;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Node has no address family in common with the server
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Cependant, cette fois-ci, ça a marché ! Voici donc un premier article sur le sujet !&lt;/p&gt;
&lt;h2 id="préparer-le-rpi"&gt;Préparer le RPI
&lt;/h2&gt;&lt;p&gt;Avant de toucher aux Dell micro, j&amp;rsquo;ai donc commencé par configurer le Raspberry Pi, avec Rpi Imager.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://ubuntu.com/tutorials/how-to-install-ubuntu-on-your-raspberry-pi#1-overview" target="_blank" rel="noopener"
&gt;https://ubuntu.com/tutorials/how-to-install-ubuntu-on-your-raspberry-pi#1-overview&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/rpi1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/rpi2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois la carte préparée, sur la partition system-boot, éditer le fichier &lt;code&gt;config.txt&lt;/code&gt; pour configurer l&amp;rsquo;écran portable (ou &lt;code&gt;/boot/firmware/config.txt&lt;/code&gt; une fois booté). Ici, ça sert juste pour mon petit écran portable 7 pouces (peut être que ça peut aider dans d&amp;rsquo;autres cas) mais je vous le mets quand même, pour info.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[all]
max_usb_current=1
hdmi_force_hotplug=1
config_hdmi_boost=10
hdmi_group=2
hdmi_mode=87
hdmi_cvt 1024 600 60 6 0 0 0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On boot le pi, on se connecte en ssh, on update/upgrade tous les packages et on reboot, histoire de commencer sur des bases saines.&lt;/p&gt;
&lt;h2 id="installer-maas-sur-le-rpi"&gt;Installer MAAS sur le RPI
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://maas.io/docs/how-to-do-a-fresh-install-of-maas" target="_blank" rel="noopener"
&gt;maas.io/docs/how-to-do-a-fresh-install-of-maas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En prérequis MAAS demande de désactiver le client ntp existant pour éviter des conflits&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl disable --now systemd-timesyncd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et comme j&amp;rsquo;ai décidé que mes machines seraient dans un LAN à part (cf schéma ci-dessus) et que le RPi serait le &amp;ldquo;routeur&amp;rdquo; entre les deux, il faut bien sûr autoriser le routage :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo vi /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; net.ipv4.ip_forward &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; net.ipv6.conf.all.forwarding&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo sysctl -p /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et pour finir, je vais configurer mon resolver DNS dans &lt;code&gt;/etc/resolv.conf&lt;/code&gt; sur ma Box internet&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo vi /etc/resolv.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; nameserver @IP
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Addendum : histoire d&amp;rsquo;éviter des soucis de changement d&amp;rsquo;adresse IP à cause de mon DHCP pourri, on fixe les IPs via une configuration netplan. Ici, mon interface ethernet du RPi est eth0 (celle reliée à mon LAN) et celle (USB) reliée à mon lab et aux 3 dell micros est enxa0cec80428b7.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;vi /etc/netplan/50-cloud-init.yaml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;network&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ethernets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;eth0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dhcp4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;addresses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;192.168&lt;/span&gt;&lt;span class="l"&gt;.x.y/24]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gateway4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192.168&lt;/span&gt;&lt;span class="l"&gt;.x.z&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nameservers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;addresses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;9.9.9.9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;192.168&lt;/span&gt;&lt;span class="l"&gt;.x.z]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enxa0cec80428b7&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dhcp4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;addresses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;10.10.0.1&lt;/span&gt;&lt;span class="l"&gt;/16]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et on valide avec&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;netplan apply
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si vous suivez la doc bêtement comme je le fais moi, MAAS propose de s&amp;rsquo;installer en tant que snap. Si c&amp;rsquo;est le cas, il ne pourra accéder qu&amp;rsquo;à /home et /media (cf &lt;a class="link" href="https://discourse.maas.io/t/maas-boot-resources-create-fails-with-no-such-file-or-directory/3627" target="_blank" rel="noopener"
&gt;ce post sur le discourse de maas.io&lt;/a&gt;). Il existe aussi une version .deb de MAAS mais pour le test je me suis contenté de ça.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;zwindler@maas:~$ sudo snap install --channel&lt;span class="o"&gt;=&lt;/span&gt;3.4/beta maas
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;maas &lt;span class="o"&gt;(&lt;/span&gt;3.4/beta&lt;span class="o"&gt;)&lt;/span&gt; 3.4.0-14319-g.3ab76533f from Canonical✓ installed
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note : point important, l&amp;rsquo;expérience utilisateur entre la version 3.3 et la version 3.4 est significativement différente. Au delà de l&amp;rsquo;UI qui change d&amp;rsquo;un menu horizontal à un menu vertical, certaines opérations semblent ne pas être totalement identiques. Il est possible que ce tuto ne marche pas en 3.3.&lt;/p&gt;
&lt;p&gt;Plutôt qu&amp;rsquo;installer une base PostgreSQL pour stocker les données de MAAS, je vais également simplement utiliser le snap &lt;code&gt;maas-test-db&lt;/code&gt;, qui comme son nom l&amp;rsquo;indique, est une base de données postgres préconfigurée pour faire des tests avec MAAS (donc pas production ready !).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;zwindler@maas:~$ sudo snap install maas-test-db
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;maas-test-db &lt;span class="o"&gt;(&lt;/span&gt;3.3/stable&lt;span class="o"&gt;)&lt;/span&gt; 14.2-29-g.ed8d7f2 from Canonical✓ installed
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A partir de là, mon Raspberry Pi 4 modèle 2 Go (oui j&amp;rsquo;ai été radin) est à l&amp;rsquo;agonie. Heureusement, un petit reboot suffit à lui donner un second souffle.&lt;/p&gt;
&lt;h2 id="configurer-maas"&gt;Configurer MAAS
&lt;/h2&gt;&lt;p&gt;Une fois que c&amp;rsquo;est fait, on peut initialiser notre MAAS en mode &amp;ldquo;region+rack&amp;rdquo;. Ca va nous permettre d&amp;rsquo;avoir la totalité des fonctionnalités sur le serveur MAAS du RPi.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;zwindler@maas:~$ sudo maas init region+rack --database-uri maas-test-db:///
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;MAAS URL &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;default&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://@IP:5240/MAAS&lt;span class="o"&gt;]&lt;/span&gt;: &lt;span class="o"&gt;(&lt;/span&gt;valider avec entrée&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;/&lt;span class="o"&gt;]&lt;/span&gt; Performing database migrations
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;MAAS has been &lt;span class="nb"&gt;set&lt;/span&gt; up.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;If you want to configure external authentication or use
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;MAAS with Canonical RBAC, please run
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sudo maas configauth
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;To create admins when not using external authentication, run
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sudo maas createadmin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;To &lt;span class="nb"&gt;enable&lt;/span&gt; TLS &lt;span class="k"&gt;for&lt;/span&gt; secured communication, please run
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sudo maas config-tls &lt;span class="nb"&gt;enable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour faire simple, je ne vais pas configurer une authentification externe et me contenter (là encore) de simplement créer un utilisateur local d&amp;rsquo;administration :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;zwindler@maas:~$ sudo maas createadmin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Username: zwindler
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Password:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Again:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Email: blog@zwindler.fr
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Import SSH keys &lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;lp:user-id or gh:user-id&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut donc ouvrir la page d&amp;rsquo;admin (http://@IP:5240/MAAS/r/) et rentrer le login/mdp qu&amp;rsquo;on vient de créer.&lt;/p&gt;
&lt;p&gt;La première chose qu&amp;rsquo;on va nous demander c&amp;rsquo;est de finir le setup via un wizard. On va créer notre première région, ajouter nos premières images, ajouter une clé SSH&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/wizard1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/wizard2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/wizard3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/wizard4.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="configurer-un-subnet"&gt;Configurer un subnet
&lt;/h2&gt;&lt;p&gt;Une fois le wizard terminé, on va avoir l&amp;rsquo;auto-découverte de ce qui se passe sur notre LAN. Le truc, c&amp;rsquo;est que dans mon cas précis, ce n&amp;rsquo;est pas ce qui est sur mon LAN (de ma box) qui m&amp;rsquo;intéresse, mais ce qui va être sur le LAN de MAAS, via mon autre interface Ethernet (USB).&lt;/p&gt;
&lt;p&gt;Je vais donc créer un réseau interne 10.10.0.0/16 (cf la doc &lt;a class="link" href="https://maas.io/docs/about-networking" target="_blank" rel="noopener"
&gt;maas.io/docs/about-networking&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/network1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois créé, je l&amp;rsquo;édite pour ajouter des infos&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/network2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/network3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;De retour sur la fabric, on va sur le VLAN par défaut et on configure le DHCP&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/vlan1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/vlan2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois que c&amp;rsquo;est fait, on va pouvoir commencer à booter des machines en PXE pour les enroller dans MAAS !!&lt;/p&gt;
&lt;h2 id="enroller-des-machines"&gt;Enroller des machines
&lt;/h2&gt;&lt;p&gt;A partir de là en vrai, il n&amp;rsquo;y a plus grand-chose à faire. J&amp;rsquo;ai configuré le BIOS de mes dell micro pour qu&amp;rsquo;il boot d&amp;rsquo;abord sur le PXE. Le serveur DHCP / PXE de MAAS sur le RPi a pris le relai, et a fait booter la machine sur une image d&amp;rsquo;enrôlement.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/pxe_tftp1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/pxe_tftp2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/pxe_tftp3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Au bout de plusieurs minutes, dans l&amp;rsquo;onglet Machines, on voit mon Dell micro arriver. On peut la tester :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/test.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et là, patatra, &lt;strong&gt;error&lt;/strong&gt; !&lt;/p&gt;
&lt;p&gt;En vrai, c&amp;rsquo;est parce qu&amp;rsquo;il me manque une étape. J&amp;rsquo;ai oublié d&amp;rsquo;indiquer à MAAS comment démarrer la machine.&lt;/p&gt;
&lt;p&gt;Dans mon cas, il ne s&amp;rsquo;agit pas de matériel de type &amp;ldquo;serveur&amp;rdquo;. Je ne peux donc pas piloter l&amp;rsquo;allumage de la machine à distance avec un ILO / iDRAC. De même, je n&amp;rsquo;ai pas pris de multiprise manageable (je vais y réfléchir cela dit). Je dois donc configurer la &amp;ldquo;power source&amp;rdquo; de la machine et indiquer comme &amp;ldquo;Power type&amp;rdquo; la valeur &amp;ldquo;Manual&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/power1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois que c&amp;rsquo;est fait, je fais un &amp;ldquo;Commission&amp;rdquo; (et j&amp;rsquo;appuie moi même si le bouton &amp;ldquo;On&amp;rdquo;).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/commission1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/commission2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et si tous les tests sont bien passés, on doit se retrouver avec une machine à l&amp;rsquo;état &amp;ldquo;Ready&amp;rdquo;. A partir de là, je peux la &amp;ldquo;Deploy&amp;rdquo; (et il faut encore que j&amp;rsquo;appuie sur le bouton &amp;ldquo;On&amp;rdquo;).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/deploy.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et cette fois-ci, c&amp;rsquo;est une victoire ;-)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/enrolled.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/12/deployed.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;➜ ~ ssh -J zwindler@@IP ubuntu@10.10.0.2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Welcome to Ubuntu 20.04.6 LTS &lt;span class="o"&gt;(&lt;/span&gt;GNU/Linux 5.4.0-169-generic x86_64&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ubuntu@daring-tomcat:~$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="liens-en-vrac"&gt;Liens en vrac
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://insights.ubuntu.com/2016/01/21/introduction-deploying-openstack-on-maas-1-9-with-juju/" target="_blank" rel="noopener"
&gt;Tutoriels MAAS+JUJU éparpillés un peu partout sur le net (insights.ubuntu.com) - part 1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://ubuntu.com/blog/hardware-setup-deploying-openstack-on-maas-1-9-with-juju" target="_blank" rel="noopener"
&gt;Tutoriels MAAS+JUJU éparpillés un peu partout sur le net (ubuntu.com/blog) - part 2&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://blog.naydenov.net/2016/01/maas-setup-deploying-openstack-on-maas-1-9-with-juju/" target="_blank" rel="noopener"
&gt;Tutoriels MAAS+JUJU éparpillés un peu partout sur le net (blog.naydenov.net) - part 3&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://maas.io/blog/nodes-networking-deploying-openstack-on-maas-1-9-with-juju" target="_blank" rel="noopener"
&gt;Tutoriels MAAS+JUJU éparpillés un peu partout sur le net (maas.io) - part 4&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://maas.io/tutorials/build-your-own-bare-metal-cloud-using-a-raspberry-pi-cluster-with-maas#1-overview" target="_blank" rel="noopener"
&gt;Cluster de RPi&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://maas.io/tutorials/build-a-maas-and-lxd-environment-in-30-minutes-with-multipass-on-ubuntu#7-verify-and-explore-your-maas-and-lxd-installation" target="_blank" rel="noopener"
&gt;Sur une machine (laptop)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://www.reddit.com/r/homelab/comments/12qd446/got_6_mini_pcs_working_with_maas/" target="_blank" rel="noopener"
&gt;Avec des minis Pc comme les miens&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>