{{tag>Xenial installation BROUILLON}}
----
====== Kickstart ======
Kickstart est un utilitaire permettant d'automatiser l'[[:installation|installation d'Ubuntu]] (et de ses variantes Kubuntu, Xubuntu, ...). Il facilite ainsi le déploiement d'un grand nombre de machines en offrant une installation rapide et une configuration personnalisable.
Kickstart est à l'origine le système d'automatisation d'installation de la société RedHat. Le système d'automatisation des distributions Debian et de ses dérivées est [[https://wiki.debian.org/fr/DebianInstaller/Preseed|Preseed]]. Réputé plus complexe que Kickstart, ce dernier ne bénéficie pas non plus d'un utilitaire graphique d'aide à la création des fichiers de description. La version de Kickstart présente dans Ubuntu et ses dérivées démultiplie les possibilités en permettant l'utilisation de commandes Preseed.
Le portage de Kickstart sur les distributions de Canonical est incomplet. Des instructions telles que la mise à jour de distribution (prise en charge par apt), l'exclusion de paquets ou la configuration de X sont ainsi ignorées.
Kickstart permet également l'exécution de scripts avant installation, et surtout après installation. Cette fonctionnalité ouvre encore les possibilités de personnalisation du système installé. Les scripts de fin d'installation peuvent être "chrootés" ou non, c'est-à-dire exécutés dans le système nouvellement installé (chroot) ou dans le système temporaire mis en place pour l'installation (nochroot).
===== Installation =====
Kickstart est un utilitaire inclus dans le système et ne nécessite pas d'installation. La création du fichier Kickstart (ks) qui pilotera l'installation du système d'exploitation sera la tâche principale de l'utilisateur.
===== Configuration =====
==== Utilitaire de génération de fichier ks ====
Il existe un petit utilitaire graphique permettant de définir rapidement les paramètres de base d'un fichier Kickstart. Pour cela, vous pouvez installer le paquet [[apt://system-config-kickstart|system-config-kickstart]]. Cependant, si cet utilitaire vous permettra de vous familiariser avec le système, il trouvera sans doute rapidement ses limites.
==== Exemple simple de fichier ks ====
Voici ce que donne un fichier ks généré avec peu d'options depuis l'utilitaire system-config-kickstart :
#Generated by Kickstart Configurator
#platform=x86
#System language
lang fr_FR
#Language modules to install
langsupport fr_FR
#System keyboard
keyboard fr
#System mouse
mouse
#System timezone
timezone Europe/Paris
#Root password
rootpw --disabled
#Initial user
user test --fullname "" --iscrypted --password $1$us6C7Q/3$asXQAUrZA89Ky.xGINj9K0
#Use text mode install
text
#Install OS instead of upgrade
install
#Use CDROM installation media
cdrom
#System bootloader configuration
bootloader --location=mbr
#Clear the Master Boot Record
zerombr yes
#Partition clearing information
clearpart --all --initlabel
#System authorization infomation
auth --useshadow --enablemd5
#Firewall configuration
firewall --disabled
#Do not configure the X Window System
skipx
==== Exemple avancé de fichier ks ====
Voici un exemple de fichier Kickstart un peu plus avancé, faisant notamment appel à des scripts complémentaires :
# Script Kickstart pour installation automatisée
# de (U|Xu|Ku)buntu 10.04 LTS par le réseau
#
# Options d'appel :
# machine=nom_de_machine (obligatoire)
# abandon de l'installation si non fourni
# utilisateur=nom_d_utilisateur (facultatif)
# = "Utilisateur_par_defaut" si non fourni
# login=login_utilisateur (facultatif)
# = $machine si non fourni
# mdp=mot_de_passe_utilisateur (facultatif)
# = "temporaire" si non fourni
# mdp_vino=mot_de_passe_prise_de_controle (facultatif)
# = $mdp si non fourni
# distrib=[ubuntu|xubuntu] (facultatif, ubuntu par défaut)
# aformat=non (facultatif, oui par défaut)
# reboot=oui (facultatif, non par défaut)
# redémarrage en fin d'installation si fourni
# Langue à utiliser pour l'installation et le système
lang fr_FR
# Modules de langue à installer
langsupport fr_FR
# Clavier
keyboard fr
# Souris
mouse
# Fuseau horaire
timezone --utc Europe/Paris
# Mot de passe Root (pas de mot de passe pour root par défaut sous Ubuntu)
rootpw --disabled
# Utilisateur de départ - config en section %pre
%include /tmp/user_conf
# Redémarrage après installation si demandé - config en section pre%
%include /tmp/reboot_conf
# Installation en mode texte
text
# Installation de l'OS plutôt que mise à jour
install
# Adresse du dépot local pour installation par le réseau
url --url http://mon_serveur_local/ubuntu/
# Configuration du chargeur de démarrage
bootloader --location=mbr
# Destruction des tables de partitions invalides
zerombr yes
# Supression puis définition des partitions si demandé
%include /tmp/part_conf
# Définition des options d'authentification pour le système
auth --useshadow --enablemd5
# Configuration du réseau
%include /tmp/network_conf
# Configuration du pare-feu
firewall --disabled
# Ne pas configurer X pour le système
skipx
# Installation des paquets supplémentaires
%packages --resolvedeps
%include /tmp/paquets_conf
%pre
# Lecture et mise en variables des paramètres d'installation
set -- `cat /proc/cmdline`
for I in $*; do case "$I" in *=*) eval $I;; esac; done
if [ -z "$machine" ]; then
echo "Variable 'machine' non renseignée !"
echo "Abandon de l'installation !"
echo "Redémarrage dans 5 secondes !"
sleep 5
reboot
fi
if [ -z "$utilisateur" ]; then
utilisateur="Utilisateur_par_defaut"
fi
if [ -z "$login" ]; then
login=$machine
fi
if [ -z "$mdp" ]; then
mdp="temporaire"
fi
if [ -z "$mdp_vino" ]; then
mdp_vino=$mdp
fi
if [ "$distrib" != "xubuntu" ]; then
distrib="ubuntu"
fi
if [ "$aformat" != "non" ]; then
aformat="oui"
fi
if [ "$reboot" != "oui" ]; then
reboot="non"
fi
echo "-------------------------------------------------"
echo " Résumé d\'installation"
echo "-------------------------------------------------"
echo " "
echo " "
echo "-------------------------------------------------"
echo " Nom de la machine = $machine"
echo " Nom de l\'utilisateur = $utilisateur"
echo " Login = $login"
echo " Mot de passe = $mdp"
echo " Mot de passe Vino = $mdp_vino"
echo " Distribution = $distrib"
echo " Formatage automatique = $aformat"
echo " Reboot après install. = $reboot"
echo "-------------------------------------------------"
echo " "
echo " "
echo "-------------------------------------------------"
echo " L\'installation écrasera irrémédiablement"
echo " toutes les données du disque !"
echo " "
echo " Redémarrer la machine avant 30 secondes"
echo " pour annuler l'installation !"
echo "--------------------------------------------------"
echo " "
echo " "
echo " "
sleep 30
# Configuration de l'utilisateur
echo "user $login --fullname $utilisateur --password $mdp" > /tmp/user_conf
# Gestion du reboot si demandé
if [ "$reboot" == "oui" ]; then
echo "reboot" > /tmp/reboot_conf
fi
# Gestion des partitions si demandé
if [ "$aformat" == "oui" ]; then
cat > /tmp/part_conf << eof
# Suppression des partitions du système
clearpart --all --initlabel
# Définition des partitions
part swap --size 1024 --fstype swap --asprimary
part / --size 1024 --fstype ext3 --asprimary --grow
eof
fi
# Configuration réseau (paramètre '--hostname=" ne fonctionne pas)
echo "network --bootproto dhcp --device=eth0" > /tmp/network_conf
# Configuration des paquets à installer
if [ "$distrib" == "xubuntu" ]; then
cat > /tmp/paquets_conf << eof
@ xubuntu-desktop
bsd-mailx
cups-pdf
icedtea6-plugin
ntp
numlockx
ocsinventory-agent
openoffice.org
smbfs
ssh
ssmtp
#ttf-mscorefonts-installer
vino
eof
else
cat > /tmp/paquets_conf << eof
@ ubuntu-desktop
bsd-mailx
cups-pdf
icedtea6-plugin
ntp
ocsinventory-agent
smbfs
ssh
ssmtp
thunderbird-locale-fr
#ttf-mscorefonts-installer
eof
fi
%post --nochroot
# Reprise de la définition des variables non renseignées car non conservées
if [ -z "$utilisateur" ]; then
utilisateur="Utilisateur_par_defaut"
fi
if [ -z "$login" ]; then
login=$machine
fi
if [ -z "$mdp" ]; then
mdp="temp"
fi
if [ -z "$mdp_vino" ]; then
mdp_vino=$mdp
fi
if [ "$distrib" != "xubuntu" ]; then
distrib="ubuntu"
fi
if [ "$reboot" != "oui" ]; then
reboot="non"
fi
# Changement de serveur du temps (selon nom de la machine)
case "$machine" in
t1* | t2*)
sed -i 's/server ntp.ubuntu.com/server mon_serveur_temps_local/g' /target/etc/ntp.conf
;;
esac
# Changement du port ssh
sed -i 's/Port 22/Port 1234/g' /target/etc/ssh/sshd_config
# Mise en place de l'auto-login
if [ "$distrib" == "xubuntu" ]; then
cat > /target/etc/gdm/custom.conf << eof
[daemon]
TimedLoginEnable=false
AutomaticLoginEnable=true
TimedLogin=$login
AutomaticLogin=$login
TimedLoginDelay=30
DefaultSession=xubuntu
eof
else
cat > /target/etc/gdm/custom.conf << eof
TimedLoginEnable=false
AutomaticLoginEnable=true
TimedLogin=$login
AutomaticLogin=$login
TimedLoginDelay=30
DefaultSession=gnome
eof
fi
# Configuration de ssmtp
cat > /target/etc/ssmtp/ssmtp.conf << eof
root=admin@mon_domaine.com
mailhub=mon_serveur_de_mail
rewriteDomain=mon_domaine.com
hostname=$machine
FromLineOverride=YES
eof
cat > /target/etc/ssmtp/revalias << eof
root:$machine@mon_domaine.com:mon_serveur_de_mail
admin:$machine@mon_domaine.com:mon_serveur_de_mail
$machine:$machine@mon_domaine.com:mon_serveur_de_mail
eof
# Suppression des paquets non souhaités
if [ "$distrib" == "xubuntu" ]; then
chroot /target apt-get -y remove abiword-common
chroot /target apt-get -y remove gnome-games-common
chroot /target apt-get -y remove gnumeric-common
chroot /target apt-get -y remove pidgin-data
chroot /target apt-get -y remove transmission-common
chroot /target apt-get -y remove xchat-common
else
chroot /target apt-get -y remove empathy-common
chroot /target apt-get -y remove gbrainy
chroot /target apt-get -y remove gnome-games-common
chroot /target apt-get -y remove gwibber-service
chroot /target apt-get -y remove pidgin
chroot /target apt-get -y remove pitivi
chroot /target apt-get -y remove transmission-common
fi
# Modification des dépots
# suppression des dépots de sources
sed -i 's/deb-src/#deb-src/g' /target/etc/apt/sources.list
case "$machine" in
t1* | t2*)
# passage des dépots sécurité sur mon_serveur_local
sed -i 's/security.ubuntu.com/mon_serveur_local/g' /target/etc/apt/sources.list
;;
*)
# passage des dépots sur ubuntu
sed -i 's/mon_serveur_local/fr.archive.ubuntu.com/g' /target/etc/apt/sources.list
;;
esac
# ajout d'un dépot supplémentaire
case "$machine" in
t1* | t2* | t3*)
echo 'deb http://mon_serveur_local/mon_programme/ ./' >> /target/etc/apt/sources.list
esac
#----------------------------------------------
# Préparation des scripts de fin d'installation
# Ces scripts seront exécutés au premier
# redémarrage de la machine
# fin_install_root appelle fin_install_user
#----------------------------------------------
# Création du fichier 'user'
if [ "$distrib" == "xubuntu" ]; then
cat > /target/usr/bin/fin_install_user << eof
#!/bin/bash
# Configuration de Vino
# La définition du mot de passe doit s'effectuer
# avant l'autorisation de prise de controle
gconftool-2 -s -t string /desktop/gnome/remote_access/vnc_password $(echo -n $mdp_vino | base64)
gconftool-2 -s -t list --list-type string /desktop/gnome/remote_access/authentication_methods '[vnc]'
gconftool-2 -s -t bool /desktop/gnome/remote_access/prompt_enabled false
gconftool-2 -s -t bool /desktop/gnome/remote_access/enabled true
#
# Création du fichier de lancement de Vino
mkdir /home/$login/.config
mkdir /home/$login/.config/autostart
cat > /home/$login/.config/autostart/Vino.desktop << eof
[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=Vino
Comment=Vnc Server
Exec=/usr/lib/vino/vino-server
StartupNotify=false
Terminal=false
Hidden=false
eof
echo "eof" >> /target/usr/bin/fin_install_user
cat >> /target/usr/bin/fin_install_user << eof
# Création du fichier pour supprimer la notification de mise à jour système
cat > /home/$login/.config/autostart/update-notifier.desktop << eof
[Desktop Entry]
Hidden=true
eof
echo "eof" >> /target/usr/bin/fin_install_user
else
cat > /target/usr/bin/fin_install_user << eof
#!/bin/bash
# Configuration de l'interface
# Désactivation des effets visuels
gconftool-2 -s -t string /desktop/gnome/session/required_components/windowmanager 'metacity'
# Modification des polices d'affichage
gconftool-2 -s -t string /desktop/gnome/interface/font_name 'Sans 8'
gconftool-2 -s -t string /desktop/gnome/interface/document_font_name 'Sans 8'
gconftool-2 -s -t string /desktop/gnome/interface/monospace_font_name 'Monospace 8'
gconftool-2 -s -t string /apps/nautilus/preferences/desktop_font 'Sans 8'
gconftool-2 -s -t string /apps/metacity/general/titlebar_font 'Sans Bold 8'
# Modification du thème
gconftool-2 -s -t string /apps/metacity/general/theme 'Radiance'
gconftool-2 -s -t string /desktop/gnome/interface/gtk_theme 'Radiance'
gconftool-2 -s -t string /desktop/gnome/interface/icon_theme 'ubuntu-mono-light'
gconftool-2 -s -t string /apps/metacity/general/button_layout 'menu:minimize,maximize,close'
# Configuration de la mise en veille
#gconftool-2 -s -t int /apps/gnome-screensaver/idle_delay 5
gconftool-2 -s -t bool /apps/gnome-screensaver/lock_enabled false
# Configuration du nombre d'espaces de travail
gconftool-2 -s -t int /apps/metacity/general/num_workspaces 1
# Configuration de Vino
# La définition du mot de passe doit s'effectuer
# avant l'autorisation de prise de controle
gconftool-2 -s -t string /desktop/gnome/remote_access/vnc_password $(echo -n $mdp_vino | base64)
gconftool-2 -s -t list --list-type string /desktop/gnome/remote_access/authentication_methods '[vnc]'
gconftool-2 -s -t bool /desktop/gnome/remote_access/prompt_enabled false
gconftool-2 -s -t bool /desktop/gnome/remote_access/enabled true
eof
fi
# Création du fichier 'root'
cat > /target/usr/bin/fin_install_root << eof
#!/bin/bash
# Appel du script 'user'
su - $login -c /usr/bin/fin_install_user
# Effacement du script 'user'
rm /usr/bin/fin_install_user
# Effacement du script de fin d'installation dans cron
crontab -l > /usr/bin/tempcron
sed -i '/^@reboot /d' /usr/bin/tempcron
# ajout de la sauvegarde
case "$machine" in
t1* | t2*)
# Génération d'une heure aléatoire entre (environ) 9h et 15h59
heure=\\\\$(echo "scale=0;(\\\\$RANDOM/4700)+9" | bc)
minute=\\\\$(echo "scale=0;(\\\\$RANDOM/550)" | bc)
echo "\\\\$minute \\\\$heure * * * /usr/bin/mon_script_sauvegarde start" >> /usr/bin/tempcron
esac
crontab /usr/bin/tempcron
# Effacement du script de modification de cron
rm /usr/bin/tempcron
/sbin/reboot
eof
#--------------------------------------
# Fin des scripts de fin d'installation
#--------------------------------------
# Insertion des points de montage des partages
case "$machine" in
t1*)
serveur="mon_serveur_1"
;;
t2*)
serveur="mon_serveur_2"
;;
esac
case "$machine" in
t1* | t2*)
mkdir /target/mnt/$serveur
mkdir /target/mnt/$serveur/divers
mkdir /target/mnt/$serveur/sauvegarde
echo "//$serveur/divers /mnt/$serveur/divers cifs auto,ro,password=,iocharset=utf8,codepage=cp850 0 0" >> /target/etc/fstab
echo "//$serveur/sauvegarde /mnt/$serveur/sauvegarde cifs noauto,rw,credentials=/etc/smb_sauvegarde,iocharset=utf8,codepage=cp850 0 0" >> /target/etc/fstab
# Création du fichier de login pour sauvegarde
cat > /target/etc/smb_sauvegarde << eof
username=user_pour_sauvegarde
password=mot_de_passe
eof
# Changement des droits du fichier
chmod 600 /target/etc/smb_sauvegarde
chown root:root /target/etc/smb_sauvegarde
# Ajout du script de sauvegarde
cat > /target/usr/bin/mon_script_sauvegarde << eof
#!/bin/bash
# ***** script de sauvegarde non détaillé ici *****
eof
# Ajout du fichier des exclusions (sauvegarde)
cat > /target/etc/mon_script_sauve_excl << eof
- cache*/
- Cache*/
- .cache*/
- .Cache*/
- /Examples
- /.gvfs
- lock
- /.thumbnails/
- trash/
- Trash/
- /.kde/
- *.msf
- *.*~
eof
# changement des droits du script de sauvegarde
chmod 700 /target/usr/bin/mon_script_sauvegarde
chown root:root /target/usr/bin/mon_script_sauvegarde
esac
# Changement des droits des scripts finaux
chmod 777 /target/usr/bin/fin_install_*
# Insertion du script final 'root' dans cron
chroot /target crontab -l > /target/usr/bin/tempcron
chroot /target echo "@reboot /usr/bin/fin_install_root" >> /target/usr/bin/tempcron
chroot /target crontab /usr/bin/tempcron
# Renommage de la machine
sed -i "s/kickseed/$machine/g" /target/etc/hostname
sed -i "s/kickseed/$machine/g" /target/etc/hosts
# Configuration de Ocsinventory
echo 'server=mon_serveur_local' > /target/etc/ocsinventory/ocsinventory-agent.cfg
# Envoi d'un mail de fin d'installation
chroot /target echo "Fin d'installation de la machine $machine de $utilisateur ($login)" | chroot /target mail -s "Fin d'installation de $machine" admin@mon_domaine.com
===== Utilisation =====
==== Déploiement par le réseau ====
L'installation d'Ubuntu (ou de ses variantes) par le réseau, avec ou sans connexion internet, offre de nombreux intérêts, dont celui d'obtenir une distribution parfaitement à jour dès la fin de l'installation, ce qui sera plus difficilement le cas avec un CD-ROM.
=== Éléments nécessaires ===
Pour parvenir à réaliser une installation par le réseau, il est nécessaire d'avoir un serveur [[netboot|DNS, DHCP, TFTP]] et HTTP ([[lighttpd|Lighttpd]] ou [[apache2|Apache 2]] par exemple). Ceux-ci n'ont pas besoin d'être regroupés sur un seul serveur.
=== Déroulement de l'installation ===
Voici le déroulement d'une installation par le réseau :
- la nouvelle machine démarre sur le réseau (en mode PXE) et demande au serveur DHCP une adresse IP et les informations qui lui permettront de trouver son image de boot
- la nouvelle machine récupère sur le serveur tftp son image de boot
- la nouvelle machine prend sur le serveur http le fichier Kickstart
- la nouvelle machine effectue son installation en récupérant les paquets sur un serveur [[tutoriel:creer_un_miroir_de_depot|miroir local]] ou distant (l'accès internet est alors indispensable dans ce dernier cas).
Pour les deux premières étapes, vous trouverez de précieux compléments sur la page traitant de [[netboot|netboot]].
=== Détails de configuration ===
== Options dhcp pour un boot réseau ==
Pour que la machine qui va démarrer sur le réseau puisse trouver son image de boot, voici les instructions qui doivent figurer dans le serveur DHCP (fichier /etc/dhcpd.conf ou équivalent) :
# définit l'adresse ip du serveur tftp sur laquelle se trouve l'image de boot
next-server 192.168.xxx.xxx;
# chemin vers le répertoire racine du serveur tftp
option root-path "[répertoire racine du serveur tftp]";
# nom de l'image de boot
filename "pxelinux.0";
== Obtenir un clavier français au menu de boot ==
Ajouter la ligne :
KBDMAP fr.kbd
au début du fichier [répertoire racine du serveur tftp]/ubuntu-installer/i386/boot-screens/menu.cfg
et copier le fichier fr.kbd dans le répertoire racine du serveur tftp. Si vous ne trouvez pas ce fichier, une version est disponible sur [[https://www.guim.info/dokuwiki/debian/pxelinux#passer_le_clavier_en_francais|ce site]].
== Ajout du fichier Kickstart au menu de boot ==
Dans le fichier [répertoire racine du serveur tftp]/ubuntu-installer/i386/boot-screens/text.cfg
remplacez la ligne
label install
[...]
append vga=normal initrd=ubuntu-installer/i386/initrd.gz -- quiet
par (si le serveur tftp est également le serveur http)
label install
[...]
append vga=normal initrd=ubuntu-installer/i386/initrd.gz ks=/repertoire/fichier_ks.cfg -- machine=
ou par (si les serveurs tftp et http sont sur deux machines différentes)
label install
[...]
append vga=normal initrd=ubuntu-installer/i386/initrd.gz ks=http://ip_serveur_http/repertoire/fichier_ks.cfg -- machine=
Une fois au menu de boot, vous pourrez alors sélectionner "install" puis taper pour compléter la ligne avec les variables de votre script (ici, machine est la première variable utilisée dans l'[[kickstart#exemple_avance_de_fichier_ks|exemple avancé]]).
==== Personnalisation d'un CD-ROM ====
Pour personnaliser un CD-ROM d'installation, vous devez [[http://www.ubuntu.com/|télécharger une image iso]] d'une distribution, la modifier pour y inclure les informations relatives à Kickstart (modification du menu, insertion du fichier Kickstart), générer une nouvelle iso spécifique puis la graver. Vous trouverez des informations plus détaillées de cette procédure dans la [[http://www.ubuntu.com/system/files/u1/AutomatedDeploymentsWP-20090126.pdf|documentation anglaise de Kickstart pour Ubuntu]]. FIXME
===== Voir aussi =====
* [[http://www.ubuntu.com/system/files/u1/AutomatedDeploymentsWP-20090126.pdf|Documentation de Kickstart pour Ubuntu (anglais) - format pdf - Canonical]]
* Discussion [[https://forum.ubuntu-fr.org/viewtopic.php?pid=3576250|"Installation automatisée de (U|Ku|Xu)buntu en réseau avec Kickstart"]] sur le forum ubuntu-fr
* [[:tutoriel:installer_ubuntu_sur_plusieurs_pc_en_cluster]]
* [[https://help.ubuntu.com/community/Installation/Netboot|Documentation sur l'installation par Netboot (anglais) - Communauté Ubuntu anglophone]]
* [[https://www.guim.info/dokuwiki/debian/pxelinux|Documentation sur le boot PXE - guim.info]]
* [[https://help.ubuntu.com/lts/installation-guide/amd64/apb.html|Documentation de Preseed pour Ubuntu (anglais) - Canonical]]
----
//Contributeurs : [[utilisateurs:m2nis]]//