Installation: comment résoudre un problème de mirroir dans un preseed?

Tags: #<Tag:0x00007f509f4816f0> #<Tag:0x00007f509f481538> #<Tag:0x00007f509f4813a8>

Bonjour à tous et à toutes!

Je suis tout nouveau sur ce forum et je viens solliciter votre aide car j’essaye de créer un fichier de pré-configuration pour automatiser l’installation d’une Debian 9.13.
J’utilise dnsmasq comme serveur DHCP/TFTP/PXE. Voici le fichier de configuration que j’utilise:

domain-needed
bogus-priv
filterwin2k
interface=InterfaceRéseauVirtuelle (enp0s8 en l'occurence)
expand-hosts
dhcp-range=192.168.1.100,192.168.1.110,255.255.255.0,1h
pxe-service=X86PC, "Install Linux", pxelinux
enable-tftp
tftp-root=/srv
log-queries

J’utilise l’image de démarrage réseau de Debian 9.13 (http://ftp.nl.debian.org/debian/dists/stretch/main/installer-amd64/current/images/netboot/netboot.tar.gz). Le boot est effectif, tout se passe bien.
Le problème arrive au niveau du choix du miroir. Je rencontre toujours l’erreur « Miroir de l’archive debian corrompu ». Peu importe le miroir utilisé. L’erreur plus précise est la suivante : « mirror does not support the specified release (stretch) ».
Je suis en train d’essayer d’utiliser un miroir interne, mais il prend beaucoup de temps (actuellement, ça fait 2h qu’il tourne, il n’est qu’à 50% du téléchargement). Je vous laisse avec mon fichier preseed. Merci d’avance pour vos réponses! PS: Le partitionnement n’a pas encore été testé.

#Configuration du pays et du clavier
d-i debian-installer/locale string fr_FR.UTF-8
d-i debian-installer/language string fr
d-i debian-installer/country string FR
d-i keyboard-configuration/xkb-keymap select fr(latin9)
#d-i keyboard-configuration/toggle select No toggling

#Création du compte et mot de passe utilisateur
d-i passwd/root-login boolean false
d-i passwd/user-fullname string ekanskaya
d-i passwd/username string ekanskaya
d-i passwd/user-password password-crypted ***********************
d-i user-setup/allow-password-weak boolean false

#Configuration du réseau
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain

#Configuration du mirroir
d-i mirror/country string auto
d-i mirror/http/hostname string http://ftp.fr.debian.org
d-i mirror/http/directory string /debian
d-i mirror/suite string stretch
#d-i mirror/http/proxy string

#Configuration de apt (sources.list)
d-i apt-setup/use_mirror boolean false
d-i apt-setup/no_mirror boolean true
d-i apt-setup/services-select multiselect security, updates
d-i apt-setup/security_host string security.debian.org/debian-security stretch/updates main

#Configuration du temps
d-i clock-setup/utc boolean true
d-i clock-setup/ntp boolean false
d-i time/zone string UTC

#Création et configuration des partitions du disque dur
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string crypto ************************
d-i partman-crypto/passphrase password ************************
d-i partman-crypto/passphrase-again password *************************
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
d-i partman-auto-lvm/guided_size string max
d-i partman-auto-lvm/new_vg_name string VolumeGroupe
d-i partman-auto-lvm/choose_recipe select custom-lvm
d-i partman-auto/expert_recipe string      \
    1000 1000 1000 ext4                    \
        $defaultignore{ }                  \
        $primary{ }                        \
        $bootable{ }                       \
        method{ lvm }                      \
        device { /dev/sda }                \
        vg_name{ VolumeGroupe }            \
        format{ }                          \
        use_filesystem{ }                  \
        filesystem{ ext4 }                 \
        mountpoint{ / }                    \
        .                                  \

    1000 1000 1000 ext4                    \
        $lvmok{ }                          \
        in_vg{ VolumeGroupe}               \
        lv_name{ LV-tmp }                  \
        method{ lvm }                      \
        format]{ }                         \
        use_filesystem{ }                  \
        filesystem{ ext4 }                 \
        mountpoint{ /tmp }                 \
        .                                  \

    20000 20000 20000 ext4                 \
        $lvmok{ }                          \
        in_vg{ VolumeGroupe }              \
        lv_name{ LV-root }                 \
        method{ lvm }                      \
        format{ }                          \
        use_filesystem{ }                  \
        filesystem{ ext4 }                 \
        mountpoint{ /root }                \
        .                                  \

    40000 40000 40000 ext4                 \
        $lvmok{ }                          \
        in_vg{ VolumeGroupe }              \
        method{ lvm }                      \
        format{ }                          \
        use_filesystem{ }                  \
        filesystem{ ext4 }                 \
        mountpoint{ /var }                 \
        .                                  \

    5000 5000 5000 ext4                    \
        $lvmok{ }                          \
        in_vg{ VolumeGroupe }              \
        method{ lvm }                      \
        format{ }                          \
        use_filesystem{ }                  \
        filesystem{ ext4 }                 \
        mountpoint{ /var/log }             \
        .                                  \

    10000 10000 10000 ext4                 \
        $lvmok{ }                          \
        in_vg{ VolumeGroupe }              \
        method{ lvm }                      \
        format{ }                          \
        use_filesystem{ }                  \
        filesystem{ ext4 }                 \
        mountpoint{ /opt }                 \
        .                                  \

    30000 52000 -1 ext4                    \
        $lvmok{ }                          \
        in_vg{ VolumeGroupe }              \
        method{ lvm }                      \
        format{ }                          \
        use_filesystem{ }                  \
        filesystem{ ext4 }                 \
        mountpoint{ /home }                \
        .                                  \
d-i partman/default_filesystem string ext4
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

#Installation de Grub
d-i grub-installer/only_debian boolean true
d-i grub installer/password-crypted password ***************

#Installation de paquets
tasksel tasksel/first multiselect standard ssh-server
d-i pkgsel/update-policy select safe-upgrade
d-i pkgsel/include string sudo vim
d-i popularity-contest popularity-contest/participate boolean false

#Eteindre le système
d-i finish-install/reboot_in_progress note
d-i cdrom-detect/eject boolean true
d-i debian-installer/exit/poweroff boolean true

Bonjour,
Déjà, je pense qu’il faut que laisse tomber Debian 9 et que tu passe sur Debian 10, ce serait mieux. Quitte à passer du temps autant le faire sur la version stable.
Pour ton Volume group, inutile de faire un nom à rallonge, car le device va etre très long sinon. Ce n’est pas pratique et ca ne sert pas vraiment à grand chose.
C’est comme si au lieu de sda tu utilisait « leDisqueQueJeMetDansLePremierSupportEnHaut » :wink:

Ta racine peut faire partie du LVM, pas utile de le separrer (ca enlève une bonne part de l’utilité du LVM en fait.
Seul le /boot et /boot/efi est à metre en deors du LVM (car ca ne marche pas toujrosu très bien dedans surtout pour une installation qui devra focntionner à la fois sur du boot BIOS et du boot EFI).

Si tu n’as qu’un seul VG pas besoin de le preciser à chaque fois dans tes partitions. Partaman prendra le VG present par defaut.

La devibition du /dev/mapper LVM est qu’il se termine par -. Evites de mettre LV dans le nom d’un LV vu qu’on sait que c’est un LV. Et ne met pas de tiret dans le nom.

Il n’y a pas d’utilité de faire une partition spécifique pour root. C’est une perte de ressource de traitement ou issue de mauvaises habitude dans l’utilisation du compte root. Il n’y a jamais de données dans le compte root quand il est correctement utilisé.

ne met pas http:// ca ne sert pas.C’est la valeur par défaut. ou alors précise le protocole avec
`` `d-i mirror/protocol string , avec protocole http, https, ftp. utilise la version pour debian 10 il y a eu des changements. La variable suite ne sert pas pour la distribution mais pour decider si tu utilises stable, testing, unstable. si tu veux la stable, ne met rien, sinon pour la testing: d-i mirror/suite string testingIdem pour les composants de l'installer:d-i mirror/udeb/suite string testing```

Pour proxy met une chaine vide comme ça:
d-i mirror/http/proxy string

Les security c’est bien , les updates avec c’est mieux:

d-i apt-setup/services-select multiselect security, updates, release updates

Pour le partitionnement, les chiffre ne semble pas tous pertinents. mais je te l’accorde le mode de calcul est compliqué. Je te conseille de lire attentivement ce lien : https://wikitech.wikimedia.org/wiki/PartMan

Personnellement pour faire mon calcul de partition, je me suis basé sur les conditions suivantes:

  1. Quel est la taille minimum de disque que peut accepter mon installation? c’est cette tailel qui servira de base à mon calcul
  2. En me basant sur la tailel définie en 1, je définie mon partitionnement complet, Y COMPRIS CE QUI DOIT RESTER LIBRE. Cette zone libre je la partitionne en l’appellant « todelete ». Avec la fonction late_command de preseed, je la détruit en fin d’installation. C’est le seul moyen de s’asurer de la disponibilité d’un espace en fin de disque. Sinon partman fera le nécessaire pour tout utiliser.
  3. je définit ensuite la taille maximum de mon partitionnement que je veux allouer et je définit mon partitionnement cible (par exemple, pour un disque de 1To, j’utilise uniquement 300Go pour un serveur de base sans aucune fonction définie).
  4. Fait un tableau qui contiendra toutes les partitions une à une, avec les totaux d’espace occupé. Considère l’utilisation de 90% du disque dans tes calcules pour être sur d’arriver à un resultat assez correct. Ensuite calcule par itération.
  5. Le lien cité n’est pas spécialement facile à comprendre au départ.
  6. le premier nombre (des trois) est la taille minimum. Le troisième nombre est la taille maximum. Le nombre du milieu est un genre de pondération qui déterminera quelle poids ta partition prendra dans l’allocation de sa taille maximum.
  7. La taille maximum additionnée de tes partition ne doit pas dépasser la taille de ton disque considéré (l’utilisation de pourcentage pour déterminer les tailles des partitions les unes par rapports aux autres est utile).
  8. Les tailles de repertoire sont proportionnelle entre le minimum et le maximum.
  9. Les partition sont traitées de façon linéaire. Si ton disque fait 100 Gb, et que ta première partition permet d’atteindre 200Gb alkors les autres n’auront rien à se mettre sous la dent.

le système est compliqué mais on y arrive.
je te met en exemple celui que j’utilise pour un disque de 60 Gb au minimum, et qui considère 10To au maximum. Il marche en BIOS et en UEFI.

d-i partman-auto-lvm/new_vg_name string vg00
d-i partman-auto/expert_recipe string \
        boot-root :: \
                256 512 320 ext4 \
                        $primary{ } \
                        $bootable{ } \
                        method{ format } format{ } \
                        use_filesystem{ } filesystem{ ext4 } \
                        label{ boot } \
                        mountpoint{ /boot } \
                . \
                200 512 220 free \
                        $iflabel{ gpt } \
                        $reusemethod{ } \
                        method{ efi } \
                        format{ } \
                . \
                100% 2048 200% linux-swap \
                        lv_name{ swap } \
                        method{ swap } format{ } \
                        $lvmok{ } \
                . \
                10000 2260000 100000 ext4 \
                        lv_name{ root } \
                        method{ lvm } format{ } \
                        use_filesystem{ } filesystem{ ext4 } \
                        label{ root } \
                        mountpoint{ / } \
                        options/relatime{ relatime } \
                        options/errors{ errors=remount-ro } \
                        $lvmok{ } \
                . \
                4000 904000 250000 ext4 \
                        lv_name{ home } \
                        method{ lvm } format{ } \
                        use_filesystem{ } filesystem{ ext4 } \
                        label{ home } \
                        mountpoint{ /home } \
                        options/nodev{ nodev } \
                        options/relatime{ relatime } \
                        $lvmok{ } \
                . \
                10000 2260000 2500000 ext4 \
                        lv_name{ var } \
                        method{ lvm } format{ } \
                        use_filesystem{ } filesystem{ ext4 } \
                        label{ var } \
                        mountpoint{ /var } \
                        options/relatime{ relatime } \
                        $lvmok{ } \
                . \
                4000 904000 250000 ext4 \
                        lv_name{ var_log } \
                        method{ lvm } format{ } \
                        use_filesystem{ } filesystem{ ext4 } \
                        label{ log } \
                        mountpoint{ /var/log } \
                        options/nodev{ nodev } \
                        options/nosuid{ nosuid } \
                        options/noexec{ noexec } \
                        options/relatime{ relatime } \
                        $lvmok{ } \
                . \
                4000 904000 250000 ext4 \
                        lv_name{ var_log_audit } \
                        method{ lvm } format{ } \
                        use_filesystem{ } filesystem{ ext4 } \
                        label{ audit } \
                        mountpoint{ /var/log/audit } \
                        options/relatime{ relatime } \
                        $lvmok{ } \
                . \
                2000 452000 8000 ext4 \
                        lv_name{ var_tmp } \
                        method{ lvm } format{ } \
                        use_filesystem{ } filesystem{ ext4 } \
                        label{ vartmp } \
                        mountpoint{ /var/tmp } \
                        options/nodev{ nodev } \
                        options/nosuid{ nosuid } \
                        options/noexec{ noexec } \
                        options/relatime{ relatime } \
                        $lvmok{ } \
                . \
                2000 452000 8000 ext4 \
                        lv_name{ tmp } \
                        method{ lvm } format{ } \
                        use_filesystem{ } filesystem{ ext4 } \
                        label{ tmp } \
                        mountpoint{ /tmp } \
                        options/nodev{ nodev } \
                        options/nosuid{ nosuid } \
                        options/noexec{ noexec } \
                        options/relatime{ relatime } \
                        $lvmok{ } \
                . \
                1 1 -1 ext4 \
                        lv_name{ todelete} \
                        method{ lvm } format{ } \
                        use_filesystem{ } filesystem{ ext4 } \
                        label{ todelete } \
                        mountpoint{ /todelete } \
                        options/nodev{ nodev } \
                        options/nosuid{ nosuid } \
                        options/noexec{ noexec } \
                        options/relatime{ relatime } \
                        $lvmok{ } \
                .

Les options noexec ne marchent pas. Un defaut dans le processus. mais ca ne génère aucune erreur.

il faut utiliser partman-lvm pour les confirmation liées au LVM.
Tu peux aussi lui dire de mettre du contrib et non-free avec

d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true

Pour mettre des repository en local:

d-i apt-setup/local0/repository string http://local.server/debian stable main
d-i apt-setup/local0/comment string local server
d-i apt-setup/local0/key string http://local.server/key

L’installer a définit des installation par defaut, si tu n"'en veut pas il faut lui dire

tasksel tasksel/remove multiselect desktop, print-server

Pour ajouter des paquet supplémentaires:

d-i pkgsel/include string apt sudo vim

précise aussi sur quel disque tu veux installer le MBR.

d-i grub-installer/bootdev string /dev/sda

Pour éviter le mesage de fin d’installation:

d-i finish-install/reboot_in_progress note

Pour le cdrom c’est la valeur par defaut. De fait, il est juste utilisé pour le contraire, ne pas éjecter le cd-rom.

Et donc à la fin tu étains l’ordinateur. Intéressant. Tu ne vérifie pas l’installation?

Bonsoir Zargos, merci pour ta réponse détaillée!

J’ai apporté quelques modifications notamment pour le mirroir et la configuration des paquets updates du apt-setup. Concernant l’utilisation de Debian 9 et de ce schéma de partionnement, c’est une contrainte de projet :slight_smile:

Je me heurte encore au même problème, mais je vais apporter quelques précision concernant l’environnement réseau, car je pense que c’est là que se trouve le problème principal.

J’utilise VirtualBox. Mon server PXE a deux cartes réseaux: NAT et Réseau Interne. Le client PXE n’a qu’une carte Réseau Interne.

Afin de pouvoir requêter le serveur PXE, j’utilise apt-cacher qui permet au client de contacter le serveur PXE qui redirige (normalement) les requêtes vers Internet. J’ai essayé de changer le Réseau Interne en Réseau Host-only, mais lorsque je fais un tcpdump sur l’interface natée, les paquets revenant d’internet ne transitent pas vers le client.

J’ai joins deux captures d’écran de l’erreur de miroir, une capture d’écran du preseed (partie mirroir et apt-setup), ainsi qu’une capture du fichier de configuration dnsmasq et du resolv.conf.

Merci encore de prendre le temps de me lire et de répondre, j’ai de bons éléments de débug pour tout le partionnement qui vont me permettre de mieux comprendre LVM.

Concernant la fin du script, je ne vérifie pas l’installation parce que j’ignorais qu’on pouvait le faire, ça ne semble pas apparaître sur la documentation officielle.

Bonne nuit!

imageonline-co-merged-image

Bonjour,

PS: Parfois je dis des trucs dur et qui peuvent paraitre méchant. mais ça n’a rien de personnel.

Au regard de tes contraintes, ma première question, c’est un projet professionnel ou c’est dans le cadre d’une formation?

Dans le premier cas, le demandeur est limite incompétent, dans le second, c’est malheureusement la même chose mais en moins excusable.

C’est l’un des pire trait de l’industrie informatique c’est le niveau d’incompétences de certains décideurs et des conséquences parfois dramatiques de leurs décisions dans le temps ;). Mon travail consiste la plupart du temps à corriger, parfois des années plus tard, les effets désastreux de ces décisions. L’ampleur des cyberattaques de ces deux dernières années en sont d’ailleurs l’une des conséquences.

ce qui n’est pas clair c’est l’architecture de l’ensemble.
Normalement tu as 2 éléments:

  • la machine à installer, nommons la serveur01
  • Le serveur DHCP/PXE, nommons le srvdpxe01

Serveur01 en démarrant va avoir sa carte réseau qui va se mettre en mode PXE pour accéder au serveur DHCP/PXE srvdpxe01.

Je ne rentrerais pas dans le detail de dnsmasq vs ISC DHCP, mais personnellement je ne serais pas trop confiant avec dnsmasq pour ce type d’utilisation. Un vrai serveur DHCP serait préférable. Il y a plein de tuto/howto pour faire un pxe avec ISC DHCP.
Restons sur Debian 9 donc.

Si je comprend bien tes deux machines sont des machines virtuelles?
Le serveur PXE/DHCP est relié à un réseau internet ainsi que le client PXE.
La machine PXE/DHCp est reliée au réseau local et de là à Internet.

Dans ton preseed, c’est un miroir sur internet que tu utilise pas un miroir interne.
Si je comprend bien tu as falsifié un /etc/hosts ou ton DNS pour que le miroir Debian que tu as paramétré pointe vers ton local au lieu d’internet.

si ce n’est pas le cas, ton client va vouloir accéder à Internet à travers ton serveur DHCP/PXE. Si celui ne fait pas de routage, ça ne marchera pas.

Le NAT de ton serveur n’a pas forcement d’importance. Tu pourrais très bien le mettre en pont. sauf si c’est une contrainte imposé par le projet.

Donc il faut que tu mette ton PXE/DHCP en routeur entre le réseau interne, et le réseau NAT.
Si tu veux un miroir local, il faut que tu lui donne un nom dans ton réseau, pas de copier celui d’internet. Ça ne se fait pas. Et en plus c’est moche.

Même si ce miroir est dans le réseau interne.

Un miroir interne n’est vraiment utilisable que si tu as fait un mirroring complet du miroir. Car si certains fichiers manquent ou ne sont pas à jour alors ça génère une erreur. Ce qui veut dire que tu as un FTP ou un HTTP sur ton miroir. mais il est important de savoir où se trouve ce miroir.

1 J'aime

Bonjour Zargos,

C’est gentil d’avoir mis le PS, mais aucun souci avec moi! Encore merci pour tes réponses, tu me donnes ici une solution à laquelle je n’avais pas pensée, et que j’essaierai dès lundi (je te tiendrai au courant), car effectivement, mon serveur01 ne fait pas de routage actuellement.

Pour répondre à ta question, je suis alternant; ce projet est donc à la fois professionnel et dans le cadre de ma formation. Pourrais-je te demander comment tu déduis que l’utilisation de Debian 9 et ce schéma de partitionnement est une preuve d’incompétence? Je ne vois pas le raisonnement qui t’amènes à cette conclusion.

Bonne fin de weekend!

personne ne fait de partitionnement sur /root.
car root n’est jamais utilisé sauf de rares cas.
de fait, il n’y a jamais de données sur root, donc l’espace disque nécessaire est faible. Il ne nécessite non plus aucun flag/option particulier (noexe, nosuid ou nodev par exemple).

les seuls en endroits où j’ai vu ça, c’est chez les profs qui ont une expérience professionnelle de l’architecture système limité (ils ne peuvent pas non plus tout faire il est vrai).
C’est dommage car c’est eux qui risquent d’imprimer dans l’esprit des élèves de mauvaises pratiques. c’est dans ce sens là que je parlais de ne pas être excusable.

Pour la version ,utiliser une version (en enseignement ou il n’y a ps de contraintes opérationnelles autre que la connaissance) qui a été publiée après celle de la dernière version (la version 9.13 a été publiée près d’un an après la version 10. Autant utiliser la dernière. A moins que la correction de l’exercice ne date un peu et n’ai jamais été mis à jour.

j’ai à pas mal de reprise dans ma carrière professionnelle, aussi bien dans l’industrie que dans l’informatique eu à m’occuper d’élèves en stage ou en alternance. et souvent, ils arrivent avec des informations qui n’ont visiblement pas été mises à jour depuis un certain temps.

mais j’ai toujours été très sévère avec l’éduc nat et l’enseignement en général.
le niveau quelque soit le domaine est en régression depuis des années, et les diverses notations internationales existante ne mettent la France à la fête. Quand la France en fait encore parti.

mais tout ça est un autre sujet qui a plus sa place en pause Café :wink:

Bonjour Zargos!

Tout à fait d’accord avec toi, même si je suis encore jeune, je fais tout pour essayer d’être le moins impacté possible par cette régression générale, même si c’est sûrement impossible d’y échapper.

Concernant mon problème, je n’avais effectivement pas activé le routage des paquets IPv4 sur mon serveur PXE, et de plus, j’avais une route par défaut qui n’avait rien à faire là (elle est restée à force de changer le groupe réseau des cartes virtuelles de réseau interne à réseau hôte puis NAT…).

Ce problème est donc résolu, mais je vais attendre d’avoir un preseed complètement foncitonnel pour le poster ici avec les configurations de virtualbox et de apt-cacher avant de passer clore le ticket.

Encore une fois, grands mercis Zargos pour tes réponses détaillées, je suis très content d’avoir échangé avec toi; peut-être qu’on se croisera un jour, on dit que le monde est petit!

À bientôt! Bonne journée

1 J'aime

yep :smiley:

Bonjour à tous,

Pour clôturer ce ticket, je joins au prochain message la configuration de VirtualBox, ainsi que celle d’apt-cacher. Enfin, vous aurez accès à mon preseed fonctionnel, même s’il reste quelques petites choses à revoir. Merci @Zargos pour ton aide^^

1 J'aime

Désolé, mais les nouveaux utilisateurs ne peuvent pas joindre plusieurs images, j’ai donc fusionner les images que vous pourrez retrouver à la fin de ce message.

Environnement

VirtualBox – Deux machines virtuelles

  • Serveur DHCP/DNS/PXE
    • 1 Carte NAT/Bridge
    • 1 Carte Réseau Interne

(image 1)

  • Client PXE
    • 1 Carte Réseau Interne

(image 2)

Voici le schéma réseau du projet :

(image 3)

Listes de paquets utilisés sur le serveur :

  • Dnsmasq v.2.80.1 (à jour)
  • Apt-cacher v.1.7.20.1 (à jour)

Configuration du routage

Afin que le client puisse télécharger les paquets nécessaires à son installation, il va envoyer ses requêtes au serveur. Le serveur doit faire suivre les requêtes vers Internet pour envoyer les réponses au client. Pour ça, le serveur doit être configurer pour router les paquets IPv4. Il faut modifier le fichier /etc/sysctl.conf et décommenter la ligne suivante :

(image 4)

Configuration du proxy apt-cacher

L’outil apt-cacher sert de proxy au client. C’est lui qui permet, combiné au routage du serveur, de télécharger et conserver dans le cache les paquets apt que le client demande. Lors de l’installation du paquet, il est nécessaire de le faire tourner en mode « démon » (il sera donc actif en arrière-plan). Ensuite, il n’y a qu’à configurer le fichier /etc/apt-cacher/apt-cacher. conf le ou les réseaux autorisés à communiquer avec lui :

(image 5)

À noter que les journaux de l’outil sont stockés dans ce répertoire : /var/log/apt-cacher .

Configuration des services DNS, DHCP, TFTP et PXE

Le paquet dnsmasq permet de monter un petit serveur DNS/DHCP/TFTP/PXE. Il est léger et conçu pour des petits réseaux. Pour ce projet, tous les services seront nécessaires :

  • DHCP permettra d’attribuer une IP au client afin que les autres protocoles puissent communiquer avec la machine
  • TFTP transfèrera les fichiers de base nécessaires à l’amorçage par le réseau
  • La coopération de ces deux protocoles forme ce qu’on appelle un serveur PXE
  • DNS s’occupera de translater les requêtes DNS du client

Voici un schéma simplifié du fonctionnement conjoint de ces protocoles :

(image 6)

La configuration de ce paquet est relativement simple grâce à une documentation complète. Le fichier à configurer est le /etc/dnsmasq.conf . Voici la configuration actuelle du paquet :

# Ne transmet pas les requêtes ne contenant pas un nom de domaine complet.
domain-needed

#Permet de ne pas transmettre aux forwarders les résolutions inverses non trouvées par la configuration locale
bogus-priv

# Les dernières versions de windows font des requêtes DNS périodiques auxquelles non seulement les serveurs DNS publics ne peuvent donner de réponse, mais qui, de surcroît, peuvent poser des problèmes en déclenchant des connexions intempestives pour des liens réseaux avec des connexions “à la demande”.
filterwin2k

# Spécifie l'interface d'écoute des requêtes (on peut renseigner plusieurs interfaces en les séparant par une virgule)
interface=InterfaceRéseauVirtuelle (enp0s3 dans notre cas)

# Ajoute automatiquement le domain définit dans la configuration aux noms de machines présents dans /etc/hosts.
expand-hosts

# Définit la plage d'IP à attribuer aux clients ainsi que le bail de renouvellement
dhcp-range=192.168.1.100,192.168.1.110,255.255.255.0,1h

# Permet de donner l'architecture cible, le texte affiché dans le menu, ainsi que le chemin vers le fichier de démarrage à utiliser pour chaque entrée du menu
pxe-service=X86PC, "Install Linux", pxelinux

# Active le serveur TFTP
enable-tftp

# Défini la racine du serveur TFTP
tftp-root=/srv

# Permet de journaliser les requêtes DNS dans /var/log/messages
log-queries

Configuration du fichier de pré-configuration preseed.cfg

Ce fichier de configuration permet, lorsqu’il est placé à la racine du serveur TFTP, d’automatiser complètement l’installation de Debian. Pour configurer le chargement de ce fichier, il faut modifier le fichier /srv/debian-installer/amd64/boot-screens/adtxt.cfg en ajoutant cette directive :

(image 7)

On omet la racine du serveur TFTP car elle est implicitement déclarée.

Enfin, voici le preseed entièrement commenté (message suivant):
all-in-one

Preseed

#Configuration du pays et du clavier en Français
d-i debian-installer/locale string fr_FR.UTF-8 #Configuration de la variable de langue locale
d-i debian-installer/language string fr #Configuration de la langue
d-i debian-installer/country string FR #Configuration du pays
d-i keyboard-configuration/xkb-keymap select fr(latin9) #Configuration du clavier

#Création du compte et mot de passe utilisateur
d-i passwd/root-login boolean false #Blocage de la création d'un compte root
d-i passwd/user-fullname string ekanskaya #Définition du nom complet du nouvel utilisateur
d-i passwd/username string ekanskaya #Définition du nom d'utilisateur

#On défnit le mot de passe de l'utilisateur; ce dernier est chiffré dans le fichier pour des questions de sécurité.
#On peut créer ce genre de mots de passe avec la commande "mkpasswd" du paquet "whois"
d-i passwd/user-password-crypted password $6$PdqN40qAdcahjfS$MuMgQPffsreuZV8SFLbWAos/YXXyHn9BRpz9GYY5b0D7tu5hMlZS5aECRHrXgkoQcBiLfBs.lEKu1WqyUduS3/

d-i user-setup/allow-password-weak boolean false #On empêche la création de mots de passe faibles

#Configuration du réseau
d-i netcfg/choose_interface select auto #Choix automatique de l'interface réseau à configurer; on peut la spécifier "select enp0s3" par exemple
d-i netcfg/get_hostname string unassigned-hostname #On ne définit aucun nom de machine
d-i netcfg/get_domain string unassigned-domain #On ne définit aucun domaine

#Configuration du mirroir
d-i mirror/country string auto #Définition du pays
d-i mirror/http/hostname string 192.168.2.101:3142 #Lien du mirroir; en l'occurence, on entre l'IP du serveur suivie du port apt-cacher
d-i mirror/http/directory string /ftp.fr.debian.org/debian #On définit vers quel lien le serveur ira chercher les paquets.
d-i mirror/http/proxy string #On laisse cette directive vide, car l'utilisation du proxy est définie juste au-dessus

#Configuration de apt (sources.list)
d-i apt-setup/use_mirror boolean false #On n'utilise pas de miroir externe sur le réseau
d-i apt-setup/no_mirror boolean true #On n'utilise pas de miroir externe sur le réseau
d-i apt-setup/services-select multiselect security, updates, release updates #On spécifie quels services de mise à jour utiliser pour le miroir
d-i apt-setup/security_host string 192.168.2.101:3142/security.debian.org/debian-security buster/updates main #On donne l'adresse du miroir

#Configuration du temps
d-i clock-setup/utc boolean true #L'horloge sera en UTC
d-i clock-setup/ntp boolean false #On n'utilise pas de serveur NTP
d-i time/zone string UTC #La zone de temps est la zone UTC

#Création et configuration des partitions du disque dur
d-i partman-auto/disk string /dev/sda #On spécifie quel disque sera partitionné (on peut en mettre plusieurs)
d-i partman-auto/method string lvm #La méthode de partitionnement sera LVM
d-i partman-auto/purge_lvm_from_device boolean true #On supprime tous les périphériques LVM présents sur la machine
d-i partman-lvm/device_remove_lvm boolean true #On supprime toutes les partitions LVM ainsi que les groupes de volumes
d-i partman-md/device_remove_md boolean true #On supprime toutes les partitions RAID
d-i partman-lvm/confirm boolean true #On confirme ces choix
d-i partman-lvm/confirm_nooverwrite boolean true #On confirme que l'on souhaite écrire sur le disque
d-i partman-auto-lvm/guided_size string max #On définit le montant d'espace disque qui sera utilisé par LVM
d-i partman-auto-lvm/new_vg_name string VG-Ekans #On donne un nom au groupe de volumes créé
d-i partman-auto-lvm/choose_recipe select custom-lvm #On spécifie un partitionnement personnalisé en une ligne logique

### La configuration des partitions étant très longues, voici les éléments qui permettent de comprendre toutes les lignes ci-dessous
# Les nombres (en Mégaoctets) représentent la taille de la partition; le premier donne la taille minimum requise, le second sa taille idéale et le dernier, sa taille maximale
# Le "-1" exprime une non limitation de taille maximale
# "$primary" indique que cette partition est une partition primaire
# "$bootable" indique que la partition sera une partition de démarrage
# "$lvmok" indique que la partition est autorisée à être une partition logique du groupe LVM
# "method{ format }" est utilisé pour indiquer que la partition doit être formatée
# "method{ lvm }" spécifie que la partition fait partie d'un groupe LVM
# "format{ }" est nécessaire pour que la partition soit formatée
# "device { /dev/sda }" indique sur quel disque seront inscrite les partitions; il est necéssaire de l'indiquer dans la partition de démarrage
# "use_filesystem{ }" est utilisé pour indiquer quel système de fichiers est utilisé sur la partition; s'il est vide, c'est qu'aucun système de fichiers n'est utilisé
# "filesystem{ ext4 }" indique quel système de fichiers sera inscrit sur la partition
# "mountpoint { }" indique sur quel répertoire sera montée la partitions
# "lv_name{ }" indique le nom du volume logique
### Le ". \" à la fin de chaque configuration de partition indique à PartMan que la configuration de la partition s'arrête et qu'on passe à la suivante. Le dernier "." indique à PartMan la fin de la configuration du dique.
### Le caractère "\" indique un saut de ligne dans le fichier, mais PartMan interprète le tout comme une seule ligne. Il est nécessaire pour une lecture claire de la configuration
### Il est nécessaire de formater la première partition pour que les suivantes soient LVM, c'est pourquoi on utilise "method{ format }" uniquement pour la première
### La directive "in_vg" n'apparaît plus dans ce fichier car c'est elle qui causait l'impossibilité de terminer le partitionnement.

# Ce partitionnement est à revoir, mais il fonctionne
d-i partman-auto/expert_recipe string      \
boot-root ::                               \
    1000 1000 1000 ext4                    \
        $primary{ }                        \
        $bootable{ }                       \
        method{ format }                   \
	    format{ }                          \
	    device { /dev/sda }                \
        use_filesystem{ }                  \
        filesystem{ ext4 }                 \
        mountpoint{ /boot }                \
        .                                  \

    20000 20000 20000 ext4                 \
        $lvmok{ }                          \
        lv_name{ LV-root }                 \
        method{ lvm }                      \
        format{ }                          \
        use_filesystem{ }                  \
        filesystem{ ext4 }                 \
        mountpoint{ / }                    \
        .                                  \

    40000 40000 40000 ext4                 \
        $lvmok{ }                          \
        lv_name{ LV-var }                  \
	    method{ lvm }                      \
        format{ }                          \
        use_filesystem{ }                  \
        filesystem{ ext4 }                 \
        mountpoint{ /var }                 \
        .                                  \

    5000 5000 5000 ext4                    \
        $lvmok{ }                          \
	    lv_name{ LV-var-log }              \
        method{ lvm }                      \
        format{ }                          \
        use_filesystem{ }                  \
        filesystem{ ext4 }                 \
        mountpoint{ /var/log }             \
        .                                  \

    10000 10000 10000 ext4                 \
        $lvmok{ }                          \
	    lv_name{ LV-opt }                  \
        method{ lvm }                      \
        format{ }                          \
        use_filesystem{ }                  \
        filesystem{ ext4 }                 \
        mountpoint{ /opt }                 \
        .                                  \

    1000 1000 1000 ext4                    \
        $lvmok{ }                          \
        lv_name{ LV-tmp }                  \
        method{ lvm }                      \
        format{ }                          \
        use_filesystem{ }                  \
        filesystem{ ext4 }                 \
        mountpoint{ /tmp }                 \
        .                                  \

    30000 52000 -1 ext4                    \
        $lvmok{ }                          \
	    lv_name{ LV-home }                 \
        method{ lvm }                      \
        format{ }                          \
        use_filesystem{ }                  \
        filesystem{ ext4 }                 \
        mountpoint{ /home }                \
        .                                  \

    64 512 1024 linux-swap                 \
        $lvmok{ }                          \
        lv_name{ LV-swap }                 \
        method{ swap }                     \
        format{ }                          \
        .   

d-i partman-lvm/confirm boolean true #On confirme le choix de partitionnement
d-i partman/default_filesystem string ext4 #On spécifie le système de fichiers par défaut
d-i partman-partitioning/confirm_write_new_label boolean true #On confirme nos choix
d-i partman/choose_partition select finish #On termine le partionnement
d-i partman/confirm boolean true #On confirme le choix
d-i partman/confirm_nooverwrite boolean true #On confirme la fin du partitionnement

#Installation de Grub
d-i grub-installer/bootdev string /dev/sda #On choisit sur quel périphérique installer GRUB
d-i grub-installer/only_debian boolean true #On spécifie l'installation de GRUB uniquement pour Debian

#On donne un mot de passe pour dévérouiller GRUB (même manière que pour le mot de passe utilisateur)
#Cette directive ne fonctionne pas, même avec un mot de passe en clair
d-i grub-installer/password-crypted password $1$op5aRH8X$9VPWbDDqZOTRr1jfz41a0

#Installation de paquets
tasksel tasksel/first multiselect ssh-server terminator #On donne les noms de paquets que le souhaite installer sur la machine
tasksel tasksel/remove multiselect desktop, print-server #On choisit de retirer les options d'installation par défaut 
d-i pkgsel/update-policy select safe-upgrade #On choisit le service de mise à jour à utiliser pour installer ces paquets
d-i pkgsel/include string sudo vim #On inclut des paquets supplémentaires
d-i popularity-contest popularity-contest/participate boolean false #On refuse de participer à l'analyse des paquets utilisés

#Eteindre le système
d-i finish-install/reboot_in_progress note #On confirme la fin de l'installation
d-i cdrom-detect/eject boolean true #On éjecte le CD
d-i debian-installer/exit/poweroff boolean true #On éteint la machine