install-debian/old_files/gen_iso.sh

247 lines
7.5 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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
# -----------------------------------------------------------
# **********************************************************************************************