#!/bin/sh ################################################################################################ ## ## Nom: gen_iso.sh ## ## Licence: Creative Commons ## ## Version : 0.2 ## ## 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: - # ********************************************************************************************** ## ## ## 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 la vérification de la présence de l'image iso sinon la télécharger ## - Proposer de mettre à jour l'image iso déjà présente? ## - Ajouter un mode full silent ## - ## ## ################################################################################################ # ********************************************************************************************** # # Variables globales # # ----------------------------------------------------------- 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/data/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 # 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="" # Fin des variables globales # ----------------------------------------------------------- # ********************************************************************************************** # ********************************************************************************************** # # Fonctions globales # # ----------------------------------------------------------- # Divers echos ... echoi() { echo " (ii) $*" >> "${log}" ; } echok() { echo " (ok) $*" >> "${log}" ; } echow() { echo " (!!) $*" >> "${log}" ; } echnk() { echo " (EE) $*" >> "${log}" ; } # Fin des fonctions globales # ----------------------------------------------------------- # ********************************************************************************************** # ********************************************************************************************** # # Programme principale # # ----------------------------------------------------------- ### 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: 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 # 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" > ${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 # ----------------------------------------------------------- # **********************************************************************************************