Support pour installation à distance

Tags: #<Tag:0x00007f4e6369f808>

Hello bonjour,

Je ne dois pas être doué pour formuler des questions dans les moteurs de recherche et espérer avoir des réponses «à peu près» pertinentes …
Donc je ne trouve rien qui corresponde à mon souhait :frowning:

Souhait qui serait le suivant :
Je souhaiterais me fabriquer un support usb d’installation de debian.
Ce support est destiné à être utilisé pour des machines «sans tête»: machine sans raccordement possible d’un écran, portable écran HS mais qui pourrait servir encore (RPi de luxe), serveur planqué au grenier, pas très accessible (pas de place écran/clavier, et on plus on se les gèle), etc…

Et donc, il faudrait personnaliser le support afin de pouvoir y accéder à distance (car les ISOs debian actuelles à ma connaissance ne font pas celà).
Donc j’imagine un accès SSH par exemple.
Mais il faudrait modifier le support de telle sorte qu’au boot, Openssh-server (par exemple) ait été configuré et lancé
Une autre option pourrait être http, serveur web lancé, site construit et dispo sur la clé…

Je pense comme ça qu’il faudrait partir d’une version live: elle sait lancer des choses puisqu’on peut jouer avec en RAM. A priori, une image netinst ne lance rien de tel, à part l’installer.
Il faudrait s’outiller bine sûr: live-build, simple-cdd, …
Mais je ne suis sûr de rien…

