Bonjour,
Cette news linuxfr présente le chargeur d’amorçage ipxe et sa documentation est présente via ce lien.
D’après ce que je lis, il est possible d’exécuter un script mais l’interpréteur est très sommaire et ne possède pas de condition if. Dommage j’en avais justement besoin !
J’utilise le serveur DHCP de OPNsense. Dans les paramètres de l’insterface où l’on veut acterver le serveur DHCP, il est possible de renseigner l’adresse d’un serveur web où récupérer un fichier ipxe :
Network booting: Set iPXE boot filename : http:///srv_conf.ipxe
Le problème est que avec cette solution on ne peux envoyer qu’un seul fichier et l’interpréteur ipxe ne gérant pas les conditions ca va être compliqué !
Quelqu’un a t il une solution pour en fonction de la machine qui « arrive » (donc de son adresse MAC) envoyer tel ou tel fichier ipxe ?
Merci.
# Pourquoi compliqué ?
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 5.
Tu n'explique pas exactement en quoi ça te pose problème. Tu as besoin de quoi comme conditions ? (en langage de description algorithmique)
Tu peux appeler une URL dynamique qui se charge de faire le boulot. Le wiki donne un exemple :
qui va se traduire par exemple par
et s'attend que le le site lui renvoie le script adapté avec ces paramètres
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Pourquoi compliqué ?
Posté par Skilgannon . Évalué à 1. Dernière modification le 05 février 2023 à 00:39.
Merci pour la réponse.
Effectivement, je n'ai peut être pas donné assez de contexte.
J’essaie d'installer OpenShift/OKD sur mon serveur Proxmox.
OpenShift se sert de RHEL CoreOS (Fedora CoreOS pour OKD) comme SE de base (il y a une nuance pour les worker mais bref).
Il y a plusieurs manières d'installer ce SE mais j'ai choisie via pxe.
Or en fonction du rôle de la machine virtuelle (master ou worler), les paramètres Kernel ( les fichiers "ignition" ne sont pas les mêmes.
Grosso modo,on va avoir ça:
L'idée était donc de mettre ces commandes dans un fichier, master.ipxe, worker.pxe, …kernel http://<HTTP_server>/rhcos-<version>-live-kernel-<architecture> initrd=main coreos.live.rootfs_url=http://<HTTP_server>/rhcos-<version>-live-rootfs.<architecture>.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://<HTTP_server>/<ROLE_SERVER>.ign
initrd --name main http://<HTTP_server>/rhcos-<version>-live-initramfs.<architecture>.img
boot
Et en fonction de l 'adresse MAC qui fait la demande DHCP servir le fichier
master.ipxe ou worker.ipxe
Mon problème est que je n'ai pas compris comment faire cela avec un serveur DHCP.
Et le mécanisme de "Dynamic scripts", notaement la notion de "asset" reste pour moi assez obscure.
Liens:
- https://docs.okd.io/latest/installing/installing_bare_metal/installing-bare-metal.html#installation-user-infra-machines-pxe_installing-bare-metal
[^] # Re: Pourquoi compliqué ?
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3.
Ça s'appelle « dynamic script » parce-que ça renvoie un contenu généré dynamiquement. Le principe est juste un que tu as un serveur web (en fait je dis ça parce-que c'est du HTTP et que l'on fait une requête GET mais il n'y a pas de page web servie, juste un fichier texte qui se trouve être un script pour IPXE) ; dans l'exemple c'est du PHP qui est supposé, mais tu peux utilisé ce que tu veux et qui est supporté par le serveur web.
C'est toi qui choisi les paramètres que tu veux utiliser : dans l'exemple, ce sont l'identifiant de la carte réseau (la première carte) et le numéro d'identifiant constructeur du chassie (par exemple HP et Dell te le demande quand tu contactes leur support) ; mais il y a pléthore de paramètres exploitables.
Il me semble (mais je peux me tromper et je ne fait plus d'opérationnel) qu'il y a une confusion. Ce n'est pas le service d'adressage qui fournit l'image (ce peut être sur le même serveur ce n'est pas un souci.) Mais en supposant que ce soit le cas, le fonctionnement serait le même qu'avec un script dynamique : le serveur a une base de donnée qui associe les MAC et les types d'image et tu ne gères pas ça avec des IF dans le sscript côté iPXE…
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Pourquoi compliqué ?
Posté par Skilgannon . Évalué à 1. Dernière modification le 06 février 2023 à 19:44.
Que cela soit le serveur web distant qui exécute un script dans un langage interprété et qui renvoi une chaîne de caractère qui correspond à l'équivalent d'un script iPXE: je l'ai compris.
C'est en très gros le même principe que les pages web dynamique (au contraire des statiques).
Par contre, ce que je ne comprends pas c'est comment est générée la requête Get ?
Dans l'exemple de la documentation mentionne
Quel mécanisme permet de passer du
mac=${net0/mac}
àmac=52:54:00:12:34:56
?Dans le cas des pages web dynamique, il me semble que c'est le rôle du javascript (ou autre « technologie front-end » pressente dans le navigateur) qui s'occupe de cela. Mais dans le cas d'un simple script … je bloque!
A la limite je comprendrais que la requête soit simplement
GET http://192.168.0.1/boot.php
et que cela soit le script côté serveur qui avec les librairies qui vont bien1) récupère l'adresse MAC de la machine qui à fait la demande
2) Avec un select dans une base de données ou simplement avec if:
[^] # Re: Pourquoi compliqué ?
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Arf, j'avais mal compris ton message d'avant.
Le truc ici, c'est qu'on est dans un script iPXE et les variables
${truc}
sont bien traités par lui, comme dansMais en plus il sait lancer des requêtes et donc tu peux forger une adresse avec les paramètres qu'il sait gérer.
Javascript est du script aussi… exécuté côté client. Ici c'est le script iPXE qui est exécuté pour appeler le back-end pour récupérer son include
Tu peux faire un appel similaire depuis ton shell, par exemple (pas besoin de navigateur ni de JS donc)
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Pourquoi compliqué ?
Posté par Skilgannon . Évalué à 1.
ok, donc après avoir passé un temps fou à essayer de comprendre comment configurer nginx pour qu'il puisse gérer python, je me suis rabattu sur le php.
Je ne connais pas ce langage mais ça m’a l’aire plus simple à comprendre que rechercher comment gérer un boot.py (non je ne veux pas créer une application en python, j’en ai rien à faire de Django, webpy et autre, non je ne veux pas me servir de la librairie ‘http serveur’ de python, j’en ai déjà un…)
bref, je me suis rendu compte que je ne savais absolument pas comment les hyperviseurs font pour générer les MAC des VM et que avec ma méthode, j’allais devoirs renseigner l’adresse MAC, 1) lors de la réservation d’ip et 2) dans le script php… Ce qui fait une fois de trop !
Je me base donc maintenant sur le hostname.
j’ai bricolé le boot.php suivant en me basant sur le hostname pour déterminer le rôle d’une machine, ça fonctionne… du moins avec curl !
Merci pour l’aide apportée !
Pour le reste : la suite au prochain numéro.
[^] # Re: Pourquoi compliqué ?
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3.
Vu que tu n'as que deux ou trois options, tu peux passer par le menu comme proposé dans la dépêche.
Ce qui te permet de ensuite d'avoir plus loin
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Pourquoi compliqué ?
Posté par Skilgannon . Évalué à 1. Dernière modification le 06 février 2023 à 19:48.
Je préférerais que cela soit sans intervention manuelle.
:)
[^] # Re: Pourquoi compliqué ?
Posté par cg . Évalué à 2.
La majorité des clients PXE demandent au serveur une suite de fichiers, correspondant à l'adresse MAC entière, puis l'adresse IP, puis un bout de l'adresse IP, etc… jusqu'à demander un fichier par défaut. La partie D1 de cette page l'explique bien.
Donc sur ton serveur BOOTP/PXE tu pourrais avoir des fichiers comme :
et faire des liens symboliques/des redirections à partir des MACs:
Peut-être que ça suffit ?
Regarde avec
ngrep
le genre de requête que font les clients au moment du bootstrap.[^] # Re: Pourquoi compliqué ?
Posté par Skilgannon . Évalué à 1.
Je ne sais absolument pas comment fonctionne le serveur PXE de OPNsense.
Dans un premier temps, je préfère me concentré sur l'option "Set iPXE boot filename:" du serveur DHCP d'OPNsense
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.