Aymeric / APLU(.FR) - Mot-clé - autoSite d'Aymeric (ou d'aplufr) pour parler de Linux, de technique.. enfin de tout et surtout de n'importe quoi !2023-09-19T19:41:16+02:00Aymericurn:md5:9a770342f58fde945e9ce016459f8f12DotclearInstaller automatiquement Ubuntu (ou Debian)urn:md5:25bc548698d5a82b454881d10aeef1d12014-11-11T11:11:00+01:002017-07-21T20:54:16+02:00APLUsysadminautodebianinstallationlinuxnetbootpxesysadminubuntu <p>Le but de la manipulation va être de configurer un système Linux (ici Debian) pour installer de manière totalement automatisée une Ubuntu Trusty 64 bits.<br />
<br />
L'utilisation typique est pour un GUL qui souhaite installer très facilement plusieurs PC qui serviront pour faire des démonstrations.</p>
<h2>Prérequis</h2>
<p>Il faut une machine avec deux connexions réseau, dont au moins une filaire et un peu moins de 100 Go pour un miroir complet d'Ubuntu pour une architecture (32 bits ou 64 bits).</p>
<p>Pour la partie système, j'ai choisi d'installer Debian avec XFCE et l'installation de ce dernier n'est pas l'objet de ce billet.</p>
<p>Avoir une connaissance du fonctionnement d'un système Linux et de l'utilisation de la ligne de commande.</p>
<p>Une fois le système installé, on a besoin de quelques outils supplémentaires :</p>
<ul>
<li><q>dnsmasq</q> (peut être remplacé par dhcpd + tftpd + bind9, mais c'est beaucoup plus simple avec dnsmasq) ;</li>
<li><q>nginx</q> (ou n'importe quel serveur web) ;</li>
<li><q>apt-mirror</q> ;</li>
<li><q>syslinux-common</q> ;</li>
<li><q>pxelinux</q> ;</li>
<li><q>ntp</q> (démon) ;</li>
<li><q>apt-cacher-ng</q> (facultatif).</li>
</ul>
<h2>Configuration d'apt-mirror</h2>
<p><q>apt-mirror</q> va servir à faire un miroir local d'apt pour fournir les paquets sans connexion internet.</p>
<p>Le fichier de configuration d'apt-mirror est situé ici <code>/etc/apt/mirror.list</code>, par défaut apt-mirror utilise l'architecture du système, dans notre cas le but est d'avoir un miroir d'Ubuntu 14.04 64 bits, et le système installé est une Debian Jessie 32 bits. Le fichier de configuration a donc été modifié pour ressembler à ça :</p>
<pre>
set defaultarch amd64
set _tilde 0
deb http://archive.ubuntu.com/ubuntu trusty main multiverse universe restricted
deb http://archive.ubuntu.com/ubuntu trusty-updates main multiverse universe restricted
deb http://archive.ubuntu.com/ubuntu trusty-security main multiverse universe restricted
#needed for netboot install
deb http://archive.ubuntu.com/ubuntu trusty main/debian-installer restricted/debian-installer universe/debian-installer multiverse/debian-installer
deb http://archive.ubuntu.com/ubuntu trusty-updates main/debian-installer restricted/debian-installer universe/debian-installer multiverse/debian-installer
deb http://security.ubuntu.com/ubuntu trusty-security main multiverse universe restricted
#avoid timeout with netboot autoconfiguring security
deb-i386 http://security.ubuntu.com/ubuntu trusty-security main multiverse universe restricted
deb-i386 http://archive.ubuntu.com/ubuntu trusty-security main multiverse universe restricted</pre>
<p>D'autres options sont possibles, comme spécifier où stocker les paquets, le nombre de téléchargements à effectuer en parallèle, pour les détails voir la documentation d'apt-mirror.</p>
<p>Pour générer le miroir, il suffit de lancer la commande <code>apt-mirror</code>, en root. Il est possible d'arrêter la commande à tout moment, relancer la commande pour reprendre les téléchargements.</p>
<h2>Configuration de l'interface réseau en IP statique</h2>
<p>Avant d'aller plus loin, il est important d'identifier quelle interface réseau va servir à effectuer les installations, ici, il s'agit de l'interface eth0 et le réseau <q>192.168.2.0/24</q> sera utilisé.</p>
<p>Voici ce que l'on positionne dans le fichier /etc/network/interfaces :</p>
<pre>
allow-hotplug eth0
iface eth0 inet static
address 192.168.2.1
netmask 255.255.255.0
auto eth0</pre>
<p>Pour activer le port forwarding (permet de laisser la machine accéder à Internet lorsqu'elle est sur le réseau filaire), cela se fait avec la commande suivante qui a été ajoutée dans le fichier <code>/etc/rc.local</code> afin que le paramétrage soit effectué au démarrage de la machine :</p>
<pre>
iptables -t nat -A POSTROUTING -j MASQUERADE -s 192.168.2.0/24</pre>
<p>Et enfin, en ajoutant l'option suivante dans le fichier <code>/etc/sysctl.conf</code></p>
<pre>
net.ipv4.ip_forward=1</pre>
<h2>Configuration de dnsmasq</h2>
<p>DNSmasq va servir à plusieurs choses :</p>
<ol>
<li>Serveur DHCP ;</li>
<li>Serveur TFTP ;</li>
<li>Serveur DNS.</li>
</ol>
<p>Le fichier de configuration de dnsmasq est ici : <code>/etc/dnsmasq.conf</code>.<br />
Dans un premier temps, on va configurer dnsmasq pour ne fonctionner que sur l'interface réseau qui nous intéresse, ici eth0.</p>
<pre>
interface=eth0
except-interface=wlan0
bind-interfaces</pre>
<p>Ensuite, on active la partie DHCP</p>
<pre>
dhcp-range=192.168.2.20,192.168.2.80,1h
dhcp-option=option:router,192.168.2.1
dhcp-boot=pxelinux.0
dhcp-authoritative
domain=toulibre.org</pre>
<p>Puis TFTP</p>
<pre>
enable-tftp
tftp-root=/srv/tfpd
tftp-no-blocksize</pre>
<p>Et enfin, la partie DNS</p>
<pre>
address=/security.ubuntu.com/192.168.2.1
address=/local.ubuntu.com/192.168.2.1
address=/boot.ubuntu.com/192.168.2.1</pre>
<p>Ici, on effectue un <q>DNS menteur</q> sur la zone ubuntu.com, ce n'est pas forcément très heureux mais ça permet d'éviter d'aller sur internet pour des ressources que l'on peut servir localement.<br />
De plus, on « fabrique » deux sous-domaines qui n'existent pas chez ubuntu.com, pour local. et boot. on pouvait aussi prendre un domaine bidon comme chez.moi.</p>
<h2>Configuration de nginx</h2>
<p>On va activer nginx pour servir trois domaines, les trois que l'on usurpe à ubuntu.com.</p>
<p>Voici donc ce que l'on va placer dans <code>/etc/nginx/sites-available/defaults</code> :</p>
<pre>
server {
listen 80 default_server;
root /srv/apt/archive.ubuntu.com/;
index index.html index.htm;
server_name archive.ubuntu.com local.ubuntu.com;
location / {
try_files $uri $uri/ =404;
}
}
server {
server_name security.ubuntu.com;
root /srv/apt/security.ubuntu.com;
location / {
try_files $uri $uri/ =404;
}
}
server {
server_name boot.ubuntu.com;
root /srv/boot/;
location / {
try_files $uri $uri/ =404;
}
}</pre>
<p>Il ne reste plus qu'à faire des liens symboliques pour rendre les fichiers d'apt-mirror visibles par nginx.</p>
<pre>
mkdir -p /srv/apt/
ln -s /var/spool/apt-mirror/mirror/archive.ubuntu.com/ /srv/apt/archive.ubuntu.com
ln -s /var/spool/apt-mirror/mirror/archive.ubuntu.com/ /srv/apt/security.ubuntu.com</pre>
<h2>Configuration de la partie TFTP</h2>
<p>Commençons par créer le dossier</p>
<pre>
mkdir -p /srv/tftp
cd /srv/tftp</pre>
<p>Puis par copier les fichiers de base</p>
<pre>
cp /usr/lib/syslinux/modules/bios/menu.c32 .
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 . #??
cp /usr/lib/PXELINUX/pxelinux.0 .</pre>
<p>On télécharge l'image netboot fournie par Ubuntu</p>
<pre>
wget http://archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux
wget http://fr.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz</pre>
<p>Et on termine de configurer le menu de boot PXE :</p>
<pre>
mdkir pxelinux.cfg
cat pxelinux.cfg/default << EOF
default menu.c32
menu "install auto, Toulibre"
label autoboot
menu label Ubuntu Trusty 64 bits fullauto
menu default
timeout 30
kernel linux
append initrd=initrd.gz auto url=http://boot.ubuntu.com/preseed.cfg vga=788 debian-installer/locale=fr_FR console-setup/ask_detect=false console-setup/layoutcode=fr keyboard-configuration/layoutcode=fr keyboard-configuration/variantcode=latin9
EOF</pre>
<p>Ici, on a ajouté quelques options sur la ligne <em>append</em>, voici le détail :</p>
<ul>
<li>auto : installation automatique, suivre les informations du fichier preseed ;</li>
<li>url : où trouver le fichier preseed ;</li>
<li>vga : permet d'avoir une résolution d'écran lisible, peut être totalement supprimé sans problème ;</li>
<li>debian-installer, console-setup et keyboard-configuration : permet de répondre aux questions relatives à la disposition du clavier qui sont demandées avant la lecture du fichier preseed.cfg.</li>
</ul>
<h2>Configuration du système preseed</h2>
<p>Le fichier preseed contient les réponses dont a besoin l'installeur pour fonctionner. S'il ne trouve pas la réponse dans le fichier, alors il demande à l'utilisateur.</p>
<pre>
apt-mirror-setup apt-setup/backports boolean true
apt-mirror-setup apt-setup/extras boolean true
apt-mirror-setup apt-setup/multiverse boolean true
apt-mirror-setup apt-setup/partner boolean true
apt-mirror-setup apt-setup/restricted boolean true
apt-mirror-setup apt-setup/universe boolean true
apt-setup-udeb apt-setup/services-select multiselect security
d-i apt-setup/backports boolean true
d-i apt-setup/restricted boolean true
d-i apt-setup/universe boolean true</pre>
<p>Ces différentes options activent les dépôts apt que l'on souhaite utiliser sur la machine.</p>
<pre>
clock-setup clock-setup/ntp boolean true
clock-setup clock-setup/utc boolean true
d-i clock-setup/ntp-server string local.ubuntu.com
tzsetup-udeb time/zone string Europe/Paris
d-i time/zone string Europe/Paris</pre>
<p>Questions relatives à l'heure, synchronisation ntp et horloge interne en UTC.</p>
<pre>
d-i cdrom-detect/eject boolean false
d-i finish-install/reboot_in_progress note</pre>
<p>Faut-il éjecter le cd à la fin de l'installation, non, car il s'agit d'une install réseau :) (permet aussi de laisser le PC redémarrer automatiquement).</p>
<pre>
d-i console-setup/ask_detect boolean false
d-i console-setup/detect detect-keyboard
d-i console-setup/detected note
d-i debconf/language string fr
d-i debian-installer/country string FR
d-i debian-installer/language string fr
d-i debian-installer/locale select fr_FR.UTF-8
d-i keyboard-configuration/layout select Français
d-i keyboard-configuration/layout select Français
d-i keyboard-configuration/modelcode string pc105
d-i keyboard-configuration/model select
d-i keyboard-configuration/variantcode string latin9
d-i keyboard-configuration/variant select Français - Français (variante obsolète)
d-i keyboard-configuration/variant select Français - Français (variante obsolète)
d-i keyboard-configuration/xkb-keymap select fr(latin9)
d-i localechooser/languagelist select fr
d-i localechooser/preferred-locale select fr_FR.UTF-8
d-i localechooser/shortlist select FR
d-i localechooser/shortlist select FR</pre>
<p>Permet de configurer le clavier et la langue, certaines options ont déjà été fournies au moment du boot et sont donc renseignées deux fois, mais ça n'a aucun impact.</p>
<pre>
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true</pre>
<p>Installation de grub automatique et réponses aux questions pour savoir s'il n'y a qu'un seul système ou plusieurs.</p>
<pre>
d-i mirror/country string manual
d-i mirror/http/directory string /ubuntu
d-i mirror/http/hostname string local.ubuntu.com
d-i mirror/http/proxy string </pre>
<p>Définition du miroir qui va être utilisé, on sélectionne donc le miroir local (qui pointe sur notre PC).</p>
<pre>
d-i hw-detect/load_firmware boolean true</pre>
<p>Chargement automatique des firmwares pour faire fonctionner certains périphériques (carte réseau notamment).</p>
<pre>
d-i msttcorefonts/accepted-mscorefonts-eula boolean true
d-i msttcorefonts/present-mscorefonts-eula note
ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula boolean true</pre>
<p>Permet d'installer automatiquement les polices de compatibilité microsoft (package ttf-mscorefont)</p>
<pre>
d-i netcfg/choose_interface select auto</pre>
<p>Sélectionne automatiquement la carte réseau, peut ne pas fonctionner sur une machine avec plusieurs cartes réseau.</p>
<pre>
d-i partman-auto/choose_recipe select atomic
d-i partman-auto/disk string /dev/sda
d-i partman-auto-lvm/guided_size string max
d-i partman-auto/method string regular
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman/default_filesystem string ext4
d-i partman-lvm/confirm boolean true
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-partitioning/confirm_write_new_label boolean true</pre>
<p>Partitionnement du disque dur, ici on demande d'effectuer un partitionnement de manière automatique avec une seule partition en ext4, utilisant tout le disque /dev/sda.<br />
Pas de présence de RAID logiciel ou LVM.</p>
<p><strong>Attention donc car l'installeur ne cherchera pas à savoir si ce qu'il y a sur le disque est (était) important !</strong></p>
<pre>
d-i passwd/root-login boolean false
d-i passwd/user-fullname string Toulibre Demo
d-i passwd/username string toulibre
d-i passwd/user-password-again password toulibre
d-i passwd/user-password password toulibre
d-i user-setup/allow-password-weak boolean true
d-i user-setup/encrypt-home boolean false</pre>
<p>Configuration de l'utilisateur avec le mot de passe, il est possible de fournir une chaîne chiffrée pour le mot de passe (afin de ne pas l'écrire en clair dans ce fichier)</p>
<pre>
d-i pkgsel/include string openssh-server build-essential vim htop libreoffice firefox thunderbird gimp eog ntp screen vlc audacity language-pack-fr openshot ubuntu-restricted-extras
d-i pkgsel/language-packs multiselect fr
tasksel tasksel/first multiselect ubuntu-desktop, standard</pre>
<p>Sélection des tâches à effectuer et paquets à installer, ubuntu-desktop permet d'avoir un environnement standard, ensuite on installe quelques logiciels que l'on souhaite avoir en plus.</p>
<pre>
pkgsel pkgsel/update-policy select unattended-upgrades
popularity-contest popularity-contest/participate boolean false </pre>
<p>Unattended upgrades permet au système de faire les mises à jour silencieusement (cf <a href="https://help.ubuntu.com/community/AutomaticSecurityUpdates" hreflang="en">https://help.ubuntu.com/community/AutomaticSecurityUpdates</a>).<br />
L'autre ligne permet de répondre que l'on ne souhaite pas participer à l'évaluation (anonyme) de popularité des logiciels.</p>
<pre>
d-i preseed/late_command string in-target wget --no-proxy -O/tmp/postconf.sh http://boot.ubuntu.com/postconf.sh; in-target bash /tmp/postconf.sh</pre>
<p>Permet d’exécuter un script de post-configuration.</p>
<p>C'est tout pour le fichier preseed.</p>
<h2>Script de post configuration</h2>
<p>Le script de post-conf est facultatif, mais il permet d'effectuer quelques dernières modif sur le système avant de le relancer.</p>
<pre>
#!/bin/bash
#update ubuntu using apt-cacher-ng, not impacted by dnsmasq jobs on secu.
echo 'Acquire::http::Proxy "http://192.168.2.1:3142/";' > /etc/apt/apt.conf
cat << EOF > /etc/apt/sources.list
deb http://fr.archive.ubuntu.com/ubuntu trusty main universe multiverse restricted
deb http://fr.archive.ubuntu.com/ubuntu trusty-updates main universe multiverse restricted
deb http://fr.archive.ubuntu.com/ubuntu trusty-backports main universe multiverse restricted
deb http://security.ubuntu.com/ubuntu trusty-security main universe multiverse restricted
deb http://archive.canonical.com/ubuntu trusty partner
deb http://extras.ubuntu.com/ubuntu trusty main
EOF</pre>
<pre>
apt-get update
apt-get -y dist-upgrade
#reset apt-proxy to a null value, allow end-user to install apps
rm -f /etc/apt/apt.conf</pre>
<p>Ces quelques lignes permettent de mettre à jour l'installation en allant chercher sur internet (cas où le miroir local de ne serait pas à jour), il remet aussi les lignes du sources.list sur des valeurs qui existent.</p>
<pre>
#### fixubuntu
#amazon
apt-get -y purge unity-webapps-common
#script from fixubuntu.com
wget http://boot.ubuntu.com/fixubuntu.sh -O/tmp/fixubuntu.sh
su - toulibre -c '/bin/bash /tmp/fixubuntu.sh' &>/var/log/fixubuntu.log
if ! grep -q "127.0.0.1 productsearch.ubuntu.com" /etc/hosts; then
echo -e "\n127.0.0.1 productsearch.ubuntu.com" | tee -a /etc/hosts >/dev/null
fi
exit 0</pre>
<p>Enfin, cette partie supprime la présence d'Amazon sur le système.</p>