Forum Linux.debian/ubuntu [RÉSOLU - mais sûrement perfectible] MINT (dérivée) et installation par preseed

Posté par  . Licence CC By‑SA.
Étiquettes :
2
28
mai
2026

Bonsoir,

sur la base d'une MINT (légèrement) modifiée pour le projet NIRD j'essaye de bricoler un mécanisme d'installation le plus automatique possible. Testé sur machines réelles et en machine virtuelle, ça semble commencer à tomber en marche.

principe : un script bash permet, après un minimum d'interactivité, le lancement de l'insatll par ubiquity

Reste un point sur lequel je bloque : la fenêtre de sélection du disque d'installation apparait quoi que je fasse.

Est-ce que quelqu'un sait comment la contourner ?

Le script :

    #/bin/bash

    # Fichier et répertoire
    SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
    SEED_FILE="$SCRIPT_DIR/test2.seed"

    if [ ! -f "$SEED_FILE" ]; then
        echo "ERREUR : fichier $SEED_FILE introuvable (doit être dans le même répertoire)."
        exit 1
    fi

    # détection du disque interne en exluant les clés USB etc.
    DISK=$(lsblk -d -o NAME,TYPE,RM | grep "disk" | grep " 0$" | head -1 | awk '{print "/dev/"$1}')

    if [ -z "$DISK" ]; then
        echo "ERREUR : aucun disque interne détecté. Abandon."
        exit 1
    fi

    DISK_INFO=$(lsblk -d -o NAME,SIZE,MODEL | grep "$(basename $DISK)" | awk '{print $2, $3, $4, $5}')

    # Nom unique (précaution utile  ?)
    ALEA=$(head -c 3 /dev/urandom | xxd -p | tr '[:lower:]' '[:upper:]')
    HOSTNAME="NIRD-$ALEA"


    # Avertissement avec sauve qui peut
    echo "Installation automatique de linux NIRD"
    echo ""
    echo "   Disque cible : $DISK"
    echo "                  ($DISK_INFO)"
    echo "   Nom provisoire du poste : $HOSTNAME"
    echo ""
    echo "ATTENTION : TOUTES LES DONNÉES SERONT EFFACÉES (mode bourrin)"


    for i in 10 9 8 7 6 5 4 3 2; do
        echo -ne "  Démarrage dans $i secondes... [Ctrl+C pour annuler]  \r"
        sleep 1
    done
        echo -ne "  Démarrage dans 1 seconde...  [Ctrl+C pour annuler]  \r"
        sleep 1

    echo ""
    echo "  Trop tard, c'est parti..."
    echo ""

    # nettoyage du disque
    sudo swapoff -a 2>/dev/null
    sudo umount ${DISK}* 2>/dev/null || true

    sudo wipefs -a $DISK
    sudo sgdisk --zap-all $DISK
    sudo dd if=/dev/zero of=$DISK bs=1M count=100 2>/dev/null
    sudo partprobe $DISK 2>/dev/null || true
    sleep 2


    # copie du preseed et edition du fichier pour le disque détecté + hostname
    cp "$SEED_FILE" /tmp/preseed-auto.seed
    sed -i "s|/dev/DISK|$DISK|g" /tmp/preseed-auto.seed
    sed -i "s|HOSTNAME|$HOSTNAME|g" /tmp/preseed-auto.seed

    # Chargement et lancement
    sudo debconf-set-selections /tmp/preseed-auto.seed
    sudo ubiquity --automatic gtk_ui