Initialement, je pensais aller voir des sources pour TrueNAS ou Proxmox par exemple: leurs installeurs sont en web, j’imagine donc qu’ils savent lancer un serveur http, qu’ils ont construit un site qui fait office d’installeur, ou bien juste des formulaires qui permettent «juste» de construire un preseed adapté et laisse travailler le reste… Je ne sais pas, je ne trouve rien ou je ne comprends pas ce que je lis :(.

Donc,

  • Pensez-vous que ce soit possible ?
  • Comment faudrait-il s’y prendre ? A partir de quoi ?
  • Auriez-vous des pistes, procédures si vous avez déjà fait, ou des «liens vers…» ?

Merci pour votre lecture et vos aides.

@+

J’ai p’tête trouvé un truc: Preparing Debian ISO image with remote installation over SSH · GitHub

Faut que j’essaie ça déjà…

@suivre

Bonjour,

Je ne sais pas pour Debian Trixie mais c’était possible avec Debian Bookworm .

J’utilise ipxe pour démarrer debian-netinst en lui filant un fichier preseed pour préconfigurer l’installateur de telle manière qu’il configure le réseau et lance l’extension de l’installateur appelée network-console .

Voici, en gros, ce que j’utilise.

dnsmasq tel que dans ce sujet.

install.ipxe

#!ipxe

echo
set mirror http://ftp.fr.debian.org
set base_path ${mirror}/debian/dists/bookworm/main/installer-amd64/current/images/netboot/debian-installer/amd64
kernel ${base_path}/linux
initrd ${base_path}/initrd.gz
initrd http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/bookworm/current/firmware.cpio.gz
initrd http://192.168.1.2/bookworm_install/ssh-console_preseed.cfg preseed.cfg
initrd http://192.168.1.2/bookworm_install/late.sh
sleep 2
imgargs linux initrd=initrd.magic DEBIAN_FRONTEND=newt net.ifnames=0
boot

ssh-console_preseed.cfg

#### Contents of the preconfiguration file (for bookworm)
### Localization
# Preseeding only locale sets language, country and locale.
d-i debian-installer/locale string en_US.UTF-8

# The values can also be preseeded individually for greater flexibility.
d-i debian-installer/language string en
d-i debian-installer/country string FR

# Keyboard selection.
d-i keyboard-configuration/xkb-keymap select fr(latin9)
d-i keyboard-configuration/toggle select No toggling

### Network configuration
# netcfg will choose an interface that has link if possible. This makes it
# skip displaying a list if there is more than one interface.
#d-i netcfg/choose_interface select auto

# To pick a particular interface instead:
d-i netcfg/choose_interface select eth0

# To set a different link detection timeout (default is 3 seconds).
# Values are interpreted as seconds.
#d-i netcfg/link_wait_timeout string 10

# If you have a slow dhcp server and the installer times out waiting for
# it, this might be useful.
#d-i netcfg/dhcp_timeout string 60
#d-i netcfg/dhcpv6_timeout string 60

# If you prefer to configure the network manually, uncomment this line and
# the static network configuration below.
#d-i netcfg/disable_autoconfig boolean true

# If you want the preconfiguration file to work on systems both with and
# without a dhcp server, uncomment these lines and the static network
# configuration below.
#d-i netcfg/dhcp_failed note
#d-i netcfg/dhcp_options select Configure network manually

# Static network configuration.
#
# IPv4 example
#d-i netcfg/get_ipaddress string 192.168.1.42
#d-i netcfg/get_netmask string 255.255.255.0
#d-i netcfg/get_gateway string 192.168.1.1
#d-i netcfg/get_nameservers string 192.168.1.1
#d-i netcfg/confirm_static boolean true
#
# IPv6 example
#d-i netcfg/get_ipaddress string fc00::2
#d-i netcfg/get_netmask string ffff:ffff:ffff:ffff::
#d-i netcfg/get_gateway string fc00::1
#d-i netcfg/get_nameservers string fc00::1
#d-i netcfg/confirm_static boolean true

# Any hostname and domain names assigned from dhcp take precedence over
# values set here. However, setting the values still prevents the questions
# from being shown, even if values come from dhcp.
d-i netcfg/get_hostname string debian
d-i netcfg/get_domain string ''

# If you want to force a hostname, regardless of what either the DHCP
# server returns or what the reverse DNS entry for the IP is, uncomment
# and adjust the following line.
d-i netcfg/hostname string debian
#
d-i netcfg/domain string ''

# Disable that annoying WEP key dialog.
d-i netcfg/wireless_wep string
# The wacky dhcp hostname that some ISPs use as a password of sorts.
#d-i netcfg/dhcp_hostname string radish

# If non-free firmware is needed for the network or other hardware, you can
# configure the installer to always try to load it, without prompting. Or
# change to false to disable asking.
#d-i hw-detect/load_firmware boolean true

### Network console
# Use the following settings if you wish to make use of the network-console
# component for remote installation over SSH. This only makes sense if you
# intend to perform the remainder of the installation manually.
d-i anna/choose_modules string network-console
#d-i network-console/authorized_keys_url string http://10.0.0.1/openssh-key
d-i network-console/password password unsupermotdepasse
d-i network-console/password-again password unsupermotdepasse

### Mirror settings
# If you select ftp, the mirror/country string does not need to be set.
#d-i mirror/protocol string ftp
d-i mirror/country string manual
d-i mirror/http/hostname string ftp.fr.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string

# Do not report to popcon
popularity-contest popularity-contest/participate boolean false

d-i preseed/late_command string /bin/sh late.sh

# Avoid that last message about the install being complete.
d-i finish-install/reboot_in_progress note
# To shutdown instead of reboot
d-i debian-installer/exit/poweroff boolean true

late.sh

#!/bin/sh

in-target ln -s /dev/null /etc/systemd/network/99-default.link
in-target update-initramfs -u

Dans le fichier .ipxe , les directives initrd téléchargent plusieurs fichiers qui sont mis bout à bout pour former le initrd de l’installateur lorsque j’indique initrd.magic .
Ce qui fait que les fichiers firmware.cpio.gz , preseed.cfg et late.sh se retrouvent à la racine de l’installateur et que celui-ci peut les utiliser.

Dans ton cas, tu peux te servir du fichier ipxe.efi du paquet ipxe et le coller dans une clé USB formatée pour démarrer dessus. Exemple ici .
Bien évidemment, ipxe.efi , sans modification, n’est pas signé et ne fonctionnera pas avec secureboot .
Il est peut-être possible d’embarquer les fichiers tel que le script .ipxe sur la clé USB. Je n’ai pas essayé.

Une fois que l’installateur a ouvert l’accès SSH, tu peux faire quelque-chose du genre :

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no installer@192.168.1.105

pour te connecter à l’installateur.
Après avoir été déconnecté de la machine installée, je suggère de taper la commande reset dans ton terminal pour qu’il soit de nouveau utilisable.

Un jour, il faudrait que je prenne le temps d’en faire un gist GitHub.


AnonymousCoward

Si c’est prévu dans le cadre d’une installation en mode expert, et il est possible en preseed de créer une iso qui permet un installation via SSH.

L’intérêt du preseed, c’est qu’une fois le profile lancé il n’y a plus rien à faire, l’installation se fait entièrement toute seule.

Hello bonsoir,

Merci à vous deux pour vos retours et vos pistes:

@AnonymousCoward :
Si je comprends, tu proposes de faire du PXE, donc avec un serveur qui «distribue» des bootloaders récupérables par les machines cibles via le réseau.

Celui que tu indiques «ajoute» à l’installateur debian bookworm des éléments à initrd, et notamment active le mode network-console via le fichier ssh-console_preseed.cfg intégré à l’initrd.
Par contre je n’ai pas bien compris à quoi sert late.sh ?

C’est intéressant, je me garde ça sous le coude !
Et je serais un lecteur attentif - voire un expérimentateur pour monter une infra de ce genre - d’un gist GitHub: prend-le, le temps ! :wink:
Ca pourrait s’appliquer pour des cibles physiques; mais aussi pour des VM ? Pour des conteneurs aussi (LXC / Incus / podman) ?

Mais bon, dans l’immédiat, une clé usb dans la poche et sans accès à l’infra PXE reste l’objectif…

@Zargos :
Il ne s’agit pas pour moi - pour l’instant - d’automatiser l’installation, mais de la faire à distance, soit en utilisant l’installateur de la distribution disponible sur un support bootable (USB typiquement) insérer sur la machine cible.

Du coup :

C’est bien celà qui m’interesse et j’aimerais bien connaitre la procédure de préparation du support qui me permettrait de le faire.

Le lien que j’ai trouvé plus haut semble avoir ça aussi pour objetcif…
Et pour l’instant, pas concluant de mon côté :frowning: (je persévère et je poursuis mes essais ! )

Merci pour vos propositions.
Je continue de creuser aussi l’option http: proposer une interface web d’installation…

@ suivre, @ +

En fait, iPXE est un bootloader, au même titre que GRUB , LILO ou SYSLINUX ( PXELINUX / ISOLINUX … ).
On peut distribuer iPXE via PXE mais aussi le mettre sur une simple clé USB prévue pour démarrer en EFI ou le copier sur une clé USB comme on copierait une ISO de Debian avec l’utilitaire dd .

Le gros intérêt de iPXE par rapport au GRUB, par exemple, est que iPXE est spécialisé dans le démarrage en réseau et intègre une tonne de pilotes de cartes réseau. Ceci le rend capable de télécharger très facilement des fichiers depuis un serveur HTTP, FTP, TFTP, ISCSI, NFS et j’en passe.

Après, si tu vises à mettre les fichiers de démarrage sur une clé USB, il est relativement facile de faire ça :

  • formater une clé USB en GPT avec une partition ESP . Cela marche aussi avec une partition en FAT32. La plupart du temps, cela marche également en formatant en « MBR » / à l’ancienne
  • récupérer l’image ISO de Debian (pas forcément netinst) et la monter
  • recopier les fichiers de l’image ISO vers l’ESP
  • installer le GRUB dans le dossier /EFI de l’ESP

Ensuite, pour intégrer un fichier de preseed tu n’as plus qu’à le coller à la racine de l’ESP / partition FAT32 sous le nom preseed.cfg et l’installateur devrait le trouver automatiquement.
Pour modifier la ligne de commande du kernel dans le GRUB, tu modifies le fichier grub.cfg .

Devoir (re)générer un fichier ISO à chaque fois que l’on doit apporter le moindre changement au fichier preseed, ce n’est pas que cela ne marche pas. C’est juste que ce n’est pas très efficace, AMHA.


AnonymousCoward

En fait, il est possible de faire un preseed partiel (i.e.: la partie qui te permet de te connecter à distance), et de laisser le reste en manuel.
Le principe du preseed c’est de réponse aux questions d’installation, soit entièrement, soit partiellement (c’est d’ailleurs ce que je fais, car j’ai laissé en manuel la sélection des locales et celle du profil à installer).

C’est le principe effectivement, mais attention, un fichier sur une clef d’installation devra faire partie des checksum pour être utilisable sur toute machine où le secure boot est activé.
Et faire de la machine chiffrée sans secure boot diminue drastiquement l’effet utile de la sécurisation par chiffrement.

C’est malheureusement le cas.
Il y a cependant une option qui permet de s’affranchir de cela.

Dans les définition preseed, il est possible de déclarer la source du fichier sur un serveur distant. De fait, ton iso reste la même, mais le fichier distant peut voir son contenu changer.
Par exemple, ton serveur PXE fournit l’iso d’installation, qui vient elle-même chercher le fichier preseed sur le serveur PXE via web par exemple.

Tant qu’à s’ennuyer à refaire une image ISO de l’installateur, autant intégrer directement les « questions » directement dans la ligne de commande du kernel.

La documentation de Debian décrit cela dans la section B.2.2. :
https://www.debian.org/releases/trixie/amd64/apbs02.en.html

Mon exemple avec iPXE pourrait s’écrire (avec les alias décrits en B.2.4.)

kernel ${base_path}/linux
initrd ${base_path}/initrd.gz
initrd http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/trixie/current/firmware.cpio.gz
imgargs linux initrd=initrd.magic DEBIAN_FRONTEND=newt locale=en_US.UTF-8 language=en country=FR keymap="fr(latin9)" keyboard-configuration/toggle="No toggling" interface=auto hostname=debian domain= netcfg/hostname=debian netcfg/domain= netcfg/wireless_wep= hw-detect/load_firmware=true mirror/country=manual mirror/http/hostname=mirror.gitoyen.net mirror/http/directory=/debian mirror/http/proxy= modules=network-console network-console/password="unsupermotdepasse" network-console/password-again="unsupermotdepasse"
boot

Ou en utilisant les noms complets

kernel ${base_path}/linux
initrd ${base_path}/initrd.gz
initrd http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/trixie/current/firmware.cpio.gz
imgargs linux initrd=initrd.magic DEBIAN_FRONTEND=newt debian-installer/locale=en_US.UTF-8 debian-installer/language=en debian-installer/country=FR keyboard-configuration/xkb-keymap="fr(latin9)" keyboard-configuration/toggle="No toggling" netcfg/choose_interface=auto netcfg/get_hostname=debian netcfg/get_domain= netcfg/hostname=debian netcfg/domain= netcfg/wireless_wep= hw-detect/load_firmware=true mirror/country=manual mirror/http/hostname=mirror.gitoyen.net mirror/http/directory=/debian mirror/http/proxy= anna/choose_modules=network-console network-console/password="unsupermotdepasse" network-console/password-again="unsupermotdepasse"
boot

En utilisant ces arguments pour la ligne de commande du noyau, j’arrive à faire l’installation d’une Debian Trixie via ssh. Sans fichier preseed.cfg , donc.


AnonymousCoward

pas facile à mettre car pas de copier/coller, et surtout, faire attention au clavier, qu’il ne soit pas en qwerty.