247 lines
7.5 KiB
Bash
Executable File
247 lines
7.5 KiB
Bash
Executable File
#!/bin/sh
|
||
################################################################################################
|
||
##
|
||
## Nom: gen_iso.sh
|
||
##
|
||
## Licence: Creative Commons
|
||
##
|
||
## Version : 0.3
|
||
##
|
||
## Comportement: Recréer une image iso de Debian businesscard en ajoutant des configuration
|
||
## personnelles (preseed.cfg, boot automatique, installation automatique, ...)
|
||
##
|
||
## Dépendances:
|
||
## - genisoimage
|
||
## - Être lancé en root
|
||
##
|
||
##
|
||
################################################################################################
|
||
##
|
||
## Date de création: 30-08-2011
|
||
##
|
||
## Auteur: Gardouille
|
||
## Inspiré par le script de Yves Mettier
|
||
##
|
||
## Dernière modifications:
|
||
## 30-08-2011: -
|
||
# **********************************************************************************************
|
||
##
|
||
## 29/12/2011 - 0.3:
|
||
## - Proposition de modifier l'utilisateur principal
|
||
## - Téléchargement de la dernière image iso Debian Testing Businesscard
|
||
## - Vérification de la date de l'iso (si présente):
|
||
## - Aujourd'hui: l'image iso est réutilisée pour ce script
|
||
## - Antérieure: l'image iso est supprimée puis retéléchargée
|
||
## 13/09/2011 - 0.2:
|
||
## - Proposition à l'utilisateur de modifier les variables hostname et domainname
|
||
## - Vérification que le script se lance en root
|
||
## - Vérification que genisoimage est bien installé ou proposition d'installation
|
||
# **********************************************************************************************
|
||
##
|
||
## À modifier:
|
||
## - Ajouter un mode full silent
|
||
## - Proposer une liste de noyau en fonction de la distribution choisie
|
||
## - Ajouter le fichier de logs pour les echo
|
||
## - Ajouter des valeurs par défaut pour les variables
|
||
##
|
||
##
|
||
################################################################################################
|
||
|
||
|
||
|
||
# **********************************************************************************************
|
||
#
|
||
# Variables globales
|
||
#
|
||
# -----------------------------------------------------------
|
||
fichier_log="/tmp/gen_iso.log"
|
||
if [ -f ${fichier_log} ]; then
|
||
rm -f ${fichier_log}
|
||
fi
|
||
|
||
PREFIX=/tmp/debian
|
||
# Emplacement temporaire
|
||
TMPDIR=${PREFIX}/tmp
|
||
# Emplacement temporaire où l'iso originale sera montée
|
||
MNTDIR=${TMPDIR}/mnt
|
||
|
||
# Emplacement qui contient les données à ajouter (preseed, isolinux) ainsi que la future image iso
|
||
DATADIR=/media/udata/config_debian/sid
|
||
# Emplacement où sera stocké le contenu de la nouvelle image iso
|
||
NEWISODIR=${TMPDIR}/new_debian_businesscard
|
||
# Fichier preseed.cfg
|
||
PRESEEDFILE=${DATADIR}/preseed.cfg
|
||
# Fichier image iso originale
|
||
DEBIANISO=${DATADIR}/debian-testing-i386-businesscard.iso
|
||
# Adresse de l'iso Debian
|
||
URLISO="http://cdimage.debian.org/cdimage/daily-builds/daily/arch-latest/i386/iso-cd/debian-testing-i386-businesscard.iso"
|
||
# Fichier isolinux.cfg
|
||
ISOLINUX_CFG_FILE=${DATADIR}/isolinux.cfg
|
||
# Emplacement de la nouvelle image iso
|
||
NEWDEBIANISO=${DATADIR}/new-debian-testing-businesscard.iso
|
||
|
||
# Variable pour modifier le fichier preseed.cfg
|
||
MYHOSTNAME=""
|
||
MYDOMAINNAME=""
|
||
MYUSER=""
|
||
|
||
|
||
# Fin des variables globales
|
||
# -----------------------------------------------------------
|
||
# **********************************************************************************************
|
||
|
||
|
||
|
||
# **********************************************************************************************
|
||
#
|
||
# Fonctions globales
|
||
#
|
||
# -----------------------------------------------------------
|
||
# Divers echos ...
|
||
echoi() { echo " (ii) $*" >> "${fichier_log}" ; }
|
||
echok() { echo " (ok) $*" >> "${fichier_log}" ; }
|
||
echow() { echo " (!!) $*" >> "${fichier_log}" ; }
|
||
echnk() { echo " (EE) $*" >> "${fichier_log}" ; }
|
||
|
||
## maj_iso_debian
|
||
# Télécharge le dernier build de l'iso debian testing
|
||
maj_iso_debian()
|
||
{
|
||
if [ -f ${DEBIANISO} ]; then # Si une image iso est déjà présente
|
||
stat -c %y ${DEBIANISO}|grep `date +%Y-%m-%d` > /dev/null 2>&1
|
||
DATEISO=$?
|
||
if [ "${DATEISO}" = 0 ]; then # Si DATEISO=0, l'image iso est d'aujourd'hui
|
||
echoi "L'image iso est d'aujourd'hui."
|
||
else # Sinon on la met à jour
|
||
echoi "L'image iso doit-être mise à jour"
|
||
rm -f ${DEBIANISO}
|
||
wget ${URLISO}
|
||
fi
|
||
else
|
||
wget ${URLISO}
|
||
fi
|
||
|
||
}
|
||
|
||
## Proposer à l'utilisateur de modifier une variable
|
||
# Prototype: set_var $1 $2 $3
|
||
# $1: variable à modifier
|
||
# $2: nom de la variable à modifier
|
||
# $3: message à afficher
|
||
set_var()
|
||
{
|
||
echo -n ${3} " ["$1"] "
|
||
read $2
|
||
|
||
while [ -z "${1}" ] # Tant que la variable est vide
|
||
do
|
||
echo -n ${3} " [${1}] "
|
||
read $2
|
||
done
|
||
|
||
}
|
||
|
||
# Fin des fonctions globales
|
||
# -----------------------------------------------------------
|
||
# **********************************************************************************************
|
||
|
||
|
||
|
||
# **********************************************************************************************
|
||
#
|
||
# Programme principale
|
||
#
|
||
# -----------------------------------------------------------
|
||
|
||
# Téléchargement de la dernière image iso debian
|
||
maj_iso_debian
|
||
|
||
|
||
### Vérification que le script est bien lancé en root
|
||
if [ "${USER}" = "root" ]; then
|
||
echo "Lancement du script d'installation"
|
||
else
|
||
echo "/!\\ Le script nécessite d'être root /!\\"
|
||
exit 1
|
||
fi
|
||
|
||
### Vérification de la présence du paquet genisoimage
|
||
dpkg -s genisoimage|grep installed > /dev/null 2>&1
|
||
pkg_geniso=$?
|
||
if [ -n "${pkg_geniso}" ]; then
|
||
echo "genisoimage est installé" > /dev/null 2>&1
|
||
else
|
||
echo "/!\\ Le paquet genisoimage n'est pas installé /!\\"
|
||
echo "Appuyer sur une touche pour l'installer avec aptitude ou CTRL+C pour quitter le script et l'installer vous même."
|
||
read -p "" touche
|
||
aptitude install genisoimage
|
||
fi
|
||
|
||
# Changement des variables:
|
||
#set_var $MYHOSTNAME MYHOSTNAME "Quel est le nom de la future machine?"
|
||
#set_var $MYDOMAINNAME MYDOMAINNAME "Quel le domaine de la future machine?"
|
||
|
||
while [ -z "${MYHOSTNAME}" ] # Tant que la variable est vide
|
||
do
|
||
echo -n "Quel le nom de la future machine [${MYHOSTNAME}]?: "
|
||
read MYHOSTNAME
|
||
done
|
||
while [ -z "${MYDOMAINNAME}" ] # Tant que la variable est vide
|
||
do
|
||
echo -n "Quel le nom du futur domaine [${MYDOMAINNAME}]?: "
|
||
read MYDOMAINNAME
|
||
done
|
||
while [ -z "${MYUSER}" ] # Tant que la variable est vide
|
||
do
|
||
echo -n "Quel le nom de l'utilisateur principal [${MYUSER}]?: "
|
||
read MYUSER
|
||
done
|
||
|
||
|
||
|
||
# Récupérer le contenu de l'image ISO:
|
||
mkdir -p ${MNTDIR}
|
||
mount -o loop ${DEBIANISO} ${MNTDIR} > /dev/null 2>&1
|
||
|
||
# Suppression d'un éventuel répertoire temporaire
|
||
rm -rf ${NEWISODIR}
|
||
mkdir -p ${NEWISODIR}
|
||
# Synchronisation du contenu de l'iso
|
||
rsync -a -H --exclude=TRANS.TBL ${MNTDIR}/ ${NEWISODIR}
|
||
|
||
# On démonte l'image iso et on supprime le répertoire
|
||
umount ${MNTDIR}
|
||
rmdir ${MNTDIR}
|
||
|
||
# Copie du fichier preseed.cfg
|
||
cat ${PRESEEDFILE} | sed -e "s/@@HOSTNAME@@/${MYHOSTNAME}/g" | sed -e "s/@@DOMAINNAME@@/${MYDOMAINNAME}/g" | sed -e "s/@@MYUSER@@/${MYUSER}/g" > ${NEWISODIR}/preseed.cfg
|
||
#cat ${PRESEEDFILE}|sed -e "s/@@HOSTNAME@@/${MYHOSTNAME}/g" | sed -e "s/@@DOMAINNAME@@/${MYDOMAINNAME}/g" | sed -e "s/@@MYUSER@@/${MYUSER}/g" > ${NEWISODIR}/preseed.cfg
|
||
|
||
# Copie du fichier isolinux.cfg
|
||
cp ${ISOLINUX_CFG_FILE} ${NEWISODIR}/isolinux
|
||
|
||
# Régénération du fichier md5sum.txt
|
||
cd ${NEWISODIR}
|
||
md5sum `find -type f` > md5sum.txt
|
||
|
||
# Génération de l'image iso
|
||
cd ${NEWISODIR}
|
||
genisoimage -o ${NEWDEBIANISO} \
|
||
-r -J -no-emul-boot -boot-load-size 4 \
|
||
-boot-info-table -b isolinux/isolinux.bin \
|
||
-c isolinux/boot.cat \
|
||
${NEWISODIR}
|
||
|
||
cd -
|
||
|
||
# Un peu de ménage
|
||
rm -rf ${NEWISODIR}
|
||
|
||
|
||
exit 0
|
||
# Fin de la boucle principale
|
||
# -----------------------------------------------------------
|
||
# **********************************************************************************************
|
||
|
||
|