et le fichier test2.seed :

    # L10n
    d-i debian-installer/locale string fr_FR
    d-i time/zone string Europe/Paris
    d-i console-setup/layoutcode string fr

    # Codec non free
    ubiquity ubiquity/use_nonfree boolean true
    # passw demandé sur les postes réels
    # à tester avec une vraie machine

    # Clavier Fr
    d-i console-setup/ask_detect boolean false
    d-i keyboard-configuration/layoutcode string fr

    # Disque d'nstallation : la chaine /dev/DISK sera remplacée à la volée
    partman-auto partman-auto/method string regular
    partman-auto partman-auto/init_automatically_partition select Guided - use entire disk
    partman-auto partman-auto/disk string /dev/DISK
    partman-lvm partman-lvm/device_remove_lvm boolean true
    partman-lvm partman-lvm/confirm boolean true
    partman-lvm partman-lvm/confirm_nooverwrite boolean true
    partman-md partman-md/device_remove_md boolean true
    partman-md partman-md/confirm_nooverwrite boolean true
    partman partman/confirm boolean true
    partman partman/confirm_nooverwrite boolean true
    partman-partitioning partman-partitioning/confirm_new_label boolean true
    partman-partitioning partman-partitioning/confirm_write_new_label boolean true
    grub-installer grub-installer/bootdev string /dev/DISK

    # compte utilisateur
    d-i passwd/user-fullname string prn
    d-i passwd/username string prn
    d-i passwd/user-password password censuré
    d-i passwd/user-password-again password censuré
    # non ce n'est pas le vrai mot de passe et il y a moyen de faire ça propre en l'encodant
    d-i passwd/auto-login boolean false

    # nom provisoire du poste
    d-i netcfg/get_hostname string HOSTNAME

ubiquity est lancé correctement et les différentes étapes se déroulent de façon automatique sauf la fenêtre de sélection du disque
Edit : c'est cette fenêtre que je veux rendre silencieuse
capture de la fenetre

  • # markdown

    Posté par  (site web personnel) . Évalué à 4 (+2/-0). Dernière modification le 28 mai 2026 à 01:13.

    utilise déjà Markdown avec la balise de code ```bash en passant une ligne, ça t'évitera le {mathjax} sur la ligne :

     DISK_INFO=`{mathjax} (lsblk -d -o NAME,SIZE,MODEL | grep "`(basename $DISK)" | awk '{print $2, $3, $4, $5}')

    tu peux éditer ton entrée de forum pour corriger (il y a une autre ligne qui en bénéficiera)

    ensuite : à quelle commande apparaît

    la fenêtre de sélection du disque d'installation ?

    • [^] # Re: markdown

      Posté par  . Évalué à 2 (+0/-0).

      C'est fait, merci pour le conseil.

      La fenêtre apparait à la toute fin du script : c'est pendant le déroulement d'ubiquity

      • [^] # Re: markdown

        Posté par  (site web personnel) . Évalué à 3 (+1/-0).

        merci, c'est déjà plus lisible ;-)

        plutôt qu'utiliser ubiquity qui est par nature une interface graphique, peut-être utiliser subiquity https://github.com/canonical/subiquity (la version pour serveur) ?

        je n'ai pas trouvé de doc' très prolixe sur le fonctionnement de ubiquity…
        hormis
        https://wiki.ubuntu.com/Ubiquity qui correspond plutôt à des spécifications

        https://canonical-subiquity.readthedocs-hosted.com/en/latest/ pour subiquity…

        ubiquity étant remplacé par flutter depuis ubuntu 23.04 ? (ou avant ?) ya cette doc' apparemment traduite (imparfaitement sans doute par IA) https://fr.ubunlog.com/subiquity-ubuntu-pr%C3%A9pare-un-nouvel-installeur-que-nous-pouvons-voir-dans-ubuntu-21-10/

        c'est peu clair sur wikipedia https://en.wikipedia.org/wiki/Ubiquity_(software) => c'est subiquity qui a été réécrit pour remplacer ubiquity  ?

        bref, une page man ce serait pratique tout de même ;-) il y a sans doute un mode "silencieux" permettant d'automatiser l'intégralité sans fenêtre inopinée.

        • [^] # Re: markdown

          Posté par  . Évalué à 2 (+0/-0).

          Merci pour ton retour, je vais regarder ça.

          quelques remarques et réponses :

          plutôt qu'utiliser ubiquity qui est par nature une interface graphique, peut-être utiliser subiquity

          Je voulais essayer de m'éloigner le moins possible de l'existant. Le projet NIRD (lien plus haut) est tout petit et mon idée était d'apporter un plus sans surcharger le travail des autres contributeurs. D'où la démarche mais peut-être que subiquity est préférable et pas forcément plus compliqué à mettre en œuvre

          il y a sans doute un mode "silencieux" permettant d'automatiser l'intégralité sans fenêtre inopinée

          C'est le paramètre --automatic qui est prévu pour ça sauf que si le contenu du fichier preseed est incomplet (ce que je suppose dans le cas présent) ubiquity repasse en mode interactif.

          • [^] # Re: markdown

            Posté par  (site web personnel) . Évalué à 2 (+0/-0).

            bin, de ce que j'en ai compris : ton paramètre de disque choisi n'est pas le bon, donc il est demandé en interactif => si tu fiabilises cela, la fenêtre n'apparaîtra plus…

            t'as où la doc' pour constituer ce fichier pre-seed ?

            • [^] # Re: markdown

              Posté par  . Évalué à 2 (+0/-0).

              t'as où la doc' pour constituer ce fichier pre-seed ?

              Justement, pas trouvé de doc synthétique, claire et complète sur le sujet. D'où un fichier constitué par des bribes pêchées ça et là et des beaucoup d'essais erreurs

              J'ai essayé chatgpt et claude.ai mais sans succès : au deuxième ou troisième prompt les propositions deviennent tellement complexes (et sans aucune trace sur le web quand j'ai essayé de verifier) que c'en est pas crédible.

              (ps : pour les lignes complexes (enfin trop pour moi) du bash du type :

              DISK=$(lsblk -d -o NAME,TYPE,RM | grep "disk" | grep " 0$" | head -1 | awk '{print "/dev/"$1}')

              j'ai demandé à claude.ai. Tout seul il me faut deux heures pour y arriver :-(

              • [^] # Re: markdown

                Posté par  . Évalué à 3 (+2/-0). Dernière modification le 29 mai 2026 à 09:41.

                Bonjour

                Tu obtiendrais le même résultat
                en remplaçant la ligne de commande ci-dessous :

                DISK=$(lsblk -d -o NAME,TYPE,RM | grep "disk" | grep " 0$" | head -1 | awk '{print "/dev/"$1}')

                … par celle là :

                DISK=$(lsblk -noPATH -Q"TYPE=='disk' && RM==0")

                Tu peux aussi remplacer la ligne de commande suivante :

                DISK_INFO=$(lsblk -d -o NAME,SIZE,MODEL | grep "$(basename $DISK)" | awk '{print $2, $3, $4, $5}')

                … par celle là :

                DISK_INFO=$(lsblk -Q"PATH == '$DISK'" -noSIZE,MODEL)

                … et dans ce royaume, ceux qui y voient un peu plus clair sont parfois très mal vus.

                • [^] # Re: markdown

                  Posté par  . Évalué à 2 (+1/-0). Dernière modification le 29 mai 2026 à 09:54.

                  Pas eu le temps de corriger un oubli dans mon message précédent.

                  J'aurais aimé remplacer la ligne suivante :

                  DISK=$(lsblk -noPATH -Q"TYPE=='disk' && RM==0")

                  … par la suivante :

                  DISK=$(lsblk -Q"TYPE=='disk' && RM==0" -ndoPATH)

                  … et dans ce royaume, ceux qui y voient un peu plus clair sont parfois très mal vus.

                  • [^] # Re: markdown

                    Posté par  . Évalué à 3 (+1/-0).

                    Merci…

                    Toute la différence entre l'intelligence artificielle et humaine en deux lignes de code !

                    • [^] # Re: markdown

                      Posté par  (site web personnel) . Évalué à 6 (+4/-0).

                      je me demandais ce à quoi correspondait la colonne RM et le man est peu prolixe sur cette partie (pour moi les exemples d'utilisations sont généralement plus parlant, comme correspondant à des cas d'usage classique) :/ La commande lsblk --list-columns fournit une réponse :

                                RM <boolean>       périphérique amovible
                                RO <boolean>       périphérique en lecture seule
                      
                              TYPE <string>        type de périphérique
                      

                      pour le -Q comme query (ou --filter), cette fonction de sélection est indiquée comme expérimentale, ça me semble pérenne.

                      Le RM==0 enlève bien les clés USB qui sont à 1 (logique).
                      Le TYPE='disk' enlève le lecteur/graveur DVD (TYPE rom) et les partitions (TYPE part).

                      S'il y a deux disques non amovibles (sda et sdb), je ne sais pas trop quel critère permettra de les distinguer et lequel il faudrait retenir : j'aurais tendance à conserver le | head -1 pour s'en remettre au hasard ('fin l'ordre de la liste) et n'en garder qu'un :p

                      Toute la différence entre l'intelligence artificielle et humaine en deux lignes de code !

                      dans les deux cas, il vaut mieux relire et comprendre (puis documenter) pour obtenir le résultat souhaité.

                      Bon, ce n'est pas ça qui nous donne une bonne doc' pour le pre-seed pour autant :/

                      • [^] # Re: markdown

                        Posté par  . Évalué à 3 (+1/-0).

                        pour le -Q comme query (ou --filter), cette fonction de sélection est indiquée comme expérimentale, ça me semble pérenne.

                        Sur mon portable debian 12.13 et sur une mint en MV, ni -Q ni --filter ne sont reconnus :-(

                        • [^] # Re: markdown

                          Posté par  (site web personnel) . Évalué à 2 (+0/-0).

                          pérenne c'est pour la suite, pas le passé :D

                          avec util-linux en 2.42 sur Mageia 10 (à venir) pas de souci

                          en Bookworm forcément, en 2.38 ça ne le fait pas t'encore (bon, il m'en reste… mais, tout le monde est passé à Trixie /o\)… tu comptes le lancer sur une Mint récente de toute façon, non ? skoi MV ? (Mega Vintage ?)

                          • [^] # Re: markdown

                            Posté par  . Évalué à 2 (+0/-0).

                            Oui faut que je mette à jour mon portable ;-)

                            MV pour « machine virtuelle » pas si vintage : 22.3 LTS

                        • [^] # Re: markdown

                          Posté par  . Évalué à 1 (+0/-0). Dernière modification le 29 mai 2026 à 21:01.

                          … Sur mon portable debian 12.13 et sur une mint en MV, ni -Q ni --filter ne sont reconnus :-(

                          J'utilise la version stable (version 13) de debian

                          mic@deb134:~$ lsblk --version
                          lsblk de util-linux 2.41
                          mic@deb134:~$ 
                          

                          … et dans ce royaume, ceux qui y voient un peu plus clair sont parfois très mal vus.

                      • [^] # Re: markdown

                        Posté par  . Évalué à 2 (+1/-0).

                        … conserver le | head -1 pour s'en remettre au hasard ('fin l'ordre de la liste) et n'en garder qu'un :p …

                        Un autre oubli de ma part, merci de l'avoir signalé. :)

                        … et dans ce royaume, ceux qui y voient un peu plus clair sont parfois très mal vus.

                        • [^] # Re: markdown

                          Posté par  (site web personnel) . Évalué à 2 (+0/-0).

                          eh oh einh bon, faudrait pas te prendre pour une IA non plus

                          l'oubli est tant le fait de l'un comme de l'autre !

                          la compréhension en revanche…

  • # et sinon, y a les unattended install ?

    Posté par  . Évalué à 3 (+0/-0).

    plutot que de "reinventer", tu passes juste un fichier de configuration à l'installeur par defaut, ca repond aux questions qu'il aurait normalement du te poser, et il fait l'installation pour toi

    • [^] # Re: et sinon, y a les unattended install ?

      Posté par  . Évalué à 3 (+1/-0).

      Que'est-ce que tu entends par unattended install ? C'est bien ce que fait ubiquity et le fichier de preseed, non ?
      Est-ce qu'il y a une autre technique pour le même résultat ?

      • [^] # Re: et sinon, y a les unattended install ?

        Posté par  . Évalué à 4 (+1/-0).

        oui voila le fichier "preseed"
        mais du coup pourquoi tu fais un script, plutot que d'utiliser simplement le preseed ?

        • [^] # Re: et sinon, y a les unattended install ?

          Posté par  . Évalué à 3 (+1/-0). Dernière modification le 31 mai 2026 à 22:08.

          Plusieurs raisons, peut-être pas toutes pertinentes, donc je les expose ici à vos critiques.

          Le but de tout ça est de faciliter le déploiement de cette distri linux prévue pour des établissements scolaires. Si j'ai la chance d'avoir un parc assez homogène, ce n'est pas le cas de tous les bahuts.

          Or dans le fichier preseed il y a le nom du disque qui peut changer : /dev/sda ou /dev/nvme0, etc.
          Il y a aussi l'hostname qu'il faut définir dans le preseed. Comme de toute façon je vais les renommer lors de l'intégration au domaine, ce n'est peut-être pas critique mais que se passe-t-il si j'en installe plusieurs en même temps ? Est-ce gênant d'en avoir plusieurs, hors domaine, avec le même nom ? Dans le doute je préfère avoir un nom un peu aléatoire.

          Le script va donc, avant de lancer l'installation avec le preseed, repérer le nom du disque et choisir un hostname. Deux lignes de sed adaptent le fichier preseed.

          Autre bidouille : ubiquity pose des questions différentes suivant que le disque est déjà utilisé (par windows ou par une installation linux précédente) ou vide et je ne suis pas arrivé à trouver les directives qui conviennent dans tous les cas alors j'ai fait au plus simple : le script efface le disque et il n'y a alors plus qu'une seule configuration pré-installation. C'est complètement bourrin, mais ça semble fonctionner.

          J'espère avoir répondu à tes interrogations mais mes « solutions » sont peut-être complètement à côté de la plaque et il y a peut-être plus efficace ou plus propre.

          Dans tous les cas, merci à tous !

          • [^] # Re: et sinon, y a les unattended install ?

            Posté par  . Évalué à 4 (+1/-0).

            ah ok, le script c'est pour achever de remplir un preseed… OK

            Dans le doute je préfère avoir un nom un peu aléatoire.

            utilise un dmidecode pour choper le numero de serie de la machine,
            normalement il ne devrait pas y avoir 2 n° de serie identique :D

            ubiquity pose des questions différentes suivant que le disque est déjà utilisé (par windows ou par une installation linux précédente) ou vide et je ne suis pas arrivé à trouver les directives qui conviennent dans tous les ca

            il ne fournit pas une option install en effacant le disque ?
            etrange cela vu qu'en graphique il y a l'option.

            • [^] # Re: et sinon, y a les unattended install ?

              Posté par  . Évalué à 2 (+0/-0).

              il ne fournit pas une option install en effacant le disque ?
              etrange cela vu qu'en graphique il y a l'option.

              Pas trouvé… ou peut-être que j'ai eu un moment la bonne commande mais avec la toute dernière trouvée hier je ne suis pas arrivé à faire la différence entre la fenêtre qui s'affiche parce que le preseed ne la valide pas et la fenêtre qui s'affiche parce que les commandes sont incomplètes ou pas les bonnes :-(

              Les tâtonnements ce n'est pas très efficace pour comprendre ce que l'on fait :-(

  • # Je pense que j'ai trouvé

    Posté par  . Évalué à 4 (+2/-0).

    ici : https://askubuntu.com/questions/1100876/how-do-i-get-past-the-finish-partitioning-and-write-changes-to-disk-during-aut

    en ajoutant la ligne

    partman partman/choose_partition select finish
    

    ça semble OK, du moins en machine virtuelle.

    Reste à tester sur un vrai poste, ce sera pour lundi au collège.

    • [^] # Re: Je pense que j'ai trouvé

      Posté par  (site web personnel) . Évalué à 3 (+1/-0).

      Reste à tester sur un vrai poste, ce sera pour lundi au collège.

      En espérant que tu puisses rajouter [Résolu] dans le titre de ton entrée de forum \o/

      (et répond à NeoX< ci-dessus tout de même :p)

    • [^] # Re: Je pense que j'ai trouvé

      Posté par  . Évalué à 3 (+0/-0). Dernière modification le 31 mai 2026 à 23:05.

      je vais dire une betise, mais tu as verifié que tes commandes sont encore valable

      tous les tutos qui parle de partman, preseed et ubuntu sont de 2010 à 2018, depuis y a des trucs surement plus efficaces ?

      exemple 'autoinstall' ou 'cloud-init'
      https://canonical-subiquity.readthedocs-hosted.com/en/latest/intro-to-autoinstall.html

      • [^] # Re: Je pense que j'ai trouvé

        Posté par  . Évalué à 2 (+0/-0).

        Je suis parti sur l'utilisation de ubiquity parce que c'est l'installeur prévu sur le l'image live utilisée.

        Ce n'est peut-être pas la solution la meilleure, comme peut-être d'autres choix techniques, mais initialement ce projet a été lancé en catastrophe pour que les établissements scolaires des hauts de France touchés par la cyberattaque du début d'année puissent quand même un peu fonctionner.

        Mais merci quand même, je vais garder un œil sur le lien proposé

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.