#!/bin/bash

#	│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
#	│                  live_custom.sh                    │
#	│              écrit par François Fabre              │
#	│             ven 12 déc 2008 05:37:29 CET           │
#	│                                                    │
#	│            Customisation Live CD/DVD/USB           │
#	│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│

#Personaliser votre live CD/USB,
#A utiliser avec prudence, A vos risques et perils
#
#script inspiré de: https://wiki.ubuntu.com/LiveUsbPendrivePersistent
#et de https://help.ubuntu.com/community/LiveCDCustomization
#http://wiki.debian.org/DebianLive/FAQ#head-6c6e541d5cd3792fd364d4c609bf595d9f4127c4
#yelp file:///usr/share/gnome/help/zenity/fr/zenity.xml
#E-Mail: liveusb@gmail.com En Français SVP !
#Copyright: (C) 2007  Fabre François
#License: GNU General Public License (GPL)
#Ce programme est un logiciel libre: vous pouvez le redistribuer
#et/ou le modifier selon les termes de la "GNU General Public
#License", tels que publiés par la "Free Software Foundation"; soit
#la version 2 de cette licence ou (à votre choix) toute version
#ultérieure.
#
#Ce programme est distribué dans l'espoir qu'il sera utile, mais
#SANS AUCUNE GARANTIE, ni explicite ni implicite; sans même les
#garanties de commercialisation ou d'adaptation dans un but spécifique.
#
#Se référer à la "GNU General Public License" pour plus de détails.
#
#Vous devriez avoir reçu une copie de la "GNU General Public License"
#en même temps que ce programme; sinon, écrivez a la "Free Software
#Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA".
#http://www.gnu.org/licenses/gpl-howto.fr.html

#commandes a passer a proc/cmdline
#locale=fr_FR
#kbd-chooser/method=fr-latin9
#console-setup/layoutcode=fr 
#console-setup/variantcode=nodeadkeys  oss
#console-setup/modelcode=pc105

HEBERGEMENT="http://liveusb.info/liveusb"
#lang(0) sublang(1) encodage(2) kbd-chooser/method(3) console-setup/layoutcode(4) 
#console-setup/variantcode(5) console-setup/modelcode(6) timezone(7)
MODLANG=(fr FR UTF-8 fr fr oss pc105 Europe/Paris)
ESPACE_TRAVAIL="8192"  #taille de espace travail en Mb
NOM_SCRIPT="$(basename $0)"
CHEMIN_SCRIPT="$(dirname $0)"
FULL_NOM=$CHEMIN_SCRIPT/$NOM_SCRIPT
PID_SCRIPT=$(pidof -x $(basename $0))
MOD_CHECK="$1" #nocheck
OPTIONS_SQUASHFS=""
#XGRAPH='Xgl :5 -ac -accel xv -accel glx:pbuffer -screen 800x600 -dpi 96 -dpms +kb'
#XGRAPH='Xephyr :5  -host-cursor -dpi 96 -ac  -br -s 120 -screen 800x600 +kb +extension GLX'
#XGRAPH='Xnest :5 -ac -br -s 120 -full -name Test_graphique_du_chroot  +extension Composite +extension RANDR +extension GLX -dpi
XGRAPH='Xephyr :5  -host-cursor -dpi 96 -ac  -br -s 120 -screen 800x600'

export HEBERGEMENT
export ESPACE_TRAVAIL
export MODLANG
export OPTIONS_SQUASHFS
export XGRAPH

#LANG=${MODLANG[0]}_${MODLANG[1]}.${MODLANG[2]}
#LANGUAGE=${MODLANG[0]}_${MODLANG[1]}.${MODLANG[2]}
#LC_ALL=${MODLANG[0]}_${MODLANG[1]}.${MODLANG[2]}
#LC_ALL=C
#export LANG
#export LANGUAGE
#export LC_ALL


#décocher l'option "parcourir les péripherique lors de leur insertion" dans les préférences de nautilus
#remettre en etat origine user à la fin du script
CHECKMEDIA="$(gconftool-2 --config-source=xml:readwrite:$HOME/.gconf --get "/apps/nautilus/preferences/media_automount")"
export CHECKMEDIA
if [ "${CHECKMEDIA}" = "true" ]; then
echo $CHECKMEDIA
gconftool-2 --config-source=xml:readwrite:$HOME/.gconf --set "/apps/nautilus/preferences/media_automount" --type bool "false"
fi
#pour remettre:
#gconftool-2 --config-source=xml:readwrite:$HOME/.gconf --set "/apps/nautilus/preferences/media_automount" --type bool "$CHECKMEDIA"


#_______________________________________________________________________________________________
#_________________________________________Test_sudo_____________________________________________
function LANCEUR()
{
cd ${HOME} ;
if [ $HOME = "/root" ] && [ $(whoami) = "root" ]; then
echo -e "\033[1;47;31m Utilisateur pas en root utilisez sudo SVP,\nsudo \"$0\" \033[0m" ;
exit 0
elif [ $HOME != "/root" ] && [ $(whoami) = "root" ]; then  
echo -e '\E[37;44m'"\033[1m Utilisateur ok $USER $(whoami) $HOME \033[0m"
else
echo -e "\033[1;47;31m Stop erreur Utilisateur veuillez utiliser\nsudo \"$0\" \033[0m" ;
exit 0
fi
}
LANCEUR
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#___________________________________________gksudo______________________________________________
function LANCEUR2()
{
if ! which gksudo >/dev/null 2>&1; then
echo -e "\033[1;47;31m Erreur: gksudo n'est pas installé. \033[0m" ;
exit 0
elif ! which xterm >/dev/null 2>&1; then
echo -e "\033[1;47;31m Erreur: xterm n'est pas installé. \033[0m" ;
exit 0
elif [[ ! "$SUDO_USER" || "$USER" != "root" ]]; then
echo -e "\033[1;47;31m Réouvrir en root. \033[0m" ;
xterm  -title 'LiveUSB Customisation' -e "gksudo -w -l -k $0"
exit 0
else
echo -e '\E[37;44m'"\033[1m PWD:$PWD - HOME:$HOME - SUDO_USER:$SUDO_USER - USER:$USER - $0 \033[0m"
fi
}
#LANCEUR2
#_______________________________________________________________________________________________


LISTE_DISTRO="
42e237abd7b95b3e0a69d6300b7ab291  ubuntu-8.10-desktop-i386-fr.iso
7400a0d91b03e0fb77fc611ca0c2be1c  ubuntu-8.04-desktop-i386-fr.iso
d93eefba204b984b6ecbca32d4ab09a4  medor-1.10-fr-i386.iso
24ea1163ea6c9f5dae77de8c49ee7c03 *ubuntu-8.10-desktop-i386.iso
53c50ff06f4ad659f0abf6474b58c8e6 *xubuntu-8.10-desktop-i386.iso
690e1cce80656f95be7eafed95d4c59d *kubuntu-8.10-dvd-i386.iso
82c02dc7386dfb6858a9ec09a5059e1e *kubuntu-8.10-desktop-i386.iso
c69e34e92d5402d1b87e6babc739f774 ubuntu-8.04.1-desktop-i386.iso
1960049e681ca3f6c42abc226ad0ccf0 kubuntu-kde4-8.04.1-desktop-i386.iso
e0b9861df26c54acfd62bf35abe859f6 kubuntu-8.04.1-desktop-i386.iso
ea2e852642ed5dcc722d67e181eb5c89 xubuntu-8.04.1-desktop-i386.iso
327fbefc48b5705352e9988b45dbf759 minibuntu-8.04-i386.iso
9f95d36fd8053399ecf04d16a24e1d76 mythbuntu-8.04-rc-desktop-i386.iso
8895167a794c5d8dedcc312fc62f1f1f *ubuntu-8.04-desktop-i386.iso
1933f11ccea58de5bc80549774479031 *kubuntu-kde4-8.04-desktop-i386.iso
8aebb0dc17588d22dd3bb59d7df71061 *kubuntu-8.04-desktop-i386.iso
665bcc283e131be4cb71ecb2bf0e3794 *xubuntu-8.04-desktop-i386.iso
26a82f7a2e6b1d9cdf675e896ef7135a eeexubuntu-7.10.3-desktop-i386
60dff4a34f6f6f67255e76060cdb1348 64studio-live_2.0_i386
acff7f05d1b329b0da7a3794e54d9b00 bubuntu-fr-7.10b
d2334dbba7313e9abc8c7c072d2af09c Ubuntu-7.10-desktop-i386
877ae9aceb9fa5abcc8f8758c3f9f111 Xubuntu-7.10-desktop-i386
c759f0a8988b110ab18fb83f86194e38 Edubuntu-7.10-desktop-i386
ae9b209fe4b9caf545fa2011631de797 Kubuntu-7.10-desktop-i386
"

#si md5_live_perso.txt n'existe pas le créer
if [ ! -e "$HOME/.md5_live_perso.txt" ]; then
>"$HOME/.md5_live_perso.txt"
fi
#ajout du fichier md5 perso a là liste
chown $SUDO_USER:$SUDO_USER "$HOME/.md5_live_perso.txt"
chmod 644 "$HOME/.md5_live_perso.txt"
sleep 1
LISTE_DISTRO=("${LISTE_DISTRO[@]}" "$(cat $HOME/.md5_live_perso.txt)")
LISTE_DISTRO=$(echo "${LISTE_DISTRO[@]}" | sed 's/^[ \t]*//;s/[ \t]*$//') 

#_______________________________________________________________________________________________
#__________________________________________SOURCES______________________________________________
function SOURCES
{
UBUNTU="##SOURCELISTLIVEUSB
##Dépôts ${DIST_VERSION}
##http://www.ubuntu-nl.org/source-o-matic/
##http://www.sourceslist.org
##http://packages.ubuntu.com/
#sudo gedit /etc/apt/sources.list
#sudo apt-get update && dist-upgrade # alternative à update-manager -c -d, apres avoir modif sources.list
#update-manager -c -d #mise à jour old vers new
#Astuce : Si vous avez un doute sur la version de votre Ubuntu tapez
#lsb_release -a

deb http://ftp.crihan.fr/ubuntu/ ${DIST_VERSION} multiverse restricted universe main
deb http://security.ubuntu.com/ubuntu/ ${DIST_VERSION}-security restricted main multiverse universe
deb http://ftp.crihan.fr/ubuntu/ ${DIST_VERSION}-updates restricted main multiverse universe
deb http://ftp.crihan.fr/ubuntu/ ${DIST_VERSION}-proposed restricted main multiverse universe
deb http://ftp.crihan.fr/ubuntu/ ${DIST_VERSION}-backports restricted main multiverse universe

deb-src http://ftp.crihan.fr/ubuntu/ ${DIST_VERSION} multiverse restricted universe main 
deb-src http://ftp.crihan.fr/ubuntu/ ${DIST_VERSION}-security restricted main multiverse universe
deb-src http://ftp.crihan.fr/ubuntu/ ${DIST_VERSION}-updates restricted main multiverse universe
deb-src http://ftp.crihan.fr/ubuntu/ ${DIST_VERSION}-proposed restricted main multiverse universe
deb-src http://ftp.crihan.fr/ubuntu/ ${DIST_VERSION}-backports restricted main multiverse universe

##Dépôt Commercial canonical
deb http://archive.canonical.com/ ${DIST_VERSION} partner
deb http://archive.canonical.com/ ${DIST_VERSION}-backports partner
deb http://archive.canonical.com/ ${DIST_VERSION}-proposed partner
deb http://archive.canonical.com/ ${DIST_VERSION}-security partner
deb http://archive.canonical.com/ ${DIST_VERSION}-updates partner

#deb-src http://archive.canonical.com/ ${DIST_VERSION} partner
#deb-src http://archive.canonical.com/ ${DIST_VERSION}-backports partner
#deb-src http://archive.canonical.com/ ${DIST_VERSION}-proposed partner
#deb-src http://archive.canonical.com/ ${DIST_VERSION}-security partner
#deb-src http://archive.canonical.com/ ${DIST_VERSION}-updates partner

## MEDIBUNTU
# Dépôts de sources (uniquement utiles pour télécharger les sources avec apt-get source. Dans ce cas enlever les #)
## Please report any bug on https://bugs.launchpad.net/medibuntu/
deb http://fr.packages.medibuntu.org/ ${DIST_VERSION} free non-free
deb http://fr.packages.medibuntu.org/ ${DIST_VERSION}-staging free non-free
#deb-src http://fr.packages.medibuntu.org/ ${DIST_VERSION}-staging free non-free
#deb-src http://fr.packages.medibuntu.org/ ${DIST_VERSION} free non-free
#wget -q http://fr.packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add -

#______________________________________________________________________________
######################___________Autres dépôts___________######################

## Avant Window Navigator
#https://launchpad.net/~reacocard-awn/+archive
#http://wiki.awn-project.org/DistributionGuides
deb http://ppa.launchpad.net/reacocard-awn/ubuntu ${DIST_VERSION} main
#deb-src http://ppa.launchpad.net/reacocard-awn/ubuntu ${DIST_VERSION} main
#sudo apt-get update 
#avant-window-navigator-bzr awn-core-applets-bzr awn-manager-bzr

#screenlets
deb http://ppa.launchpad.net/gilir/ubuntu ${DIST_VERSION} main universe

#cairo-dock
#http://www.cairo-dock.org/
deb http://repository.cairo-dock.org/ubuntu ${DIST_VERSION} cairo-dock
#wget -q http://repository.cairo-dock.org/ubuntu/cairo-dock.gpg -O- | sudo apt-key add -
#sudo apt-get install cairo-dock cairo-dock-plug-ins

## Google picasa
deb http://dl.google.com/linux/deb/ testing non-free
#wget -q -O - http://dl.google.com/linux/linux_signing_key.pub | apt-key add -

## google-desktop-linux
#wget -q  http://dl.google.com/linux/linux_signing_key.pub -O- | sudo apt-key add -
deb http://dl.google.com/linux/deb/ stable non-free
#sudo apt-get update
#sudo apt-get install google-desktop-linux

## exaile
#http://www.exaile.org/downloads
#deb http://ppa.launchpad.net/exaile-devel/ubuntu ${DIST_VERSION} main
#sudo apt-get update
#sudo apt-get install exaile

#wicd
#http://wicd.sourceforge.net/download.php
#http://doc.ubuntu-fr.org/wicd
#deb http://apt.wicd.net ${DIST_VERSION} extras
#wget -q  http://apt.wicd.net/wicd.gpg -O- | sudo apt-key add -

## Me Tv
#https://launchpad.net/me-tv
#deb http://ppa.launchpad.net/michael-lamothe/ubuntu ${DIST_VERSION} main
#deb-src http://ppa.launchpad.net/michael-lamothe/ubuntu ${DIST_VERSION} main

## freeplayer
#http://tv.freebox.fr/
#http://homeplayer.free.fr/
#http://www.tvfreeplayer.com/forum/
#http://doc.ubuntu-fr.org/homeplayer?s=freeplayer
#deb http://www.tvfreeplayer.com/linux/falcon ${DIST_VERSION} all
#wget -q http://www.tvfreeplayer.com/linux/falcon/tvfreeplayer.gpg -O- | sudo apt-key add -
#apt-get install -y myfreetv homeplayer

## emule
#deb http://srvremi.free.fr/ubuntu ${DIST_VERSION} main
#gpg --keyserver wwwkeys.eu.pgp.net --recv-keys AA82C25A36399439
#gpg --armor --export AA82C25A36399439 | sudo apt-key add -
#sudo apt-get update
#sudo apt-get install emule

#gcstar
#http://falcon.landure.fr
#http://wiki.gcstar.org/en/install_linux#ubuntu
#wget http://falcon.landure.fr/9FA7DC39.gpg -O- | sudo apt-key add -
#deb http://falcon.landure.fr ${DIST_VERSION} all
#deb-src http://falcon.landure.fr ${DIST_VERSION} all
#sudo apt-get update
#sudo apt-get install gcstar

#ubuntu-tweak
#http://doc.ubuntu-fr.org/ubuntu_tweak
deb http://ppa.launchpad.net/tualatrix/ubuntu ${DIST_VERSION} main
#deb-src http://ppa.launchpad.net/tualatrix/ubuntu ${DIST_VERSION} main

#dusttheme
#https://code.launchpad.net/dusttheme
#https://wiki.ubuntu.com/Artwork/Incoming/DustTheme?action=show&redirect=Artwork%2FIncoming%2FIntrepid%2FDustTheme
deb http://ppa.launchpad.net/kwwii/ubuntu ${DIST_VERSION} main
#deb-src http://ppa.launchpad.net/kwwii/ubuntu ${DIST_VERSION} main
#sudo apt-get install gtk2-engines-murrine

#eee-pc kernel
#sudo apt-get install linux-eeepc 
#http://www.array.org/ubuntu/setup-intrepid.html
#deb http://www.array.org/ubuntu ${DIST_VERSION} eeepc
#wget http://www.array.org/ubuntu/array-apt-key.asc -O- | sudo apt-key add -

#bubuntu
#deb http://srvremi.free.fr/ubuntu ${DIST_VERSION} main
#gpg --keyserver wwwkeys.eu.pgp.net --recv-keys AA82C25A36399439
#gpg --armor --export AA82C25A36399439 | sudo apt-key add -
#sudo apt-get update
#sudo apt-get install bubuntu-extras

## Elbuntu
#deb http://e17.dunnewind.net/ubuntu ${DIST_VERSION} e17
#deb-src http://e17.dunnewind.net/ubuntu ${DIST_VERSION} e17

## Wine
# voir http://www.winehq.org/site/download-deb
#deb http://wine.budgetdedicated.com/apt ${DIST_VERSION} main
#deb-src http://wine.budgetdedicated.com/apt ${DIST_VERSION} main
## Dépôts de sources (uniquement utiles pour télécharger les sources avec
## apt-get source. Dans ce cas enlever les #)
#wget -q http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | sudo apt-key add -

#Depot PlayOnLinux
#wget -q http://deb.mulx.net/pol.gpg -O- | sudo apt-key add -
#deb http://deb.mulx.net/ ${DIST_VERSION} main

#elisa media center solution - runtime executables
#elisa elisa-plugins-bad elisa-plugins-good elisa-plugins-ugly
#deb http://ppa.launchpad.net/elisa-developers/ubuntu ${DIST_VERSION} main

#XBMC media center http://www.xbmc.fr/
#http://xbmc.org/forum/showthread.php?p=185738
#deb http://ppa.launchpad.net/team-xbmc-${DIST_VERSION}/ubuntu ${DIST_VERSION} main
#deb-src http://ppa.launchpad.net/team-xbmc-${DIST_VERSION}/ubuntu ${DIST_VERSION} main
###
deb http://ppa.launchpad.net/team-xbmc/ubuntu ${DIST_VERSION} multiverse restricted universe main
#deb-src http://ppa.launchpad.net/team-xbmc/ubuntu ${DIST_VERSION} multiverse restricted universe main
### svn
#deb http://ppa.launchpad.net/team-xbmc-svn/ubuntu ${DIST_VERSION} multiverse restricted universe main
#deb-src http://ppa.launchpad.net/team-xbmc-svn/ubuntu ${DIST_VERSION} multiverse restricted universe main

# DEPOTS SPRING 
#http://doc.ubuntu-fr.org/taspring
deb http://ppa.launchpad.net/spring/ubuntu ${DIST_VERSION} main
deb-src http://ppa.launchpad.net/spring/ubuntu ${DIST_VERSION} main
"

DEBIAN="##SOURCELISTLIVEUSB
##Dépôts ${DIST_VERSION}
deb http://ftp.fr.debian.org/debian/ ${DIST_VERSION} main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ ${DIST_VERSION} main contrib non-free
# Dépôts Multimédia
deb http://www.debian-multimedia.org ${DIST_VERSION} main
deb-src http://www.debian-multimedia.org ${DIST_VERSION} main
#Dépots sécurité
deb http://security.debian.org/ ${DIST_VERSION}/updates main contrib non-free
deb-src http://security.debian.org/ ${DIST_VERSION}/updates main contrib non-free

##Autres depots /!\
# http://www.debian-unofficial.org/index.html
# unofficial
# gpg --keyserver subkeys.pgp.net --recv-keys 6823D007
# gpg --armor --export 6823D007 | apt-key add -
deb http://ftp.debian-unofficial.org/debian ${DIST_VERSION} main contrib non-free restricted
deb-src http://ftp.debian-unofficial.org/debian ${DIST_VERSION} main contrib non-free restricted

#Backports
deb http://www.backports.org/debian ${DIST_VERSION}-backports main contrib non-free

#skype
#deb http://download.skype.com/linux/repos/debian/ ${DIST_VERSION} non-free

#tuxfamily all (backports...)
##clef : wget http://download.tuxfamily.org/osrdebian/61B8DB62.gpg -O- | sudo apt-key add -
#deb http://download.tuxfamily.org/osrdebian ${DIST_VERSION} backports
#deb-src http://download.tuxfamily.org/osrdebian ${DIST_VERSION} backports

### Google software repository ###
#deb http://dl.google.com/linux/deb/ ${DIST_VERSION} non-free 
# wget -q -O - http://dl.google.com/linux/linux_signing_key.pub | apt-key add -

#gnome-bluetooth
#deb http://debian.free.fr/debian/ ${DIST_VERSION} main 
#aptitude install bluez-gnome gnome-bluetooth 
#http://debian.free.fr/index.php?option=com_content&task=view&id=21&Itemid=1
"
}
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#__________________________________________GPG_KEY______________________________________________
GPG_KEY="#ajout de clé, ajoutez les votres...
wget -T 3 -t 3 http://fr.packages.medibuntu.org/medibuntu-key.gpg -O- | apt-key add -
wget -T 3 -t 3 http://dl.google.com/linux/linux_signing_key.pub -O- | apt-key add -
wget -T 3 -t 3 http://dl.google.com/linux/linux_signing_key.pub -O- | apt-key add -
wget -T 3 -t 3 http://falcon.landure.fr/9FA7DC39.gpg -O- | apt-key add -
wget -T 3 -t 3 http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | apt-key add -
wget -T 3 -t 3 http://apt.wicd.net/wicd.gpg -O- | sudo apt-key add -
wget -T 3 -t 3 http://repository.cairo-dock.org/ubuntu/cairo-dock.gpg -O- | apt-key add -
"
export GPG_KEY
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#________________________________________TIMEOUT________________________________________________
function TIMEOUT()
{
echo $(date +%s) > "/tmp/Log_liveusb.txt"
DATE_BEGIN=`cat /tmp/Log_liveusb.txt`;
function BTN_ANNULER()
{
if [ "$?" -ne "0" ]; then
MOD_CONFIRM="$(zenity \
--title="Live CD/USB" \
--text="Demande arrêt du script" \
--width=380 \
--height=10 \
--list \
--checklist \
--print-column="2" \
--separator=" " \
--hide-column="2" \
--column="*" \
--column="*" \
--column="Description" \
FALSE A "Veuiller cocher pour confirmer arrêt du script")"
if [ "$MOD_CONFIRM" == "A" ]; then
echo -e "\033[1;47;31m Process N°$PID_SCRIPT annulé par utilisateur: $MESSAGE \"$?\" \033[0m" ;
rm /tmp/Log_liveusb.txt &>/dev/null
kill -9 $PID_SCRIPT
exit 0
fi
fi
}
function BOUCLE()
{
echo "1" ; 
while true; do
echo "#${MESSAGE}" ; 
sleep 1; 
if ! [ -e "/tmp/Log_liveusb.txt" ]; then 
break ;
fi;
done; 
echo "100" ; 
}
BOUCLE | zenity --progress --pulsate --width 600 --auto-close || BTN_ANNULER
DATE_END=`date +%s` ; 
((ECART=DATE_END-DATE_BEGIN)) ;
((MIN=ECART/60)) ; 
((SEC=ECART%60)) ;
echo -e '\E[37;44m'"\033[1m fin de $MESSAGE \033[0m"
echo -e '\E[37;44m'"\033[1m Temps d'execution: $MIN Minutes et $SEC Secondes \033[0m"
}
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#_____________________________________DOWNLOAD_ADDON____________________________________________
function DOWNLOAD_ADDON()
{
MESSAGE="Téléchargement des Add-on disponibles en cours..."
TIMEOUT&
echo -e '\E[37;44m'"\033[1m Télécharger tous les Add-on disponibles \033[0m"
cd $HOME
wget ${HEBERGEMENT}/add-on/home-rw/add-on-liveusb.home-rw.sh -O add-on-liveusb.home-rw.sh
#wget ${HEBERGEMENT}/add-on/add-on-liveusb.dvb.sh -O add-on-liveusb.dvb.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.franciser-ubuntu.sh -O add-on-liveusb.franciser-ubuntu.sh
#wget ${HEBERGEMENT}/add-on/add-on-liveusb.hardy-eee-pc.sh -O add-on-liveusb.hardy-eee-pc.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.install-soft.sh -O add-on-liveusb.install-soft.sh
#wget ${HEBERGEMENT}/add-on/add-on-liveusb.madwifi.sh -O add-on-liveusb.madwifi.sh
#wget ${HEBERGEMENT}/add-on/add-on-liveusb.ndiswrapper.sh -O add-on-liveusb.ndiswrapper.sh
#wget ${HEBERGEMENT}/add-on/add-on-liveusb.sdricohcs.sh -O add-on-liveusb.sdricohcs.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.xclip-speech.sh -O add-on-liveusb.xclip-speech.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.homeplayer.sh -O add-on-liveusb.homeplayer.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.myfreetv.sh -O add-on-liveusb.myfreetv.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.flashplayer-standalone.sh -O add-on-liveusb.flashplayer-standalone.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.kompozer.sh -O add-on-liveusb.kompozer.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.xampp.sh -O add-on-liveusb.xampp.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.fullsync.sh -O add-on-liveusb.fullsync.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.custom-themes.sh -O add-on-liveusb.custom-themes.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.compiz.sh -O add-on-liveusb.compiz.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.vlc-freeplayer.sh -O add-on-liveusb.vlc-freeplayer.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.multiboot.sh -O add-on-liveusb.multiboot.sh
wget ${HEBERGEMENT}/add-on/italc/add-on-liveusb.italc.sh -O add-on-liveusb.italc.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.ubuntu-studio.sh -O add-on-liveusb.ubuntu-studio.sh
wget ${HEBERGEMENT}/add-on/netbook-remix/add-on-liveusb.ubuntu-netbook-remix.sh -O add-on-liveusb.ubuntu-netbook-remix.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.qjoypad.sh -O add-on-liveusb.qjoypad.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.jbidwatcher.sh -O add-on-liveusb.jbidwatcher.sh
wget ${HEBERGEMENT}/add-on/dssi-vst/add-on-liveusb.dssi-vst.sh -O add-on-liveusb.dssi-vst.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.8.04-drivers-proprio.sh -O add-on-liveusb.8.04-drivers-proprio.sh
wget ${HEBERGEMENT}/add-on/add-on-liveusb.8.10-drivers-proprio.sh -O add-on-liveusb.8.10-drivers-proprio.sh
chown $SUDO_USER:$SUDO_USER ./add-on-liveusb.*.sh
rm "/tmp/Log_liveusb.txt"
sleep 2
}
#___________________________________FIN_DOWNLOAD_ADDON__________________________________________
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#__________________________________Test connexion internet______________________________________
function TEST_CONNEXION()
{
MESSAGE="Test connexion internet, veuillez patienter..."
TIMEOUT&
while true; do
#TEST="$(ping -q -c 2 www.google.fr &>/dev/null 2>&1)"
TEST="$(ping -q -c 2 $(echo $HEBERGEMENT | sed 's/.*\/\///;s/\/.*//') &>/dev/null 2>&1)"
if [ $? -eq 0 ]; then
echo -e '\E[37;44m'"\033[1m Connexion internet ok. \033[0m"
rm /tmp/Log_liveusb.txt
sleep 2
break
else
echo -e "\033[1;47;31m Vérifiez votre connexion internet.\n$HEBERGEMENT\nle site répond pas... \033[0m" ;
sleep 2
fi
done
}
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#______________________________________________CHECK_MEM________________________________________
function CHECK_MEM()
{
#verif mini ram et swap
RAM_TEST=$(($(cat /proc/meminfo | grep -i "MemTotal:" | awk '{print $2}')/1024))
SWAP_TEST=$(($(cat /proc/meminfo | grep -i "SwapTotal:" | awk '{print $2}')/1024))
if [ "$RAM_TEST" -le "512" ]; then
echo RAM_TEST:$RAM_TEST
if [[ "$SWAP_TEST" -lt "1000" || ! "$SWAP_TEST" ]]; then
echo SWAP_TEST:$SWAP_TEST
echo -e "\033[1;47;31m Erreur: pas assez de Mémoire veuillez rajouter de la swap! \033[0m" ;
cd /tmp
wget ${HEBERGEMENT}/add-on/divers/swap-img.sh
chmod +x ./swap-img.sh
./swap-img.sh&
cd -
exit 0
fi
fi
}
CHECK_MEM
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#___________________________________________install_minimal_____________________________________
function INSTALL_MINIMAL()
{
MESSAGE="Test installation zenity"
TIMEOUT&
sleep 2

#Install mini
DEPENDANCES="coreutils zenity"
for D in $DEPENDANCES
do
echo "Installer: $D"
apt-get install -y --force-yes $D
done

#pre-check binaires mini
DEPENDANCES="zenity md5sum apt-get dpkg-query software-properties-gtk ping lsb_release"
for D in $DEPENDANCES
do
if  [ ! "$(which $D)" ]; then
echo -e "\033[1;47;31m Erreur: ne trouve pas le binaire $D \033[0m" ;
rm /tmp/Log_liveusb.txt
sleep 2
exit 0
fi
done

rm /tmp/Log_liveusb.txt
sleep 2
}
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#______________________________________CHECK_VERSION____________________________________________
function MOD_CHECK_VERSION()
{
wget ${HEBERGEMENT}/$NOM_SCRIPT -O /tmp/$NOM_SCRIPT
TV1_md5="$( /usr/bin/md5sum "/tmp/$NOM_SCRIPT" | awk '{print $1}' )"
TV2_md5="$( /usr/bin/md5sum "$0" | awk '{print $1}' )"
if [ ! "$(cat /tmp/$NOM_SCRIPT)" ]; then
echo -e "\033[1;47;31m Erreur: script impossible à télécharger \033[0m" ;
exit 0
fi
if [ "$TV1_md5" == "$TV2_md5" ] ; then
echo -e '\E[37;44m'"\033[1m $TV1_md5 \033[0m"
echo -e '\E[37;44m'"\033[1m $TV2_md5 \033[0m"
echo -e '\E[37;44m'"\033[1m Vous utilisez bien la dernière version du script. \033[0m"
else
echo -e "\033[1;47;31m Nouvelle version:$TV1_md5 \033[0m" ;
echo -e "\033[1;47;31m Version actuelle:$TV2_md5 \033[0m" ;
DIFFERENCES=$(diff $FULL_NOM /tmp/$NOM_SCRIPT)
echo -e "Une nouvelle version du script est disponible.
E-Mail: frafaster@gmail.com
La fenêtre suivante va vous proposer
de télécharger la dernière version du script.

Détail des différences:
${DIFFERENCES}
" | zenity \
--title="Live CD/USB" \
--width=640 \
--height=480 \
--text-info
fi
rm /tmp/$NOM_SCRIPT

function UPGRADE_LIVEUSB()
{
UPDATE=$(zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=400 \
--height=180 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
TRUE "A" "Ne pas mettre à jour le script" \
FALSE "B" "Mettre à jour le script" \
)
test $? -ne 0 && exit 0 # Bouton Annuler

if [ "${UPDATE}" == "A" ]; then 
echo -e '\E[37;44m'"\033[1m Ne pas mettre à jour le script \033[0m"

elif [ "${UPDATE}" == "B" ]; then
echo -e '\E[37;44m'"\033[1m Mettre à jour le script \033[0m"
cd $HOME
rm ./$NOM_SCRIPT*
wget ${HEBERGEMENT}/$NOM_SCRIPT
chown $SUDO_USER:$SUDO_USER ./$NOM_SCRIPT
chmod 644 ./$NOM_SCRIPT
chmod +x ./$NOM_SCRIPT
./$NOM_SCRIPT&
exit 0
fi
}

if [ "$TV1_md5" != "$TV2_md5" ] ; then
echo "Propose Upgrade"
UPGRADE_LIVEUSB
fi
}
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#______________________Vérification des dépendances manquantes__________________________________
function VERIF_DEPENDENCES
{
MESSAGE="Vérification des dépendances en cours, veuillez patienter..."
TIMEOUT&
MANQUE=();

#debian mkisofs ==> genisoimage
if ! [ "$(lsb_release -si)" == "Ubuntu" ]; then
LISTEDEPENDANCES=(w3m nmap xloadimage imagemagick bc mkisofs nasm build-essential rsync grub hdparm whois gnome-commander util-linux coreutils metacity mtools mbr e2fsprogs parted dosfstools wget sleuthkit sed squashfs-tools xnest xfonts-cyrillic xserver-xephyr)
elif ! [ "$(lsb_release -si)" == "Debian" ]; then
LISTEDEPENDANCES=(w3m nmap xloadimage imagemagick bc genisoimage nasm build-essential rsync grub hdparm whois gnome-commander util-linux coreutils metacity mtools mbr e2fsprogs parted dosfstools wget sleuthkit sed squashfs-tools xnest xfonts-cyrillic xserver-xephyr)
else
echo -e "\033[1;47;31m Erreur: lsb_release:$(lsb_release -si) != Ubuntu|Debian \033[0m" ;
rm /tmp/Log_liveusb.txt
sleep 2
exit 0
fi

i=0
while (( i < ${#LISTEDEPENDANCES[@]} ))
do
LI="${LISTEDEPENDANCES[$i]}"
#TEST=`dpkg-query -W -f='${Status}\n' $LI | grep -i "install ok installed"`
TEST=`dpkg -s $LI | grep -i "Status"`
(( i = i + 1 ))
if ! [ "${TEST}" == "Status: install ok installed" ]; then
echo -e "\033[1;47;31m Manque: ${LI} \033[0m" ;
MANQUE=(${MANQUE[@]} $LI)
fi
done

rm /tmp/Log_liveusb.txt
sleep 2

if ! [ -z "${MANQUE}" ]; then

function ACTIVER_SOURCES()
{
echo -e '\E[37;44m'"\033[1m Activer toute les sources et recharger \033[0m"
for source in main universe restricted multiverse
do
software-properties-gtk -n -e $source > /dev/null 2>&1
done
apt-get update
}
ACTIVER_SOURCES

INSTALLER="${MANQUE[@]}"
echo -e "\033[1;47;31m il manque des dépendances, pour les installer:\nsudo apt-get install -y $INSTALLER \033[0m" ;
INSTALL_DEP=$(zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=440 \
--height=220 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
TRUE "A" "Installer les dépendances manquantes ${INSTALLER}" \
FALSE "B" "Non merçi, je préfère les installer manuellement" \
)
test $? -ne 0 && exit 0 # Bouton Annuler
if [ "${INSTALL_DEP}" == "A" ]; then 
INSTALLER=$(echo -e "$INSTALLER" | grep -v "^#" | xargs)
INSTALLER=(${INSTALLER[@]})
i=0
while (( i < ${#INSTALLER[@]} ))
do
echo "${INSTALLER[$i]}"
xterm -e "apt-get install -y --force-yes ${INSTALLER[$i]}"
apt-get clean &>/dev/null
(( i = i + 1 ))
done
apt-get autoremove -y &>/dev/null
apt-get autoclean &>/dev/null
fi
echo -e "\033[1;47;31m Veuillez relancer le script \033[0m" ;
./live_custom.sh&
exit 0
fi
}
#_______________________________________________________________________________________________

#_______________________________________________________________________________________________
#______________________________________DECIMALE_________________________________________________
function DECIMALE()
{
if [ $1 = "-p" ]; then
precision=$2; shift 2;
else
precision=2  # valeur par défaut ex: #DECIMALE -p 4 158/600*100 
fi
bc -q << EOF
scale=$precision
$*
quit
EOF
}
#_______________________________________________________________________________________________

#_______________________________________________________________________________________________
#______________________________________syslinux_________________________________________________
function COMPIL_SYSLINUX()
{
#check espace dans /tmp si boot livecd
POINTMONTAGE="$(df -T -P -B 1M /tmp  | grep "^tmpfs" | awk '{print $7}')"
DISPO="$(df -T -P -B 1M /tmp | grep "^tmpfs" | awk '{print $5}')"
echo POINTMONTAGE:$POINTMONTAGE
echo DISPO:$DISPO
if [[ $POINTMONTAGE == "/tmp" && "$DISPO" -lt "120" ]]; then
echo -e "\033[1;47;31m Erreur: /tmp est chargé en ram et il ne reste pas assez d\'espace libre pour compiler syslinux Libre:$DISPO Mib \033[0m" ;
#essayer de liberer de la place!
#sudo umount /dev/shm
#sudo mount -o remount,size=512m /dev/shm
fi

#compiler syslinux
#http://syslinux.zytor.com/download.php
#http://freshmeat.net/projects/syslinux/
#http://www.kernel.org/pub/linux/utils/boot/syslinux/
SYL_VERSION="3.72"
function TEST_VERSION()
{
echo $(/sbin/extlinux -v 2>&1 | awk '{print $2}')
}
MESSAGE="Suppression/Purge de syslinux en cours..."
TIMEOUT&
apt-get remove --purge -y syslinux &>/dev/null
rm "/tmp/Log_liveusb.txt"
sleep 2
if [[ "$(TEST_VERSION)" != "${SYL_VERSION}" || ! -e /usr/share/syslinux/mbr.bin || ! -e /boot/extlinux/vesamenu.c32 ]]; then
echo -e '\E[37;44m'"\033[1m Compilation de syslinux ${SYL_VERSION} \033[0m"
test -e /usr/lib/syslinux && rm -Rf /usr/lib/syslinux/* ;
cd /tmp
#wget -r -nd http://ftp.free.fr/mirrors/ftp.kernel.org/linux/utils/boot/syslinux//syslinux-${SYL_VERSION}.tar.bz2 2>&1 \
#wget -r -nd http://freshmeat.net/redir/syslinux/10177/url_bz2/syslinux-${SYL_VERSION}.tar.bz2 2>&1 \
wget -r -nd http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-${SYL_VERSION}.tar.bz2 2>&1 \
| sed -u 's/\([ 0-9]\+K\)[ \.]*\([0-9]\+%\) \(.*\)/\2\n#Transfert : \1 (\2) à \3/' \
| zenity --progress --auto-close --width 400 --title "Téléchargement de syslinux-${SYL_VERSION}"
MESSAGE="Compilation/Installation de syslinux-${SYL_VERSION}, veuillez patienter..."
TIMEOUT&
tar jxvf syslinux-${SYL_VERSION}.tar.bz2
rm syslinux-${SYL_VERSION}.tar.bz2*
cd syslinux-${SYL_VERSION}
#make all &>/dev/null
make all
make install
make netinstall
make extbootinstall
#ldconfig -v
cd $HOME
rm -R /tmp/syslinux-${SYL_VERSION}
rm "/tmp/Log_liveusb.txt"
sleep 2
else
echo -e '\E[37;44m'"\033[1m Version installée de syslinux:$(TEST_VERSION) \033[0m"
fi
#test extlinux
if [ "$(TEST_VERSION)" != "${SYL_VERSION}" ]; then
echo -e "\033[1;47;31m Erreur: pas trouvé extlinux \"${SYL_VERSION}\" ==> trouvé:\"$(TEST_VERSION)\" \033[0m" ;
exit 0
fi
#test install syslinux
if [ ! "$(ls -l /usr/share/syslinux/mbr.bin)" ]; then
echo -e "\033[1;47;31m Erreur: /usr/share/syslinux/mbr.bin \033[0m" ;
exit 0
fi
if [ ! "$(ls -l /boot/extlinux/vesamenu.c32)" ]; then
echo -e "\033[1;47;31m Erreur: /boot/extlinux/vesamenu.c32 \033[0m" ;
exit 0
fi
if [ ! "$(ls -l /usr/share/syslinux/isolinux.bin)" ]; then
echo -e "\033[1;47;31m Erreur: /usr/share/syslinux/isolinux.bin \033[0m" ;
exit 0
fi
}
#_______________________________________________________________________________________________


#lancer les verif
if [ "$MOD_CHECK" != "nocheck" ]; then
INSTALL_MINIMAL
TEST_CONNEXION
MOD_CHECK_VERSION
VERIF_DEPENDENCES
COMPIL_SYSLINUX
fi


#_______________________________________________________________________________________________
#_________________________________________PREPARATION____________________________________________
function PREPARATION()
{
MESSAGE="Préparation de l'espace de travail, veuillez patienter..."
TIMEOUT&
CLE_USB=""
#inscription module squashfs, si non present
if [ -z "$(lsmod | grep squashfs)" ]; then 
insmod /lib/modules/`uname -r`/ubuntu/fs/squashfs/squashfs.ko
modprobe squashfs
echo -e '\E[37;44m'"\033[1m inscription squashfs.ko ok \033[0m"
fi
sleep 2
if [ -z "$(lsmod | grep squashfs)" ]; then 
echo -e "\033[1;47;31m Erreur: Il Manque Le Module: squashfs.ko \033[0m" ;
zenity --error --text "Erreur: Il Manque Le Module: squashfs.ko"
rm /tmp/Log_liveusb.txt
sleep 2
exit 0
fi

[ -e "/mnt/tmp_modif_liveusb" ] && kill -9 `lsof -at /mnt/tmp_modif_liveusb | xargs` &>/dev/null
sleep 2
umount -f /mnt/tmp_modif_liveusb/proc/sys/fs/binfmt_misc binfmt_misc &>/dev/null
umount -f /mnt/tmp_modif_liveusb/proc &>/dev/null
umount -f /mnt/tmp_modif_liveusb/sys &>/dev/null
umount -f /mnt/tmp_modif_liveusb/dev/pts &>/dev/null
umount -f /mnt/tmp_modif_liveusb/dev &>/dev/null
umount -f /mnt/tmp_modif_liveusb/tmp &>/dev/null
umount -f /mnt/tmp_liveusb &>/dev/null
umount -f /mnt/liveusb &>/dev/null
umount -f "/mnt/tmp_modif_liveusb/lib/modules/$(ls -A /mnt/tmp_modif_liveusb/lib/modules/ | grep 'generic')/volatile" &>/dev/null
sleep 2
rm -R /mnt/boot-cd &>/dev/null
chattr -R -i /mnt/liveusb/extlinux.sys &>/dev/null
rm -Rf /mnt/liveusb &>/dev/null
rm -Rf /mnt/tmp_liveusb &>/dev/null
rm -Rf /mnt/tmp_modif_liveusb &>/dev/null
mv -f /mnt/tmp_modif_liveusb /tmp/3-`date +%d-%m-%Y-%T-%N` &>/dev/null
rm /mnt/filesystem.manifest &>/dev/null
rm /mnt/filesystem.manifest-desktop &>/dev/null
rm /mnt/filesystem.squashfs &>/dev/null
rm /mnt/initrd.gz &>/dev/null
rm /mnt/initrd.img &>/dev/null
rm /mnt/vmlinuz &>/dev/null
if [ -e "/mnt/tmp_modif_liveusb/dev/null" ]; then
echo -e "\033[1;47;31m Erreur: impossible de demonter /mnt/tmp_modif_liveusb/dev/null
veuillez redemarrer... \033[0m" ;
exit 0
fi
if [ ! "$(losetup -f)" ]; then
echo -e "\033[1;47;31m Erreur: impossible de trouver un loop de libre
veuillez redemarrer... \033[0m" ;
exit 0
fi
sleep 2
##On crée les repertoirer de travail
test ! -e /mnt && mkdir /mnt ;
test ! -e /opt && mkdir /opt ;
#point de montage de /dev/sdx1
mkdir /mnt/liveusb ;
#point de montage de casper/filesystem.squashfs
mkdir /mnt/tmp_liveusb ;
#repertoire de travail
mkdir /mnt/tmp_modif_liveusb ;
chmod 4777 /mnt/liveusb /mnt/tmp_liveusb /mnt/tmp_modif_liveusb
sleep 2
TEST_ENV=()
TEST_ENV=(${TEST_ENV[@]} $(ls -s /mnt/liveusb | head -1 | awk '{print $2}'))
TEST_ENV=(${TEST_ENV[@]} $(ls -s /mnt/tmp_liveusb | head -1 | awk '{print $2}'))
TEST_ENV=(${TEST_ENV[@]} $(ls -s /mnt/tmp_modif_liveusb | head -1 | awk '{print $2}'))
TEST_ENV=(${TEST_ENV[@]} $(mount | grep /mnt/tmp_modif_liveusb/proc))
TEST_ENV=(${TEST_ENV[@]} $(mount | grep /mnt/tmp_modif_liveusb/sys))
TEST_ENV=(${TEST_ENV[@]} $(mount | grep /mnt/tmp_modif_liveusb/dev/pts))
echo "${TEST_ENV[@]}"
echo "${TEST_ENV[0]}"
echo "${TEST_ENV[1]}"
echo "${TEST_ENV[2]}"
echo "${TEST_ENV[4]}"
echo "${TEST_ENV[5]}"
echo "${TEST_ENV[6]}"
if [[ "${TEST_ENV[0]}" != "0" ||  "${TEST_ENV[1]}" != "0" ||  "${TEST_ENV[2]}" != "0" ]]; then 
echo -e "\033[1;47;31m Erreur: Sur Dossier de travail! ${TEST_ENV[@]} , veuillez redémarrer \033[0m" ;
rm /tmp/Log_liveusb.txt
sleep 2
exit 0
fi
#verif xsession screen
if [ -z "$DISPLAY" ]; then
echo -e "\033[1;47;31m Aucun serveur X (graphique) actif, X est necessaire pour ce script. \033[0m" 
exit 0
fi
rm /tmp/Log_liveusb.txt
sleep 2
echo -e '\E[37;44m'"\033[1m Espace de travail ok \033[0m"
}
PREPARATION
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#________________________________________CHERCHE_CLE____________________________________________
function CHERCHE_CLE()
{
echo -e '\E[37;44m'"\033[1m Début des test format \033[0m"
while true; do
CLE_USB=$(blkid /dev/sd* | grep casper-rw  | awk '{print $1}' | sed 's/[0-9:]//g' | sed '/^\/dev\/ */!d; s///;q')
NB=$(echo ${CLE_USB} | wc -l)
echo "CLE_USB:${CLE_USB}"
echo "NB:${NB}"
if [ "${CLE_USB}" == "" ]; then 
zenity --info --text "<b>ATTENTE,</b> Veuillez brancher votre clé usb\!\npuis cliquez sur le bouton Valider"
else
break
fi
done
if [ "${CLE_USB}" == "" ]; then 
echo -e "\033[1;47;31m Erreur: pas trouvé votre clé! \033[0m" ;
exit 0
elif [ "${NB}" -lt "1" ]; then 
echo -e "\033[1;47;31m Erreur pas trouvé partition casper-rw \033[0m" ;
exit 0
elif [ "${NB}" -gt "1" ]; then 
echo -e "\033[1;47;31m Erreur: trouvé plusieurs partitions casper-rw \033[0m" ;
exit 0
elif [ "${NB}" -eq "1" ]; then 
echo -e '\E[37;44m'"\033[1m Partition de travail est: /dev/${CLE_USB} \033[0m"
else
echo -e "\033[1;47;31m Erreur: capster-rw \033[0m" ;
exit 0
fi
PARTAGEDEVICE="$(blkid /dev/${CLE_USB}* | grep partage-rw  | awk '{print $1}' | sed 's/[:]//g')"
EXTLINUXDEVICE="$(blkid /dev/${CLE_USB}* | grep extlinux-ro  | awk '{print $1}' | sed 's/[:]//g')"
CASPERDEVICE="$(blkid /dev/${CLE_USB}* | grep casper-rw  | awk '{print $1}' | sed 's/[:]//g')"
HOMEDEVICE="$(blkid /dev/${CLE_USB}* | grep home-rw  | awk '{print $1}' | sed 's/[:]//g')"
SWAPDEVICE="$(blkid /dev/${CLE_USB}* | grep swap-rw  | awk '{print $1}' | sed 's/[:]//g')"
export PARTAGEDEVICE
export EXTLINUXDEVICE
export CASPERDEVICE
export HOMEDEVICE
export SWAPDEVICE

TEST1=$(blkid /dev/${CLE_USB}* | grep 'TYPE=\"ext3\"' | grep casper-rw  | awk '{print $1}' | sed 's/[0-9:]//g' | sed '/^\/dev\/ */!d; s///;q')
TEST2=$(blkid /dev/${CLE_USB}* | grep 'TYPE=\"ext3\"' | grep extlinux-ro  | awk '{print $1}' | sed 's/[0-9:]//g' | sed '/^\/dev\/ */!d; s///;q')
if [[ "$EXTLINUXDEVICE" && "$CASPERDEVICE" &&  "$TEST1" == "$TEST2" ]]; then
CLE_USB="$TEST1"
echo -e '\E[37;44m'"\033[1m Clé usb détecté en /dev/${CLE_USB} \033[0m"
else
echo -e "\033[1;47;31m Erreur: impossible de détecter votre clé usb \033[0m" ;
zenity --error --text "Erreur:  impossible de détecter votre clé usb"
exit 0
fi
if  [ "$(cat /etc/fstab | grep -i /dev/${CLE_USB})" ]; then #Erreur fstab
echo -e "\033[1;47;31m Erreur fstab \033[0m" ;
zenity --error --text "Erreur le disque sélectionné fait partie de fstab
ce script est fait pour des volumes amovibles
et /dev/${CLE_USB} ne devrait pas figurer dans fstab\!"
exit 0
fi
if ! [ "$(ls -la /dev/disk/by-id/usb-* | grep "${CLE_USB}")" ]; then #erreur pas monté dans usb!
echo -e "\033[1;47;31m Erreur: pas trouvé dans /dev/disk/by-id/usb-* \033[0m" ;
zenity --error --text "Erreur: pas trouvé ${CLE_USB} dans /dev/disk/by-id/usb-*"
exit 0
fi
if [ "$(hdparm -v /dev/${CLE_USB} | grep readonly | awk '{print $3}')" != "0" ]; then #test unlock
echo -e "\033[1;47;31m Erreur: suppport accessible en lecture uniquement, verouillé? \033[0m" ;
zenity --error --text "Erreur: suppport accessible en lecture uniquement, verouillé?"
exit 0
fi
export CLE_USB
echo -e '\E[37;44m'"\033[1m Test des partitions de la clé ok /dev/${CLE_USB} \033[0m"
}
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#______________________________________MOD_DETECTION_AUTOMATIQUE_____________________________________________
function MOD_DETECTION_AUTOMATIQUE()
{
rm /tmp/RESULT_SD /tmp/CHECK_SD /tmp/CHECK_SD2 &>/dev/null;
CLE_USB="";LIMIT=30;a=0;
echo $(date +%s) > "/tmp/Log_liveusb.txt"
function BTN_ANNULER()
{
echo -e "\033[1;47;31m Process annulé par utilisateur \033[0m" ;
sudo rm /tmp/Log_liveusb.txt
echo -e "\033[1;47;31m Tuer ces process: $PID_SCRIPT \033[0m" ;
kill -9 $PID_SCRIPT
exit 0
}
if [ ! -e /proc/partitions ]; then
echo -e "\033[1;47;31m Erreur: impossible de détecter /proc/partitions \033[0m" ;
exit 0
fi; 
function LOOP()
{
cat /proc/partitions | grep "sd[a-z]$" | awk '{print $4}' >/tmp/CHECK_SD
while (( a <= LIMIT )); do
let a++
echo $(echo "scale=1; (( $a / $LIMIT * 100))" | bc)
echo "#Détection automatique de votre clé USB\nVeuillez brancher ou débrancher puis rebrancher votre clé USB."
cat /proc/partitions | grep "sd[a-z]$" | awk '{print $4}' >/tmp/CHECK_SD2
sleep 2 ;

DIFF=$(diff -a /tmp/CHECK_SD /tmp/CHECK_SD2 | sed -n 2p | awk '{print $2}')

if ! [ -e "/tmp/Log_liveusb.txt" ]; then #annulation
break ;

elif [[ "$DIFF" && ! -e /dev/$DIFF ]]; then #eject
echo "#eject clé $DIFF"
cat /proc/partitions | grep "sd[a-z]$" | awk '{print $4}' >/tmp/CHECK_SD
sleep 2 ;

elif [[ "$DIFF" && -e /dev/$DIFF ]]; then #ok trouvé
echo "$DIFF" >/tmp/RESULT_SD
break ; 

elif [ "${a}" -ge "${LIMIT}" ]; then #timeout dépassé fin
zenity --error --text "Fin du script, pas réussit à détecter votre clé USB dans le délai imparti."&
sudo rm /tmp/Log_liveusb.txt
kill -9 $PID_SCRIPT
exit 0

else #boucle
echo "#Recherche... Timeout Attente $(( ${a} * 4 )) secondes (Max $(($LIMIT*4)) secondes)"
sleep 2 ; 
fi

done ;
}
LOOP | zenity --progress --progress --auto-close || BTN_ANNULER
CLE_USB=$(cat /tmp/RESULT_SD)
echo -e '\E[37;44m'"\033[1m CLE_USB ==> /dev/ $CLE_USB \033[0m"

#cherche UUID et sd? de la clé usb, et verifie que n'est pas dans fstab
blkid -s UUID | grep /dev/$CLE_USB | while read line
do
UUID="$(echo $line  | awk  '{print $2}' | awk -F\" '{print $2}')"
echo -e '\E[37;44m'"\033[1m Cherche:$UUID \033[0m"
if [[ "$(echo $(cat /etc/fstab) | grep "$UUID")" || "$(echo $(cat /etc/fstab) | grep "/dev/$CLE_USB")" ]]; then
echo -e "\033[1;47;31m Erreur le disque sélectionné fait partie de fstab,
ce script est fait pour des volumes amovibles
et /dev/$CLE_USB ne devrait pas figurer dans fstab\!... Sortie \033[0m" ;
zenity --error --text "Erreur le disque sélectionné fait partie de fstab
ce script est fait pour des volumes amovibles
et /dev/${CLE_USB} UUID=$UUID
ne devrait pas figurer dans fstab\!
"
exit 0
fi
done

TEST_DISKUSB=`ls -la /dev/disk/by-id/usb-* | grep "${CLE_USB}"`
TEST_WRITE=$(hdparm -v /dev/${CLE_USB} | grep readonly | awk '{print $3}')

if ! [ -e /dev/${CLE_USB} ]; then #n'existe pas
echo -e "\033[1;47;31m /dev/${CLE_USB} n\'existe pas \! \033[0m" ;
zenity --error --text "/dev/${CLE_USB} n\'existe pas \!"
exit 0

elif ! [ "$(echo "/dev/${CLE_USB}" | grep -i "/dev/sd.*[0-9]")" == "" ]; then #erreur pas racine
echo -e "\033[1;47;31m veuillez sélectionner un disque et non une partition\! Ex: sda,sdb;sdc,... \033[0m" ;
zenity --error --text "veuillez sélectionner un disque et non une partition\! Ex: sda,sdb;sdc,..."
exit 0

elif ! [ "${TEST_DISKUSB}" ]; then #erreur pas monté dans usb!
echo -e "\033[1;47;31m Erreur: pas trouvé dans /dev/disk/by-id/usb-* \033[0m" ;
zenity --error --text "Erreur: pas trouvé ${CLE_USB} dans /dev/disk/by-id/usb-*"
exit 0

elif [ "$TEST_WRITE" != "0" ]; then #test unlock
echo -e "\033[1;47;31m Erreur: suppport accessible en lecture uniquement, verouillé? \033[0m" ;
zenity --error --text "Erreur: suppport accessible en lecture uniquement, verouillé?"
exit 0

elif [ -e /dev/${CLE_USB} ]; then #ok existe 
echo -e '\E[37;44m'"\033[1m ok existe ${CLE_USB} \033[0m"
CHOIX_DD=$(fdisk -l | grep -i ^/dev/${CLE_USB})
echo -e '\E[37;44m'"\033[1m CHOIX_DD ==> ${CHOIX_DD} \033[0m"

LISTE_PART_SUPP=()
NBPART=$(fdisk -lu /dev/${CLE_USB} | grep -i "^/dev/${CLE_USB}[0-9]" | awk  '{print $1}'  | tr "\n" " " > /tmp/LISTE_PART_SUPP.txt)
LISTE_PART_SUPP=(${LISTE_PART_SUPP[@]} `cat /tmp/LISTE_PART_SUPP.txt`)
zenity --question --title="Alerte" --text="Votre clé USB à été détectée en <b>/dev/${CLE_USB}</b>
si cela ne vous semble pas exact, veuillez utiliser le bouton Annuler.

Attention vous allez effacer \"${#LISTE_PART_SUPP[@]}\" partition(s)\!
${CHOIX_DD}"

test $? -ne 0 && exit 0 # Bouton Annuler
#verif taille clé
TEST_TAILLE=$(($(sfdisk -s /dev/${CLE_USB}) / 1000))

echo "/dev/${CLE_USB} ${TEST_TAILLE}"
if  [ "$TEST_TAILLE" -ge "950" ]; then
echo -e '\E[37;44m'"\033[1m ok sup à 950Mo, on laisse passer $TEST_TAILLE Mo Utilisable \033[0m"
else
echo -e "\033[1;47;31m Erreur: clé de trop petite taille doit etre mini de 950Mo\! \033[0m" ;
zenity --error --text "Erreur: clé de trop petite taille doit etre mini de 950Mo\!"
exit 0
fi
fi
}
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#________________________________________MOD_DEMONTE____________________________________________
function MOD_DEMONTE()
{
if [[ "${CLE_USB}" && "$(fdisk -l /dev/${CLE_USB})" ]]; then
#demonter
function DEMONTE()
{
while [ "$(mount -l | grep /dev/${CLE_USB})" ]
do
echo -e "\033[1;33;44m Démonter:$(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs) \033[00m"
umount $(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs)
sleep 2
done
}
#Attente tant que pas demonté
while true; do
if [ "$(mount -l | grep /dev/${CLE_USB})" ]; then
echo -e "\033[1;33;44m Démonter \033[00m"
DEMONTE
else
break
fi
done
else
echo -e "\033[1;47;31m erreur sur la fonction MOD_DEMONTE() CLE_USB:${CLE_USB} \033[0m" ;
fi
}
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#_________________________________________UMOUNT_SD_____________________________________________
function UMOUNT_SD()
{
#recherche hd dans fstab pour liste a ne pas demonter
PASDEMONTER=()
LISTE=$(sudo blkid -s UUID)
for source in $(cat /etc/fstab | grep -v "^$" | grep -v "^#" | awk '{print $1}')
do
if [ "$(echo -e "$source" | grep "UUID=")" ]; then
CHERCHER=`echo "$source" | awk -F= '{print $2}'`
else
CHERCHER="$source"
fi
PASDEMONTER=(${PASDEMONTER[@]} $(echo -e "$LISTE" | grep "$CHERCHER"  | grep "/dev"| awk -F: '{print $1}'))
done

LIST_SD=(); LIST_SD=($(fdisk -l  | grep -i "^/dev/sd.*[0-9]" | awk  '{print $1}'  | tr "\n" " ")); 
i=${#LIST_SD[@]}
while (( i > 0 ))
do
(( i = i - 1 ))
#echo "${LIST_SD[$i]}"
if [ ! "$(echo ${PASDEMONTER[@]} | grep "${LIST_SD[$i]}")" ]; then
if [ -n "$(mount | grep ${LIST_SD[$i]})" ]; then 
if [ "${LIST_SD[$i]}" != "$(cat '/proc/self/mountstats' | grep /mnt | awk '{print $2}')" ]; then 
umount ${LIST_SD[$i]} ;
echo -e '\E[37;44m'"\033[1m umount ${LIST_SD[$i]} \033[0m" ;
if [ -n "$(mount | grep ${LIST_SD[$i]})" ]; then
echo -e "\033[1;33;44m Info: impossible de démonter ${LIST_SD[$i]} \033[00m"
fi ;
fi ;
fi ;
fi ;
sleep 1
done
#sudo -u $SUDO_USER nautilus -q &>/dev/null
#nautilus -q &>/dev/null
}
UMOUNT_SD
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#____________________________________CHECK_SPACE_JOB____________________________________________
function CHECK_SPACE_JOB()
{
MESSAGE="Vérification de la taille de l'espace de travail, veuillez patienter..."
TIMEOUT&

#verifier si bien ext3
TYPE=$(df -T -t ext3 -P /mnt | grep 'ext3' | awk '{print $2}')

#si delocalisé relever le type d'origine et pas celui de /mnt
if [ ! "$(df -Hh -T /mnt | grep ^/dev/)" ]; then
TYPE=$(df -Hh -T $(df -Hh -T /mnt | grep ^/ | awk '{print $1}')  | grep 'ext3' | awk '{print $2}')
fi
echo $TYPE

if [ "$TYPE" != "ext3" ]; then
echo -e "\033[1;47;31m Erreur de format sur répertoire de travail /mnt: ext3 != $TYPE \033[0m"
zenity --error --text "Erreur de format sur répertoire de travail /mnt: ext3 != $TYPE
Veuillez utiliser un des Menu: Délocaliser /mnt
"&
rm "/tmp/Log_liveusb.txt"
sleep 2
exit 0
else
echo -e '\E[37;44m'"\033[1m Ok support est bien ext3 \033[0m"
fi

#verifier espace disponible
if [ "$(mount -l | grep -E "/travail.img|[ext3-travail]" | grep /mnt | awk '{print $1}')" ]; then
#si delocalisé sur fichier image travail.img
DISPO=$(parted $(mount -l | grep /mnt |  awk '{print $1}') unit MB print | grep ext3  | awk '{print $4}' | sed 's/\/*//;s/[a-z A-Z]\/*//g')
echo -e '\E[37;44m'"\033[1m ok délocalisé $DISPO Mb \033[0m"
DELOCALISE="yes"
else
DISPO=$(df -T -t ext3 -P -B MB /mnt | grep "ext3" | awk '{print $5}' | sed 's/\/*//;s/[a-z A-Z]\/*//g')
DELOCALISE="no"
fi
echo "DISPO:$DISPO"
echo "DELOCALISE:$DELOCALISE"

if [ "$DISPO" -lt "$ESPACE_TRAVAIL" ]; then
echo -e "\033[1;47;31m Erreur: espace libre insuffisant: UTILISABLE:$DISPO Mb SOUHAITÉ:$ESPACE_TRAVAIL Mb \033[0m"
#pour Levi59 :)
echo -e "\033[1;47;31m Veuillez délocaliser le dossier /mnt
vous disposez pour cela de 3 Menus dans le script:
\"Délocaliser /mnt (depuis un autre volume, crée un fichier travail.img)\"
\"Délocaliser /mnt (remonter ancien fichier image travail.img)\"
\"Délocaliser /mnt (depuis un autre volume formaté en ext3)\" \033[0m"
rm "/tmp/Log_liveusb.txt"
sleep 2
exit 0
else
echo -e '\E[37;44m'"\033[1m Espace ok UTILISABLE:$DISPO Mb SOUHAITÉ:$ESPACE_TRAVAIL Mb \033[0m"
fi

rm "/tmp/Log_liveusb.txt"
sleep 2
}
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#______________________________________CHOIX_DISQUE_____________________________________________
function CHOIX_DISQUE
{
LISTEDD=`fdisk -l /dev/sd[a-z] | zenity --width=600 --height=600 --text-info --title "Liste de vos disques"`
CLE_USB=`zenity --entry --title="Device Sélection" --text="Sélectionez le disque à utiliser, Example sda ou sdb ou ..."`
test $? -ne 0 && exit 0 # Bouton Annuler
test -z "${CLE_USB}" && exec $0 # Rien de choisi
TEST_FSTAB=`cat /etc/fstab | grep -i /dev/${CLE_USB}`
TEST_DISKUSB=`ls -la /dev/disk/by-id/usb-* | grep "${CLE_USB}"`

if ! [ -e /dev/${CLE_USB} ]; then #n'existe pas
echo "/dev/${CLE_USB} n\'existe pas \!"
zenity --error --text "/dev/${CLE_USB} n\'existe pas \!"
exit 0

elif ! [ "$(echo "/dev/${CLE_USB}" | grep -i "/dev/sd.*[0-9]")" == "" ]; then #erreur pas racine
echo "veuillez sélectionner un disque et non une partition\! Ex: sda,sdb;sdc,..."
zenity --error --text "veuillez sélectionner un disque et non une partition\! Ex: sda,sdb;sdc,..."
exit 0

elif  [ "${TEST_FSTAB}" ]; then #Erreur fstab
echo "Erreur fstab"
zenity --error --text "Erreur le disque sélectionné fait partie de fstab
ce script est fait pour des volumes amovibles
et /dev/${CLE_USB} ne devrait pas figurer dans fstab\!
ou alors vous vous trompez de volume."
exit 0

elif ! [ "${TEST_DISKUSB}" ]; then #erreur pas monté dans usb!
echo "Erreur: pas trouvé dans /dev/disk/by-id/usb-*"
zenity --error --text "Erreur: pas trouvé ${CLE_USB} dans /dev/disk/by-id/usb-*"
exit 0

elif [ -e /dev/${CLE_USB} ]; then #ok existe 
echo "ok existe ${CLE_USB}"
CHOIX_DD=$(fdisk -l | grep -i ^/dev/${CLE_USB})
echo "CHOIX_DD ==> ${CHOIX_DD}"

LISTE_PART_SUPP=()
NBPART=$(fdisk -lu /dev/${CLE_USB} | grep -i "^/dev/${CLE_USB}[0-9]" | awk  '{print $1}'  | tr "\n" " " > /tmp/LISTE_PART_SUPP.txt)
LISTE_PART_SUPP=(${LISTE_PART_SUPP[@]} `cat /tmp/LISTE_PART_SUPP.txt`)
zenity --question --title="Alerte" --text="Attention vous allez effacer \"${#LISTE_PART_SUPP[@]}\" partition(s)\!
${CHOIX_DD}"

test $? -ne 0 && exit 0 # Bouton Annuler
#verif taille clé
TEST_TAILLE=$(($(sfdisk -s /dev/${CLE_USB}) / 1000))

echo "/dev/${CLE_USB} ${TEST_TAILLE}"
if  [ "$TEST_TAILLE" -ge "950" ]; then
echo "ok sup à 950Mo, on laisse passer $TEST_TAILLE Mo Utilisable"
else
echo "Erreur: clé de trop petite taille doit etre mini de 950Mo\!"
zenity --error --text "Erreur: clé de trop petite taille doit etre mini de 950Mo\!"
exit 0
fi
fi
}
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#____________________________________________REDIM______________________________________________
function NEW_DIMENSION()
{
MESSAGE="Redimensionnement des partitions en cours\, veuillez patienter..."
TIMEOUT&
#afficher etat
parted /dev/${CLE_USB} unit MB print

#demonter
MOD_DEMONTE

#arrondir
#printf "%1.0f" $TAILLE
#pourcentage_blocs_réservés - La valeur par défaut est de 5 % - mke2fs modifiable avec l'option -m
NOUVELLE="$(($TAILLE + (($TAILLE*5/100))))"
echo -e '\E[37;44m'"\033[1m NOUVELLE:$NOUVELLE \033[0m"

#calcul auto de la taille cible en fonction des cylindres de la clé
#voir doc ci-dessous tres bien faite
#http://cepcasa.info/tellmewhy/parted.html
heads=$(sfdisk -G /dev/${CLE_USB} | awk '{print $4}')
sectors=$(sfdisk -G /dev/${CLE_USB} | awk '{print $6}')
cylinders=$(sfdisk -G /dev/${CLE_USB} | awk '{print $2}')
echo "heads:$heads" #255
echo "sectors:$sectors" #63
echo "cylinders:$cylinders" #124
#255*63=16065 secteurs par cylindre
#chercher valide
i=0
while [ $i -lt $cylinders ]
do
i=$(($i+1))
#echo  "$((($i*16065)-1)) ==> $(($i*$((255 * 63 * 512))/1000/1000+1))"
RETOUR=$(($i*$(($heads * $sectors * 512))/1000/1000+1))
if [ $RETOUR -gt $NOUVELLE ]; then
#est sup ,arreter boucle sur bloc valide
echo -e '\E[37;44m'"\033[1m TAILLE A FORMATER ==> RETOUR:$RETOUR \033[0m"
break
fi
done

#suppression de toute les part du disk
echo -e '\E[37;44m'"\033[1m début du preformatage \033[0m"
#dd if=/dev/zero of=/dev/${CLE_USB}
dd if=/dev/zero of=/dev/${CLE_USB} bs=512 count=1
parted -s /dev/${CLE_USB} mklabel msdos
echo -e '\E[37;44m'"\033[1m fin du preformatage \033[0m"
sleep 2

MOD_DEMONTE
parted -s /dev/${CLE_USB} unit MB mkpart primary ext2 1 $RETOUR # mkpartfs
sleep 15
echo -e '\E[37;44m'"\033[1m création de ${CLE_USB}1 1 ==> $RETOUR \033[0m"

MOD_DEMONTE
parted -s /dev/${CLE_USB} unit MB mkpart primary ext2 $RETOUR 100% # mkpartfs
sleep 15
echo -e '\E[37;44m'"\033[1m création de ${CLE_USB}2 $RETOUR ==> 100% \033[0m"

MOD_DEMONTE
#formate et pose label
#mkfs.ext3 -L extlinux-ro /dev/${CLE_USB}1
mke2fs -j -L extlinux-ro /dev/${CLE_USB}1
sleep 15
echo -e '\E[37;44m'"\033[1m formatage de /dev/${CLE_USB}1 \033[0m"

MOD_DEMONTE
#formate et pose label
#mkfs.ext3 -L casper-rw /dev/${CLE_USB}2
mke2fs -j -L casper-rw /dev/${CLE_USB}2
sleep 15
echo -e '\E[37;44m'"\033[1m formatage de /dev/${CLE_USB}2 \033[0m"

MOD_DEMONTE
parted -s /dev/${CLE_USB} set 1 boot on
sleep 10
#parted -s /dev/${CLE_USB} set 1 lba off
#sleep 2

cat /usr/share/syslinux/mbr.bin > /dev/${CLE_USB}
sleep 10

MOD_DEMONTE
e2fsck -fy /dev/${CLE_USB}1 #verif
MOD_DEMONTE
e2fsck -fy /dev/${CLE_USB}2 #verif

fdisk -l /dev/${CLE_USB}
parted /dev/${CLE_USB} unit MB print
rm "/tmp/Log_liveusb.txt"
sleep 2
echo -e '\E[37;44m'"\033[1m Fin Redimensionnement \033[0m"
}
#_______________________________________________________________________________________________
#_______________________________________F.I.N_REDIM_____________________________________________


#_______________________________________________________________________________________________
#________________________________________CD_BOOT________________________________________________
function CD_BOOT
{
MOD_UNION=$(zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=400 \
--height=180 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
TRUE "aufs" "Utiliser AuFS comme système de fichier" \
FALSE "unionfs" "Utiliser UnionFS comme système de fichier" \
)
if [ "${MOD_UNION}" == "aufs" ]; then
echo -e '\E[37;44m'"\033[1m Utiliser ${MOD_UNION} comme système de fichier \033[0m"
elif [ "${MMOD_UNION}" == "unionfs" ]; then
echo -e '\E[37;44m'"\033[1m Utiliser ${MOD_UNION} comme système de fichier \033[0m"
else
MOD_UNION="aufs"
fi

MESSAGE="Veuillez patienter création .iso en cours..."
TIMEOUT&
#on cree la structure du cd de boot
mkdir -p /mnt/boot-cd/isolinux
mkdir -p /mnt/boot-cd/live
#on monte la partition 1
mount -t ext3 ${EXTLINUXDEVICE} /mnt/liveusb

#copier vmlinuz
cp /mnt/liveusb/vmlinuz /mnt/boot-cd/live/vmlinuz

#détection nom initrd
NOM_INITRD=$(basename $(ls -a /mnt/liveusb/initrd.*))
if [ ! "$NOM_INITRD" ]; then
echo -e "\033[1;47;31m Erreur: impossible de détecter la version de initrd \033[0m" ;
exit 0
fi

#copier initrd
cp /mnt/liveusb/$NOM_INITRD /mnt/boot-cd/live/$NOM_INITRD

#on copie vesamenu.c32
cp -f /boot/extlinux/vesamenu.c32 /mnt/boot-cd/isolinux/vesamenu.c32

#on copie splash
wget ${HEBERGEMENT}/background/splash.jpg -O /mnt/boot-cd/isolinux/splash.jpg

#on copie f1...f10
cp /mnt/liveusb/f[0-9].txt /mnt/boot-cd/isolinux
cp /mnt/liveusb/f10.txt /mnt/boot-cd/isolinux

#copie isolinux.bin
cp /usr/share/syslinux/isolinux.bin /mnt/boot-cd/isolinux

#definir les options de boot
APPEND_OPT="locale=${MODLANG[0]}_${MODLANG[1]} kbd-chooser/method=${MODLANG[3]} console-setup/layoutcode=${MODLANG[4]} console-setup/variantcode=${MODLANG[5]} console-setup/modelcode=${MODLANG[6]} noprompt verbose splash"

#detection casper ou live
if [ -e "/mnt/liveusb/casper/filesystem.squashfs" ]; then
echo -e '\E[37;44m'"\033[1m casper détecté \033[0m"
MOD_LIVECD="casper"
elif [ -e "/mnt/liveusb/live/filesystem.squashfs" ]; then
echo -e '\E[37;44m'"\033[1m live détecté \033[0m"
MOD_LIVECD="live"
else
echo -e "\033[1;47;31m Erreur: pas trouvé /*/filesystem.squashfs\nêtes-vous sur d'utiliser un LiveCD? \033[0m" ;
rm "/tmp/Log_liveusb.txt"
sleep 2
exit 0
fi

#on demonte car plus besoin
#on recup version utilisée par LiveUSB
preseed=$(cat /mnt/liveusb/extlinux.conf | sed '/.*preseed\//!d; s///;q' | sed '/ .*/!d; s///;q')
NOM_DISTRO="$(cat /mnt/liveusb/.disk/info | awk '{print $1}')"
echo -e '\E[37;44m'"\033[1m NOM_DISTRO:${NOM_DISTRO} \033[0m"
umount /mnt/liveusb

#creer le fichier isolinux.cfg
FICHIER_EXTLINUX="default vesamenu.c32
prompt 0
timeout 300

F1 /isolinux/f1.txt
F2 /isolinux/f2.txt
F3 /isolinux/f3.txt
F4 /isolinux/f4.txt
F5 /isolinux/f5.txt
F6 /isolinux/f6.txt
F7 /isolinux/f7.txt
F8 /isolinux/f8.txt
F9 /isolinux/f9.txt
F0 /isolinux/f10.txt

MENU BACKGROUND /isolinux/splash.jpg

#MENU INCLUDE /isolinux/info.txt

MENU TITLE LiveUSB Custom, Presser [tab] affiche options
MENU DEFAULT live

LABEL live
  menu label Mode live tous PC
  kernel /live/vmlinuz
  append union=${MOD_UNION} boot=${MOD_LIVECD} initrd=/live/$NOM_INITRD $APPEND_OPT --

LABEL livefailsafe
  menu label Mode live sans erreur
  kernel /live/vmlinuz
  append union=${MOD_UNION} boot=${MOD_LIVECD} initrd=/live/$NOM_INITRD acpi=off noapic noapm nodma nomce nolapic nosmp vga=normal $APPEND_OPT --

LABEL persistent
  menu label Mode persistent ATTENTION rend le PC proprietaire
  kernel /live/vmlinuz
  append union=${MOD_UNION} persistent boot=${MOD_LIVECD} initrd=/live/$NOM_INITRD $APPEND_OPT --

MENU SEPARATOR

LABEL livetoram
  menu label Mode livetoram 2Gio de ram au minimun
  kernel /live/vmlinuz
  append union=${MOD_UNION} toram boot=${MOD_LIVECD} initrd=/live/$NOM_INITRD $APPEND_OPT --

MENU SEPARATOR

LABEL liveqemu
  menu label Mode liveqemu generic.all_generic_ide=1
  kernel /live/vmlinuz
  append union=${MOD_UNION} boot=${MOD_LIVECD} initrd=/live/$NOM_INITRD generic.all_generic_ide=1 $APPEND_OPT --

MENU TABMSG Pressez [Tab] pour afficher les options de boot"
echo -e "${FICHIER_EXTLINUX}" | tee /mnt/boot-cd/isolinux/isolinux.cfg

#on crée iso cd
echo -e '\E[37;44m'"\033[1m Création du cd iso \033[0m"
mkisofs -r -V "CustomLiveCD" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o cd-boot-liveusb.iso /mnt/boot-cd

echo -e '\E[37;44m'"\033[1m Ménage en cours... \033[0m"
#on vire
rm -R /mnt/boot-cd
#graver cd
chown $SUDO_USER:$SUDO_USER "$HOME/cd-boot-liveusb.iso"
chmod 644 "$HOME/cd-boot-liveusb.iso"
echo -e '\E[37;44m'"\033[1m Veuillez graver image du cd
Chemin: \"$HOME/cd-boot-liveusb.iso\"
(clic droit, graver un disque sur le fichier .iso) \033[0m"
rm "/tmp/Log_liveusb.txt"
sleep 2
zenity --info --text "Veuillez graver l\'image du cd
Chemin: \"$HOME/cd-boot-liveusb.iso\"
(clic droit, graver un disque sur le fichier .iso)

Avant démarrer votre PC,
insérez le CD ainsi que votre clé USB"
echo -e '\E[37;44m'"\033[1m F.I.N /dev/${CLE_USB} \033[0m"
#F.I.N.I
}

function CD_BOOT_old
{
MESSAGE="Veuillez patienter création .iso en cours..."
TIMEOUT&
#on cree la structure du cd de boot
mkdir -p /mnt/boot-cd/boot/grub
#on monte la partition 1 
mount -t ext3 ${EXTLINUXDEVICE} /mnt/liveusb

#copier vmlinuz ==> vmlinuz-usb
cp /mnt/liveusb/vmlinuz /mnt/boot-cd/boot/vmlinuz-usb

#détection nom initrd
NOM_INITRD=$(basename $(ls -a /mnt/liveusb/initrd.*))
if [ ! "$NOM_INITRD" ]; then
echo -e "\033[1;47;31m Erreur: impossible de détecter la version de initrd \033[0m" ;
exit 0
fi

#copier initrd ==> initrd-usb.img
cp /mnt/liveusb/$NOM_INITRD /mnt/boot-cd/boot/initrd-usb.img

#on demonte car plus besoin
#on recup version utilisée par LiveUSB
preseed=$(cat /mnt/liveusb/extlinux.conf | sed '/.*preseed\//!d; s///;q' | sed '/ .*/!d; s///;q')
NOM_DISTRO="$(cat /mnt/liveusb/.disk/info | awk '{print $1}')"
echo -e '\E[37;44m'"\033[1m NOM_DISTRO:${NOM_DISTRO} \033[0m"
umount /mnt/liveusb
#on copie stage2_eltorito
cp /usr/lib/grub/i386-pc/stage2_eltorito /mnt/boot-cd/boot/grub
if ! [ "${NOM_DISTRO}" == "Debian" ]; then
echo "default 0
timeout 20
color cyan/blue white/blue

title $NOM_DISTRO Live verbose splash
root (cd)
kernel /boot/vmlinuz-usb union=aufs boot=casper locale=${MODLANG[0]}_${MODLANG[1]} kbd-chooser/method=${MODLANG[3]} console-setup/layoutcode=${MODLANG[4]} console-setup/variantcode=${MODLANG[5]} console-setup/modelcode=${MODLANG[6]} file=preseed/$preseed initrd=initrd.gz rw verbose splash
initrd /boot/initrd-usb.img

title $NOM_DISTRO persistent verbose splash
root (cd)
kernel /boot/vmlinuz-usb union=aufs boot=casper locale=${MODLANG[0]}_${MODLANG[1]} kbd-chooser/method=${MODLANG[3]} console-setup/layoutcode=${MODLANG[4]} console-setup/variantcode=${MODLANG[5]} console-setup/modelcode=${MODLANG[6]} file=preseed/$preseed persistent initrd=initrd.gz rw verbose splash
initrd /boot/initrd-usb.img

title $NOM_DISTRO Live toram 2Gio de ram au minimun verbose splash
root (cd)
kernel /boot/vmlinuz-usb union=aufs boot=casper toram locale=${MODLANG[0]}_${MODLANG[1]} kbd-chooser/method=${MODLANG[3]} console-setup/layoutcode=${MODLANG[4]} console-setup/variantcode=${MODLANG[5]} console-setup/modelcode=${MODLANG[6]} file=preseed/$preseed initrd=initrd.gz rw verbose splash
initrd /boot/initrd-usb.img

title qemu test $NOM_DISTRO persistent verbose splash
root (cd)
kernel /boot/vmlinuz-usb union=aufs boot=casper locale=${MODLANG[0]}_${MODLANG[1]} kbd-chooser/method=${MODLANG[3]} console-setup/layoutcode=${MODLANG[4]} console-setup/variantcode=${MODLANG[5]} console-setup/modelcode=${MODLANG[6]} file=preseed/$preseed persistent initrd=initrd.gz rw verbose splash generic.all_generic_ide=1
initrd /boot/initrd-usb.img

title qemu test $NOM_DISTRO Live verbose splash
root (cd)
kernel /boot/vmlinuz-usb union=aufs boot=casper locale=${MODLANG[0]}_${MODLANG[1]} kbd-chooser/method=${MODLANG[3]} console-setup/layoutcode=${MODLANG[4]} console-setup/variantcode=${MODLANG[5]} console-setup/modelcode=${MODLANG[6]} file=preseed/$preseed initrd=initrd.gz rw verbose splash generic.all_generic_ide=1
initrd /boot/initrd-usb.img

title $NOM_DISTRO sans options
root (cd)
kernel /boot/vmlinuz-usb union=aufs boot=casper locale=${MODLANG[0]}_${MODLANG[1]}
initrd /boot/initrd-usb.img
" | tee /mnt/boot-cd/boot/grub/menu.lst

else
echo "default 0
timeout 20
color cyan/blue white/blue

title $NOM_DISTRO live
root (cd)
kernel /boot/vmlinuz-usb union=aufs boot=casper locale=${MODLANG[0]}_${MODLANG[1]}
initrd /boot/initrd-usb.img

title $NOM_DISTRO live persistent
root (cd)
kernel /boot/vmlinuz-usb union=aufs boot=casper locale=${MODLANG[0]}_${MODLANG[1]} persistent
initrd /boot/initrd-usb.img
" | tee /mnt/boot-cd/boot/grub/menu.lst
fi ;

#on crée iso cd
echo -e '\E[37;44m'"\033[1m Création du cd iso \033[0m"
mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o cd-boot-liveusb.iso /mnt/boot-cd
echo -e '\E[37;44m'"\033[1m Ménage en cours... \033[0m"
#on vire
rm -R /mnt/boot-cd
#graver cd
chown $SUDO_USER:$SUDO_USER "$HOME/cd-boot-liveusb.iso"
chmod 644 "$HOME/cd-boot-liveusb.iso"
echo -e '\E[37;44m'"\033[1m Veuillez graver image du cd
Chemin: \"$HOME/cd-boot-liveusb.iso\"
(clic droit, graver un disque sur le fichier .iso) \033[0m"
rm "/tmp/Log_liveusb.txt"
sleep 2
zenity --info --text "Veuillez graver l\'image du cd
Chemin: \"$HOME/cd-boot-liveusb.iso\"
(clic droit, graver un disque sur le fichier .iso)

Avant démarrer votre PC,
insérez le CD ainsi que votre clé USB"
echo -e '\E[37;44m'"\033[1m F.I.N /dev/${CLE_USB} \033[0m"
#F.I.N.I
}
#_______________________________________________________________________________________________
#_____________________________________F.I.N_CD_BOOT_____________________________________________


#_______________________________________________________________________________________________
#________________________________________CHOIX_LIVECD________________________________________________
function CHOIX_LIVECD()
{
FICHIER_IMG=`zenity --title "Veuillez sélectionner le fichier image de LiveCD à utiliser" --file-selection --filename="$PWD/"`
test $? -ne 0 && exit 0  # Bouton Annuler
test -z "${FICHIER_IMG}" && exec $0 # Rien de choisi
MESSAGE="Vérification md5 en cours..."
TIMEOUT&
LISTE=()
> "/tmp/distro_choisie.txt" ;
CHOIX=$(/usr/bin/md5sum "${FICHIER_IMG}" | awk '{ print $1 }')
echo "${LISTE_DISTRO[@]}" | while read line
do
MD5=`echo "$line" | awk '{ print $1 }'` ;
if [ "${CHOIX}" = "${MD5}" ] ; then 
echo -e '\E[37;44m'"\033[1m ok md5: ${MD5} \033[0m"
echo "${line}" > "/tmp/distro_choisie.txt" ;
break ;
fi
done
LISTE=(${LISTE[@]} $(cat "/tmp/distro_choisie.txt"))
rm "/tmp/Log_liveusb.txt"
sleep 2
if [ "${CHOIX}" == "${LISTE[0]}" ]; then 
zenity --info --text "choix de la distribution a customiser: ${LISTE[1]}"
else
zenity --error --text "Distribution inconnue, ou .img déjà customisée par un autre logiciel\!\nMD5 \"${CHOIX}\"

Éditez le fichier: $HOME/.md5_live_perso.txt
Avec la commande:
gedit $HOME/.md5_live_perso.txt

et rajoutez une ligne en remplaçant votre_md5 par le bon md5
Rajoutez:
${CHOIX} $(basename ${FICHIER_IMG})

Puis relancez le script
"
exit 0
fi
}
#_______________________________________________________________________________________________
#_____________________________________F.I.N_CHOIX_LIVECD_____________________________________________


#_______________________________________________________________________________________________
#__________________________________CUSTOM_LIVE_CD/USB___________________________________________
function IMPOSSIBLE()
{
PC1="$(lsb_release -c | awk '{print $2}')"
PC2="$(cat /mnt/liveusb/.disk/info | awk '{print $2}')"
if [[ "$PC1" == "gutsy" && "$PC2" == "8.04" ]] ; then
echo -e "\033[1;47;31m Ereur: customisation impossible pour cause de version squashfs différente \033[0m" ;
rm "/tmp/Log_liveusb.txt"
sleep 2
exit 0
elif [[ "$PC1" == "hardy" && "$PC2" == "7.10" ]] ; then
echo -e "\033[1;47;31m Ereur: customisation impossible pour cause de version squashfs différente \033[0m" ;
rm "/tmp/Log_liveusb.txt"
sleep 2
exit 0
fi
}

function DECOMPRESS_LIVEUSB
{
#on monte partition et on decompresse
MESSAGE="Pause café1, Monter/copier squashfs, Veuillez patienter 3/10 Minutes..."
TIMEOUT&
#on demonte si monté
UMOUNT_SD
sleep 2
echo ${CLE_USB}
mount -t ext3 ${EXTLINUXDEVICE} /mnt/liveusb
IMPOSSIBLE
NOM_INITRD=$(basename $(ls -a /mnt/liveusb/initrd.*))
#test extlinux ok
if [[ ! -e "/mnt/liveusb/extlinux.conf" || ! -e "/mnt/liveusb/extlinux.sys" ]]; then 
echo -e "\033[1;47;31m Erreur: extlinux? \033[0m" ;
rm "/tmp/Log_liveusb.txt"
sleep 2
exit 0
fi
if [ ! -e "/mnt/liveusb/casper/filesystem.squashfs" ]; then 
echo -e "\033[1;47;31m Erreur: pas trouvé squashfs \033[0m" ;
rm "/tmp/Log_liveusb.txt"
sleep 2
exit 0
fi
unsquashfs -d /mnt/tmp_modif_liveusb/. -f /mnt/liveusb/casper/filesystem.squashfs
#mount -t squashfs -o loop
# aptitude install squashfs-source
# m-a prepare
# m-a build squashfs-source
# m-a install squashfs-source
umount /mnt/liveusb

rm "/tmp/Log_liveusb.txt"
sleep 2
CHECK_CDUSB="usb"
REPRISE="/mnt/sauvegarde_chroot_liveusb"
} #FIN DECOMPRESS_LIVEUSB


function DECOMPRESS_LIVECD()
{
CHOIX_LIVECD
MESSAGE="Pause café1, Décompression de filesystem.squashfs, Veuillez patienter 3/10 Minutes..."
TIMEOUT&
mount -t iso9660 -o loop,ro "${FICHIER_IMG}" /mnt/liveusb
IMPOSSIBLE
NOM_INITRD=$(basename $(ls -a /mnt/liveusb/casper/initrd.*))
echo -e '\E[37;44m'"\033[1m Test /mnt/liveusb/casper/filesystem.squashfs \033[0m"
test ! -e /mnt/liveusb/casper/filesystem.squashfs && exit 0 ; #
unsquashfs -d /mnt/tmp_modif_liveusb/. -f /mnt/liveusb/casper/filesystem.squashfs
sleep 5
umount /mnt/liveusb
rm "/tmp/Log_liveusb.txt"
sleep 2
CHECK_CDUSB="cd"
REPRISE="/mnt/sauvegarde_chroot_livecd"
} #FIN DECOMPRESS_LIVECD


function REPRISE_LIVECD
{
CHOIX_LIVECD

mount -t iso9660 -o loop,ro "${FICHIER_IMG}" /mnt/liveusb
IMPOSSIBLE
NOM_INITRD=$(basename $(ls -a /mnt/liveusb/casper/initrd.*))
echo -e '\E[37;44m'"\033[1m Test /mnt/liveusb/casper/filesystem.squashfs \033[0m"
test ! -e /mnt/liveusb/casper/filesystem.squashfs && exit 0 ; #
umount /mnt/liveusb
CHECK_CDUSB="cd"
REPRISE="/mnt/sauvegarde_chroot_livecd"
#REPRISE=`zenity --title "Veuillez sélectionner le dossier pour reprise du chroot" --file-selection --directory --filename="$REPRISE"`
#test $? -ne 0 && exit 0  # Bouton Annuler

#check si il y a une sauvegarde?
if [ ! -e "$REPRISE" ]; then
echo -e "\033[1;47;31m Erreur: pas trouvé de dossier de sauvegarde du chroot: $REPRISE \033[0m" ;
exit 0
fi

#verifier si chroot correspond au livecd?
if [ "${CHOIX}" != "$(cat "$REPRISE/opt/md5.txt")" ]; then
echo -e "\033[1;47;31m Erreur: md5 attendu: ${CHOIX} trouvé:$(cat "$REPRISE/opt/md5.txt") \033[0m" ;
exit 0
fi

#remplacer chroot
rmdir /mnt/tmp_modif_liveusb
[ ! -e /mnt/tmp_modif_liveusb ] && mv "$REPRISE" /mnt/tmp_modif_liveusb
} #FIN REPRISE_LIVECD


function REPRISE_LIVEUSB
{
#PREPARATION

MESSAGE="Verifications en cours..."
TIMEOUT&

#on demonte si monté
UMOUNT_SD
sleep 2
echo ${CLE_USB}
mount -t ext3 ${EXTLINUXDEVICE} /mnt/liveusb
IMPOSSIBLE

NOM_INITRD=$(basename $(ls -a /mnt/liveusb/initrd.*))
#test extlinux ok
if [[ ! -e "/mnt/liveusb/extlinux.conf" || ! -e "/mnt/liveusb/extlinux.sys" ]]; then 
echo -e "\033[1;47;31m Erreur: extlinux? \033[0m" ;
rm "/tmp/Log_liveusb.txt"
sleep 2
exit 0
fi
if [ ! -e "/mnt/liveusb/casper/filesystem.squashfs" ]; then 
echo -e "\033[1;47;31m Erreur: pas trouvé squashfs \033[0m" ;
rm "/tmp/Log_liveusb.txt"
sleep 2
exit 0
fi

#relever md5 pour verif
MD5_REPRISE="$(/usr/bin/md5sum "/mnt/liveusb/md5sum.txt" | awk '{ print $1 }')"
rm /tmp/Log_liveusb.txt
sleep 2

umount /mnt/liveusb
CHECK_CDUSB="usb"
REPRISE="/mnt/sauvegarde_chroot_liveusb"
#REPRISE=`zenity --title "Veuillez sélectionner le dossier pour reprise du chroot" --file-selection --directory --filename="$REPRISE"`
#test $? -ne 0 && exit 0  # Bouton Annuler

#check si il y a une sauvegarde?
if [ ! -e "$REPRISE" ]; then
echo -e "\033[1;47;31m Erreur: pas trouvé de dossier de sauvegarde du chroot: $REPRISE \033[0m" ;
exit 0
fi

#verifier si chroot correspond au liveusb?
if [ "${MD5_REPRISE}" != "$(cat "$REPRISE/opt/md5.txt")" ]; then
echo -e "\033[1;47;31m Erreur: md5 attendu: ${MD5_REPRISE} trouvé:$(cat "$REPRISE/opt/md5.txt") \033[0m" ;
exit 0
fi

#remplacer chroot
rmdir /mnt/tmp_modif_liveusb
[ ! -e /mnt/tmp_modif_liveusb ] && mv "$REPRISE" /mnt/tmp_modif_liveusb
} #FIN REPRISE_LIVEUSB


###################_VERIFIER_KERNEL_##################
function VERIFIER_KERNEL()
{
function CHECK_KERNEL()
{
if [ "$(echo "$(ls -A /mnt/tmp_modif_liveusb/boot/config*)" | wc -l)" != "1" ]; then

function MISENFORME()
{
LISTE=($(ls -A /mnt/tmp_modif_liveusb/boot/config* | sort -n))
i=0 ; while [ $i -lt ${#LISTE[@]} ]
do
CHERCHE=$(basename ${LISTE[$i]})
VERSION=${CHERCHE#*config-}
if [ "${i}" == "0" ]; then
echo "TRUE \"$i\" \"${VERSION}\" \\"
else
echo "FALSE \"$i\" \"${VERSION}\" \\"
fi
i=$(($i+1)) 
done
}

HEADER='zenity \
--title="Custom LiveCD/USB" \
--text="<b>Plusieurs kernels ont été détectés.
Le script ne gère que 1 seul kernel
Veuillez sélectionner celui à SUPPRIMER.</b>" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=300 \
--height=220 \
--list \
--hide-column="2" \
--print-column="3" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Choix du kernel à SUPPRIMER" \'
echo -e "$HEADER" >/tmp/mise_en_forme
MISENFORME >>/tmp/mise_en_forme
SUPPRIMER=$(. /tmp/mise_en_forme)
echo "SUPPRIMER:$SUPPRIMER"
export SUPPRIMER

if [ "${SUPPRIMER}" ]; then
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
echo "SUPPRIMER:$SUPPRIMER"
LISTE=()
LISTE="linux-image
linux-image-generic
linux-image-${SUPPRIMER}
linux-header-generic
linux-headers-${SUPPRIMER}
linux-headers-${SUPPRIMER%*-generic}
linux-restricted-modules
linux-restricted-modules-generic"
LISTE=$(echo -e "$LISTE" | grep -v "^#" | xargs)
LISTE=(${LISTE[@]})
i=0
while (( i < ${#LISTE[@]} ))
do
echo "${LISTE[$i]}\n"
xterm -e "apt-get remove --purge -y --force-yes ${LISTE[$i]}"
(( i = i + 1 ))
done
EOF
fi

fi
}
#boucle tant que plus de 1 kernel
while true; do
LISTE=()
LISTE=$(ls -a /mnt/tmp_modif_liveusb/boot/config*)
LISTE=(${LISTE[@]})
NB=${#LISTE[@]}
if [ "$NB" != "1" ]; then
CHECK_KERNEL
elif [ "$NB" -eq "1" ]; then
echo -e '\E[37;44m'"\033[1m ok 1 seul kernel \033[0m"
break
fi
done
CHERCHE=$(basename $(ls -a /mnt/tmp_modif_liveusb/boot/config*))
VERSION_LIN=${CHERCHE#*config-}
echo ${VERSION_LIN} | tee /mnt/tmp_modif_liveusb/opt/kernel-version.txt
echo -e '\E[37;44m'"\033[1m kernel-version:${VERSION_LIN} \033[0m"
export VERSION_LIN
}
###################_F.I.N_VERIFIER_KERNEL_##################


###################_PREPA2_###################
function PREPA2()
{
MESSAGE="Préparation du chroot..."
TIMEOUT&

#virer alias sur certaines distro
test -e /mnt/tmp_modif_liveusb/boot/initrd.img && rm /mnt/tmp_modif_liveusb/boot/initrd.img ;
test -e /mnt/tmp_modif_liveusb/boot/vmlinuz && rm /mnt/tmp_modif_liveusb/boot/vmlinuz ;

VERIFIER_KERNEL

#detection de display manager
if [ $(cat /mnt/tmp_modif_liveusb/etc/X11/default-display-manager | grep gdm) ]; then 
echo -e '\E[37;44m'"\033[1m display manager gdm \033[0m"
DESK_ENV="gdm"
elif [ $(cat /mnt/tmp_modif_liveusb/etc/X11/default-display-manager | grep kdm) ]; then 
echo -e '\E[37;44m'"\033[1m display manager kdm \033[0m"
DESK_ENV="kdm"
elif [ $(cat /mnt/tmp_modif_liveusb/etc/X11/default-display-manager | grep xdm) ]; then 
echo -e '\E[37;44m'"\033[1m display manager xdm \033[0m"
DESK_ENV="xdm"
elif [ $(cat /mnt/tmp_modif_liveusb/etc/X11/default-display-manager | grep entranced) ]; then 
echo -e '\E[37;44m'"\033[1m display manager E17 \033[0m"
DESK_ENV="E17"
else
echo -e "\033[1;47;31m display manager inconnu \033[0m" ;
DESK_ENV=""
#rm "/tmp/Log_liveusb.txt"
#sleep 2
#exit 0
fi
export DESK_ENV

if ! [ -e /mnt/tmp_modif_liveusb/etc/issue ]; then 
echo -e "\033[1;47;31m Erreur: le fichier \"/etc/issue\" n'existe pas. \033[0m" ;/
exit 0
fi

#definir lang dans chroot
echo -e "${MODLANG[0]}_${MODLANG[1]}.${MODLANG[2]}" | tee /mnt/tmp_modif_liveusb/opt/lang.txt

#definir HEBERGEMENT dans chroot
echo -e "$HEBERGEMENT" | tee /mnt/tmp_modif_liveusb/opt/HEBERGEMENT.txt

#detection distro et attribution de sources.list + complet
DIST_VERSION=$(chroot /mnt/tmp_modif_liveusb lsb_release -c | awk '{print $2}')
if [ "$DIST_VERSION" ] ; then
echo -e '\E[37;44m'"\033[1m ok 1 $DIST_VERSION \033[0m"
elif [ "$(cat /mnt/tmp_modif_liveusb/etc/apt/sources.list | grep "^deb " | sed -n 1p |awk '{print $3}')" ]; then
DIST_VERSION=$(cat /mnt/tmp_modif_liveusb/etc/apt/sources.list | grep "^deb " | sed -n 1p |awk '{print $3}')
echo -e '\E[37;44m'"\033[1m ok 2 $DIST_VERSION \033[0m"
else
rm "/tmp/Log_liveusb.txt"
sleep 2
echo -e "\033[1;47;31m Erreur: impossible de detecter version utilisé \033[0m" ;
exit 0
fi
export DIST_VERSION

#charger les differents sources.list
SOURCES

if [ ! "$(cat /mnt/tmp_modif_liveusb/etc/apt/origine.sources.list | grep "SOURCELISTLIVEUSB")" ]; then
echo -e '\E[37;44m'"\033[1m Remplacer  sources.list \033[0m"

if [ "$(cat /mnt/tmp_modif_liveusb/etc/issue | awk '{print $1}')" == "Ubuntu" ]; then
echo -e '\E[37;44m'"\033[1m Ubuntu \033[0m"
mv /mnt/tmp_modif_liveusb/etc/apt/sources.list /mnt/tmp_modif_liveusb/etc/apt/origine.sources.list
echo -e "${UBUNTU}" | tee /mnt/tmp_modif_liveusb/etc/apt/sources.list

elif [ "$(cat /mnt/tmp_modif_liveusb/etc/issue | awk '{print $1}')" == "Debian" ]; then
echo -e '\E[37;44m'"\033[1m Debian \033[0m"
mv /mnt/tmp_modif_liveusb/etc/apt/sources.list /mnt/tmp_modif_liveusb/etc/apt/origine.sources.list
echo -e "${DEBIAN}" | tee /mnt/tmp_modif_liveusb/etc/apt/sources.list
fi

fi

#recup de la conf connexion
#/etc/init.d/networking restart
cp -f /etc/resolv.conf /mnt/tmp_modif_liveusb/etc/resolv.conf
cp -f /etc/hosts /mnt/tmp_modif_liveusb/etc/hosts
echo -e "proc /proc proc defaults 0 0" | tee /mnt/tmp_modif_liveusb/etc/fstab

rm "/tmp/Log_liveusb.txt"
sleep 2

#Créer utilisateur liveusb
function ADD_USER()
{
MESSAGE="Création de l'utilisateur temporaire: liveusb"
TIMEOUT&
chroot /mnt/tmp_modif_liveusb<<"EOF"
export LANG="$(cat /opt/lang.txt)"
export LC_ALL=C
useradd -d /home/liveusb -m liveusb -s /bin/bash -p U6aMy0wojraho
usermod -G root,disk,adm,dialout,fax,cdrom,floppy,tape,audio,dip,plugdev,scanner,fuse,admin,sambashare,lpadmin,video,netdev liveusb
ADD="Defaults\tenv_reset
%sudo ALL=NOPASSWD: ALL
root ALL=(ALL) ALL
%admin ALL=(ALL) NOPASSWD: ALL
liveusb ALL=(ALL) NOPASSWD: ALL"
echo -e "$ADD" | tee /etc/sudoers
[ ! -e /home/liveusb/.gconf ] && mkdir /home/liveusb/.gconf
[ ! -e /home/liveusb/.gconfd ] && mkdir /home/liveusb/.gconfd
sleep 2
EOF
rm "/tmp/Log_liveusb.txt"
sleep 2
}
ADD_USER


MESSAGE="Mise en place du chroot..."
TIMEOUT&
function TEST()
{
echo -e '\E[37;44m'"\033[1m Mise en place du chroot \033[0m"
chroot /mnt/tmp_modif_liveusb<<"EOF"
export LANG="$(cat /opt/lang.txt)"
export HOME=/root
export LC_ALL=C
mount -t proc none /proc
mount -t sysfs none /sys
cd /dev
MAKEDEV generic
mount -t devpts none /dev/pts
/etc/init.d/dbus restart
sleep 2
EOF
}
#TEST
function TEST2()
{
echo -e '\E[37;44m'"\033[1m Mise en place du chroot \033[0m"
#for dir in /proc /sys /tmp /dev /dev/pts ; do mount --bind $dir /mnt/tmp_modif_liveusb$dir ; done
mount -t proc -o bind /proc '/mnt/tmp_modif_liveusb/proc'
mount -t sys -o bind /sys '/mnt/tmp_modif_liveusb/sys'
mount -t dev -o bind /dev '/mnt/tmp_modif_liveusb/dev'
mount -t pts -o bind /dev/pts '/mnt/tmp_modif_liveusb/dev/pts'
#mount --bind /tmp /mnt/tmp_modif_liveusb/tmp
chroot /mnt/tmp_modif_liveusb /etc/init.d/dbus restart
sleep 2
}
TEST2
rm "/tmp/Log_liveusb.txt"
sleep 2


if [ "$(ls -A /mnt/tmp_modif_liveusb/proc | wc -w)" == "0" ]; then
echo -e "\033[1;47;31m Erreur: /proc \033[0m" ;
exit 0
elif [ "$(ls -A /mnt/tmp_modif_liveusb/sys | wc -w)" == "0" ]; then
echo -e "\033[1;47;31m Erreur: /sys \033[0m" ;
exit 0
fi

#check SETUID
if [ ! "$(cd /mnt/tmp_modif_liveusb/bin && find . -perm +4000)" ]; then
echo -e "\033[1;47;31m Erreur: droits incorrect sur squashfs \033[0m" ;
rm "/tmp/Log_liveusb.txt"
sleep 2
exit 0
fi

MESSAGE="Ajout de dépendances"
TIMEOUT&

chroot /mnt/tmp_modif_liveusb<<"EOF"
export LANG="$(cat /opt/lang.txt)"
export HOME=/root
export LC_ALL=C
apt-get install -y lsb-release &>/dev/null
EOF

chroot /mnt/tmp_modif_liveusb<<"EOF"
export LANG="$(cat /opt/lang.txt)"
export HOME=/root
export LC_ALL=C

NOM_DISTRO=$(lsb_release -i | awk '{print $3}')
#if [ "${NOM_DISTRO}" == "Ubuntu" ]; then
if [ "$(cat /etc/X11/default-display-manager | grep gdm)" ]; then
echo -e '\E[37;44m'"\033[1m ${NOM_DISTRO} gnome environement \033[0m"
#ici ajouer soft specifiques à ubuntu tous desktop
apt-get install -y ntfs-3g ntfs-config &>/dev/null
if ! which synaptic >/dev/null 2>&1; then
apt-get install -y synaptic &>/dev/null
fi
fi

if [ "$(cat /etc/X11/default-display-manager | grep kdm)" ]; then
echo -e '\E[37;44m'"\033[1m ${NOM_DISTRO} kde environement \033[0m"
if [ "$(basename $(cat /etc/X11/default-display-manager | grep kdm))" == "kdm" ]; then
apt-get install -y kpackage &>/dev/null
fi
fi
EOF

chroot /mnt/tmp_modif_liveusb<<"EOF"
export LANG="$(cat /opt/lang.txt)"
export HOME=/root
export LC_ALL=C
apt-get install -y zenity &>/dev/null
EOF

#augmenter taille du cache à 135Mo pour xfce4
chroot /mnt/tmp_modif_liveusb<<"EOF"
export LANG="$(cat /opt/lang.txt)"
export HOME=/root
export LC_ALL=C
if [ -e /etc/xdg/autostart/xfce4-tips-autostart.desktop ] ; then
echo "APT::Cache-Limit 141943904;" > /etc/apt/apt.conf.d/00configperso
apt-get update #maj de sources.list
apt-get install -y synaptic &>/dev/null
echo -e '\E[37;44m'"\033[1m xfce4 détecté \033[0m"
fi
EOF

rm "/tmp/Log_liveusb.txt"
sleep 2

#demarrer session graghique
function START_SESSION()
{
killall -9 $(echo "$XGRAPH" | awk '{print $1}') &>/dev/null
rm -f /tmp/.X5-lock
exec $XGRAPH &
sleep 2
DISPLAY=localhost:5.0 metacity --replace&
DISPLAY=localhost:5.0 xclock&
DISPLAY=localhost:5.0 setxkbmap -layout ${MODLANG[0]} -model pc105&
sleep 2
DISPLAY=localhost:5.0 metacity --replace&
XN1=$(ps ax | grep $(echo "$XGRAPH" | awk '{print $1}') | grep -v grep | awk '{print $1}' | xargs)
if [ ! "$XN1" ]; then
echo -e "\033[1;47;31m Erreur: Détection $(echo "$XGRAPH" | awk '{print $1}') \033[0m" ;
zenity --error --text "Erreur: Détection $(echo "$XGRAPH" | awk '{print $1}')"
exit 0
fi
}
START_SESSION

}
###################_FIN_PREPA2_###################


###################_MOD_SOURCELIST_##################
function MOD_SOURCELIST()
{
if [ "$DIST_VERSION" ] ; then
echo -e '\E[37;44m'"\033[1m $DIST_VERSION \033[0m"
#charger les differents sources.list
SOURCES

MOD_SOURCELIST=$(zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=440 \
--height=240 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
TRUE "A" "Éditer le fichier sources.list" \
FALSE "B" "Remlacer/Éditer sources.list par celui du script" \
FALSE "C" "Éditer vos key personnelles" \
FALSE "" "Passer cette étape" \
)
if [ "${MOD_SOURCELIST}" == "B" ]; then
echo -e '\E[37;44m'"\033[1m Remlacer sources.list par celui du script \033[0m"
if [ "$(cat /mnt/tmp_modif_liveusb/etc/issue | awk '{print $1}')" == "Ubuntu" ]; then
echo -e '\E[37;44m'"\033[1m Ubuntu \033[0m"
mv /mnt/tmp_modif_liveusb/etc/apt/sources.list /mnt/tmp_modif_liveusb/etc/apt/origine.sources.list
echo -e "${UBUNTU}" | tee /mnt/tmp_modif_liveusb/etc/apt/sources.list
elif [ "$(cat /mnt/tmp_modif_liveusb/etc/issue | awk '{print $1}')" == "Debian" ]; then
echo -e '\E[37;44m'"\033[1m Debian \033[0m"
mv /mnt/tmp_modif_liveusb/etc/apt/sources.list /mnt/tmp_modif_liveusb/etc/apt/origine.sources.list
echo -e "${DEBIAN}" | tee /mnt/tmp_modif_liveusb/etc/apt/sources.list
fi
fi

if [ "$(echo -e ${MOD_SOURCELIST} | grep -E "A|B")" ]; then
echo -e '\E[37;44m'"\033[1m Éditer le fichier sources.list (1) \033[0m"
if which gedit >/dev/null 2>&1; then
gedit /mnt/tmp_modif_liveusb/etc/apt/sources.list
elif which kwrite >/dev/null 2>&1; then
kwrite /mnt/tmp_modif_liveusb/etc/apt/sources.list
elif which kate >/dev/null 2>&1; then
kate /mnt/tmp_modif_liveusb/etc/apt/sources.list
else
echo -e "\033[1;47;31m Erreur: pas trouvé éditeur de texte. \033[0m" ;
fi
fi

if [ "${MOD_SOURCELIST}" == "C" ]; then
echo -e '\E[37;44m'"\033[1m Éditer vos key personnelles \033[0m"
if [ ! -e "/mnt/tmp_modif_liveusb/etc/apt/gpg-key-add-list.txt" ]; then
echo -e "${GPG_KEY}" | tee /mnt/tmp_modif_liveusb/etc/apt/gpg-key-add-list.txt
fi
if which gedit >/dev/null 2>&1; then
gedit /mnt/tmp_modif_liveusb/etc/apt/gpg-key-add-list.txt
elif which kwrite >/dev/null 2>&1; then
kwrite /mnt/tmp_modif_liveusb/etc/apt/gpg-key-add-list.txt
elif which kate >/dev/null 2>&1; then
kate /mnt/tmp_modif_liveusb/etc/apt/gpg-key-add-list.txt
else
echo -e "\033[1;47;31m Erreur: pas trouvé éditeur de texte. \033[0m" ;
fi
#Import des clé gpg dans le chroot
FCT_UPDATE
fi

else
echo -e "\033[1;47;31m Erreur: impossible de detecter version utilisé \033[0m" ;
fi
}
###################_fin_MOD_SOURCELIST_##################


###################_FCT_UPDATE_##################
function FCT_UPDATE()
{
MESSAGE="Import des clé gpg dans le chroot"
TIMEOUT&
#ajout des clé dans chroot && maj de sources.list
chroot /mnt/tmp_modif_liveusb<<"EOF"
export LANG="$(cat /opt/lang.txt)"
export HOME=/root
export LC_ALL=C
#conf perso
if [ ! -e "/etc/apt/gpg-key-add-list.txt" ]; then
echo -e "${GPG_KEY}" | tee /etc/apt/gpg-key-add-list.txt
fi
. /etc/apt/gpg-key-add-list.txt
#maj de sources.list
apt-get update
EOF
rm "/tmp/Log_liveusb.txt"
sleep 2
}
###################_fin_FCT_UPDATE_##################


###################_FCT_UPGRADE_##################
function FCT_UPGRADE()
{
CHOIX=$(zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=360 \
--height=220 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
TRUE "A" "Faire apt-get upgrade" \
FALSE "B" "Faire apt-get dist-upgrade" \
FALSE "C" "Faire apt-get check" \
)
if [ "${CHOIX}" == "A" ]; then
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
xterm -title 'Upgrade' -e "apt-get dist-upgrade"
EOF
elif [ "${CHOIX}" == "B" ]; then
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
xterm -title 'dist-upgrade' -e "apt-get dist-upgrade"
EOF
elif [ "${CHOIX}" == "C" ]; then
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
xterm -title 'check' -e "apt-get check && echo \"Veuillez fermer cette fenêtre...\" && read"
EOF
fi
MESSAGE="Suppression des paquets inutiles en cours..."
TIMEOUT&
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
apt-get autoremove -y
EOF
rm /tmp/Log_liveusb.txt
sleep 2
}
###################_fin_FCT_UPGRADE_##################


###################_GNOME_COMMANDER_##################
#hors du chroot en local
function GNOME_COMMANDER()
{
if [ -d "/mnt/tmp_modif_liveusb/" ]; then 
zenity --info --width 600  --text "Attention!
Lire attentivement ce qui suit.

A la fermeture de cette fenêtre \"gnome-commander\"
va s'ouvrir pour vous permettre de rajouter des
fichiers/dossiers personnels.
A la fermeture de \"gnome-commander\" 
le script continuera son execution.

je vous donne le chemin actuel de 
quelques emplacements standart de votre LiveCD/USB

Racine:
/mnt/tmp_modif_liveusb
Fonds ecrans:
/mnt/tmp_modif_liveusb/usr/share/backgrounds
Polices:
/mnt/tmp_modif_liveusb/usr/share/fonts
Dossier user du liveCD:
/mnt/tmp_modif_liveusb/home/liveusb
Chemin de l\'image splash de gnome:
/usr/share/pixmaps/splash/gnome-splash.png
opt (bien de mettre script/soft  compilés/... ici):
/mnt/tmp_modif_liveusb/opt
Sources:
/mnt/tmp_modif_liveusb/usr/src
"
if [ -e "/mnt/tmp_modif_liveusb/usr/share/backgrounds" ]; then
FOLDER_GC="/mnt/tmp_modif_liveusb/usr/share/backgrounds/"
else
FOLDER_GC="/mnt/tmp_modif_liveusb/"
fi
gnome-commander -l "$FOLDER_GC" -r /usr/share/backgrounds/
fi
}
###################_fin_GNOME_COMMANDER_##################


###################_ADD_BACKGROUNDS_##################
function ADD_BACKGROUNDS()
{
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
#sudo gedit /usr/share/gnome-background-properties/ubuntu-wallpapers.xml
verif=()
folder=$(ls /usr/share/backgrounds/ | grep -iE "*.jpeg|*.jpg|*.jif|*.jfif|*.png")
header="<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
<wallpapers>"
echo -e "$header" | tee /tmp/custom-wallpapers.xml
for file in $folder
do
if [ ! $(grep "/usr/share/backgrounds/$file" /usr/share/gnome-background-properties/ubuntu-wallpapers.xml) ]; then
echo -e '\E[37;44m'"\033[1m Ajouter: $file \033[0m"
verif=("${verif[@]}" "$file")
body="  <wallpaper>
    <name>Ubuntu</name>
    <filename>/usr/share/backgrounds/$file</filename>
    <options>zoom</options>
    <pcolor>#8f4a1c</pcolor>
    <scolor>#8f4a1c</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>"
echo -e "$body" | tee -a /tmp/custom-wallpapers.xml
else
echo -e "\033[1;33;44m Y est dejà: $file \033[00m"
fi
done
foother="</wallpapers>"
echo -e "$foother" | tee -a /tmp/custom-wallpapers.xml
if [ "${#verif[@]}" -ge "1" ]; then #>=1
echo -e '\E[37;44m'"\033[1m Detection de background perso (${#verif[@]}), les ajouter \033[0m"
cat /tmp/custom-wallpapers.xml
cp -f /tmp/custom-wallpapers.xml /usr/share/gnome-background-properties/custom-wallpapers.xml
fi
EOF
}
###################_fin_ADD_BACKGROUNDS_##################


###################_MOD_INSTALL_###################
function MOD_INSTALL()
{

function FCT_GDM()
{
zenity --info --width 600  --text "Distribution utilisée:
$(chroot /mnt/tmp_modif_liveusb lsb_release -a)

6 fenêtres vont défiler les une après les autres
pour vous permettre de personnaliser votre Live CD/DVD/USB.
Ne fermez pas $(echo "$XGRAPH" | awk '{print $1}') (la grande fenetre) mais les fenêtres intérieures
qui vont défiler l'une après l'autre.

1°/ L'outil de gestion des sources de logiciels
2°/ Le sélécteur de languages
3°/ L'outil de mise à jour
4°/ L'outil d'activation pour support en ecriture de NTFS
5°/ gnome-app-install le sélecteur de logiciels de gnome
6°/ synaptic, pour ajouter ce que vous souhaitez...
                         ______
Veuillez cliquer sur le bouton Valider pour continuer....
"
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
software-properties-gtk &>/dev/null
gnome-language-selector &>/dev/null
update-manager &>/dev/null
ntfs-config &>/dev/null
if which gnome-app-install >/dev/null 2>&1 ; then
gnome-app-install &>/dev/null
fi
synaptic
EOF
}

function FCT_KDM()
{
zenity --info --width 600  --text "Distribution utilisée:
$(chroot /mnt/tmp_modif_liveusb lsb_release -a)

4 fenêtres vont défiler les une après les autres
pour vous permettre de personnaliser votre Live CD/DVD/USB.
Ne fermez pas $(echo "$XGRAPH" | awk '{print $1}') (la grande fenetre) mais les fenêtres intérieures
qui vont défiler l'une après l'autre.
patientez, konsole est un peu long à arriver...

1°/ adept_updater le gestionnaire de mise à jour.
2°/ adept_installer manager d'install.
3°/ konsole le terminal pour les pro!.
4°/ adept_manager les gestionnaire de paquets pour les humains!.
                         ______
Veuillez cliquer sur le bouton Valider pour continuer....
"
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
adept_updater
adept_installer
konsole
adept_manager
EOF
}


function FCT_E17()
{
zenity --info --width 600  --text "Distribution utilisée:
$(chroot /mnt/tmp_modif_liveusb lsb_release -a)

au programme:
synaptic, pour ajouter ce que vous souhaitez...
                         ______
Veuillez cliquer sur le bouton Valider pour continuer....
"
echo "Custom E17"
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
synaptic
EOF
}


function FCT_XDM()
{
#xdm
zenity --info --width 600  --text "xdm pas encore codé\!"
echo "xdm pas codé"
}


if [ "$DESK_ENV" == "kdm" ] ; then
echo -e '\E[37;44m'"\033[1m kdm environement compatible \033[0m"
FCT_KDM
elif [ "$DESK_ENV" == "gdm" ] ; then
echo -e '\E[37;44m'"\033[1m gdm environement compatible \033[0m"
FCT_GDM
elif [ "$DESK_ENV" == "xdm" ] ; then
echo -e '\E[37;44m'"\033[1m xdm environement compatible \033[0m"
FCT_XDM
elif [ "$DESK_ENV" == "E17" ] ; then
echo -e '\E[37;44m'"\033[1m E17 environement compatible \033[0m"
FCT_E17
fi

function CHROOT_REINSTALL()
{
#Reinstaller linux-image car sur livecd d'origine pas complet manque notament madwifi
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/root
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
xterm -title 'reinstall linux-image & linux-headers' -e "apt-get install --reinstall -y linux-image-${VERSION_LIN} linux-headers-${VERSION_LIN}"
EOF
}
CHROOT_REINSTALL

}
###################_F.I.N_MOD_INSTALL_###################


###################_MOD_INITRAMFS_###################
function MOD_INITRAMFS()
{
#modifier politique dbus
#sed -i "s/<deny /<allow /g" /mnt/tmp_modif_liveusb/etc/dbus-1/system.conf
#passer param a dbus voir man dbus-daemon
#sed -i "s/PARAMS=\"\"/PARAMS=\"--system\"/g" /mnt/tmp_modif_liveusb/etc/default/dbus
#modif politique Network Manager Applet work
#sudo sed -i "s/<deny /<allow /g" /mnt/tmp_modif_liveusb/etc/dbus-1/system.d/NetworkManager.conf
#sudo sed -i "s/<deny /<allow /g" /mnt/tmp_modif_liveusb/etc/dbus-1/system.d/nm-applet.conf

sed -i "s/XKBMODEL=\"pc105\"/XKBMODEL=\"${MODLANG[6]}\"/g" \
	/mnt/tmp_modif_liveusb/etc/default/console-setup

sed -i "s/XKBLAYOUT=\"us\"/XKBLAYOUT=\"${MODLANG[0]}\"/g" \
	/mnt/tmp_modif_liveusb/etc/default/console-setup

sed -i "s/XKBVARIANT=\"\"/XKBVARIANT=\"${MODLANG[5]}\"/g" \
	/mnt/tmp_modif_liveusb/etc/default/console-setup

#sudo gedit /etc/default/locale  #LANG="fr_FR.UTF-8"
#sudo gedit /etc/environment
#sudo gedit /etc/default/console-setup
#sudo gedit /etc/xdg/user-dirs.conf
#sudo gedit /etc/xdg/user-dirs.defaults
#gedit $HOME/.config/user-dirs.dirs
#gedit $HOME/.config/user-dirs.locale

##modifs locales
##/etc/default/locale /etc/default/console-setup /etc/environment /etc/init.d/activer-driver-proprio
chmod 644 /mnt/tmp_modif_liveusb/etc/default/locale
echo -e "LANG=\"${MODLANG[0]}_${MODLANG[1]}.${MODLANG[2]}\"" | tee /mnt/tmp_modif_liveusb/etc/default/locale
##locale-gen
#chroot /mnt/tmp_modif_liveusb locale-gen ${MODLANG[0]}_${MODLANG[1]}.${MODLANG[2]}

#modifier user-dirs.locale
echo -e "${MODLANG[0]}_${MODLANG[1]}" | tee /mnt/tmp_modif_liveusb/home/liveusb/.config/user-dirs.locale

#correction du bog sur hardy en mode persistent
#sed -i "s/rw,noatime,mode=755/rw,noatime,mode=0755/" \
sed -i "s/rw,noatime,mode=755/rw,noatime/" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper

#modif casper pour support de toram
# copying to ram:
#http://www.pendrivelinux.com/2007/10/15/ubuntu-toram-how-to-make-ubuntu-boot-to-ram/
#https://wiki.ubuntu.com/BootToRAM
if [ ! "$(cat /mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper | grep 'export TORAM="Yes"' )" ]; then 
sed -i "s/            ip\*)/            toram)\n                export TORAM=\"Yes\" ;;\n            ip\*)/" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper
fi

#modif 02timezone
sed -i "s/UTC/$(echo "${MODLANG[7]}" | sed 's/\//\\\//')/" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/02timezone

#modifier locale=en_US.UTF-8
sed -i "s/en_US.UTF-8/${MODLANG[0]}_${MODLANG[1]}.${MODLANG[2]}/g" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/14locales

#keyboard reglages xorg #kbd=fr #cslayout= #csvariant= #csmodel=
sed -i "s/^kbd=us$/kbd=${MODLANG[0]}/g" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/19keyboard

sed -i "s/en_US.UTF-8/${MODLANG[0]}_${MODLANG[1]}.${MODLANG[2]}/g" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/20xconfig

#reactiver hibernation
sed -i "s/can_hibernate false/can_hibernate true/" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/32disable_hibernation

#modifs specifiques a LiveUSB
if [ "${CHECK_CDUSB}" == "usb" ]; then
##supptimer verif de mise a jour au demarrage
rm /mnt/tmp_modif_liveusb/etc/xdg/autostart/update-notifier.desktop

##modifier mountpoint cdrom en liveusb
function MOD_CDROM()
{
sed -i "s/^mountpoint=\/cdrom/mountpoint=\/liveusb/" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper
sed -i "s/^mountpoint=\/cdrom/mountpoint=\/liveusb/" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-premount/10driver_updates
sed -i "s/\/cdrom/\/liveusb/g" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/01integrity_check
sed -i "s/\/cdrom/\/liveusb/g" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/05mountpoints
mount -t ext3 ${EXTLINUXDEVICE} /mnt/liveusb
if [ -e "/mnt/liveusb/extlinux.conf" ]; then 
echo -e '\E[37;44m'"\033[1m Modif de extlinux.conf \033[0m";
sudo sed -i "s/file=\/preseed\//file=\/liveusb\/preseed\//g" \
	/mnt/liveusb/extlinux.conf
fi
umount /mnt/liveusb
}
#MOD_CDROM

#modif extinction pour bog eee-pc
function EEE_PC()
{
if [ ! "$(grep "rmmod snd-hda-intel" /mnt/tmp_modif_liveusb/etc/init.d/halt)" ]; then
RECHERCHER='do_stop () {'
REMPLACER='do_stop () {\n\trmmod snd-hda-intel'
sudo sed -i "s%${RECHERCHER}%${REMPLACER}%g" \
	/mnt/tmp_modif_liveusb/etc/init.d/halt
fi
}
#EEE_PC

#pas la peine j'etais passé a coté de l'option de boot:noprompt
# Removing Enter Prompt at shutdown
#echo -e '\E[37;44m'"\033[1m Supprimer attente Enter Prompt at shutdown \033[0m"
#sed -i '/#/!s/\/sbin\/usplash_write \"/#\/sbin\/usplash_write \"/g' \
#	/mnt/tmp_modif_liveusb/etc/init.d/casper
#supprimer attende de enter
#sed -i '/#/!s/read x < \/dev\/console/#read x < \/dev\/console/g' \
#	/mnt/tmp_modif_liveusb/etc/init.d/casper
#supprimer eject cdrom
#sudo sed -i '/#/!s/eject -p -m \/cdrom >\/dev\/null/#eject -p -m \/cdrom >\/dev\/null/g' \
#	/mnt/tmp_modif_liveusb/etc/init.d/casper

fi 
#fin modifs specifiques a LiveUSB
} 
###################_MOD_INITRAMFS_###################


###################_CUSTOM_LOGIN_###################
function CUSTOM_LOGIN()
{
###################_nom_utilisateur_###################
#permer de modifier user par defaut
function MOD_USER()
{
USER_LIVEUSB="$(cat /mnt/tmp_modif_liveusb/etc/casper.conf | grep "export USERNAME" | awk -F= '{print $2}'  | sed 's/[\"]//g')"

MOD_CHOIX=$(zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=400 \
--height=180 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
FALSE "A" "Changer le mon utilisateur" \
TRUE "B" "Pas la peine je garde \"${USER_LIVEUSB}\"" \
)
if [ "${MOD_CHOIX}" == "A" ]; then
NOMSRESREVES=""
NOMSRESREVES="$(cat  /mnt/tmp_modif_liveusb/usr/lib/user-setup/reserved-usernames | grep -v "^#"  | sed '/^$/d' | xargs)"
TEXT="Saisissez votre nom d'utilisateur (Caractères autorisés: [A-Za-z0-9_-*.])"
function SAISIE_NOM()
{
USER_LIVEUSB="$(zenity \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=600 \
--height=120 \
--title="Modifier nom utilisateur" \
--text="$TEXT" \
--entry \
--entry-text "" \
)"
for i in $NOMSRESREVES ;
do
if [ "$USER_LIVEUSB" == "$i" ]; then
TEXT="Erreur: le nom \"$USER_LIVEUSB\" est réservé,
veuillez en choisir un autre."
TEST="stop"
break
fi
done
if [ ! "$(echo -e "$USER_LIVEUSB" | grep '^[A-Za-z0-9_-*.]*$')" ]; then
TEXT="Erreur: le nom \"$USER_LIVEUSB\" contiens un caractère non valide,
veuillez en choisir un autre."
TEST="stop"
fi
}
while true; do
TEST=""
SAISIE_NOM
if [ "${TEST}" != "stop" ]; then 
echo "USER_LIVEUSB:$USER_LIVEUSB"; 
CHANGE_USER="# This file should go in /etc/casper.conf
# Supported variables are:
# USERNAME, USERFULLNAME, HOST, BUILD_SYSTEM

export USERNAME=\"$USER_LIVEUSB\"
export USERFULLNAME=\"$USER_LIVEUSB session\"
export HOST=\"$USER_LIVEUSB\"
export BUILD_SYSTEM=\"$USER_LIVEUSB\"
"
echo -e "${CHANGE_USER}" | tee /mnt/tmp_modif_liveusb/etc/casper.conf
break; 
fi
done
fi
}
MOD_USER
###################_fin_nom_utilisateur_###################

###################_RESET_PASS_###################
function RESET_PASS() #hors chroot remettre pass vide: U6aMy0wojraho
{
CHEMIN_USER="/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/10adduser"
if [ ! "$(cat $CHEMIN_USER | grep 'user-password-crypted U6aMy0wojraho')" ]; then
RESET_PASS=$(zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=640 \
--height=180 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
FALSE "A" "Remettre le mot de passe vide (vous permettra d\'en changer)" \
TRUE "B" "Pas la peine, je garde le même mot de passe" \
)
if [ "${RESET_PASS}" == "A" ]; then
echo -e '\E[37;44m'"\033[1m Reset pass \033[0m"
sed -i 's/set passwd\/user-password-crypted .*\.*/set passwd\/user-password-crypted U6aMy0wojraho/' "$CHEMIN_USER"
sed -i 's/set passwd\/root-password-crypted .*\.*/set passwd\/root-password-crypted */' "$CHEMIN_USER"
sed -i 's/=(ALL) ALL/=(ALL) NOPASSWD: ALL/g' "$CHEMIN_USER"
sed -i 's/\$\/(ALL) ALL/\$\/(ALL) NOPASSWD: ALL/g' "$CHEMIN_USER"
FICHIER=$(cat /mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/15autologin)
echo -e "$FICHIER" | sed '/FirstLogin=false/!s/false/true/g' >/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/15autologin
#reactiver modif de PolicyKit.conf
chmod +x /mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/44pk_allow_ubuntu
chmod +x /mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/45disable_guest_account
#remettre uid en 999
sed -i "s/set passwd\/user-uid 1000/set passwd\/user-uid 999/" $CHEMIN_USER
#>/mnt/tmp_modif_liveusb/etc/nologin
sed -i '/\t#sed.*\/root\/etc\/pam\.d\/login/s/^\t#/\t/' /mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/25configure_init
#supprimer /bin/false
sed -i 's/\/bin\/false//' /mnt/tmp_modif_liveusb/etc/shells
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/root
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
xterm -e "pam-auth-update --force"
EOF

fi
fi
}
RESET_PASS
###################_fin_RESET_PASS_###################

###################_pass_###################
function CHOIX_PASS() #hors chroot changer pass vide: U6aMy0wojraho
{
SAISIE_PASS1="";SAISIE_PASS2="";
CHEMIN_USER="/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/10adduser"
CAT_CHEMIN_USER=$(cat $CHEMIN_USER)
TEST_PASS=$(echo -e "$CAT_CHEMIN_USER" | grep -i "set passwd/user-password-crypted U6aMy0wojraho")
if [[ -e $CHEMIN_USER && -n $TEST_PASS ]]; then
zenity --info --width 600  --text "
l'étape suivante va vous permettre de modifier,
si vous le souhaitez le mot de passe de l'utilisateur
qui par defaut est (vide,sans mot de passe) du LiveCD/USB.
si vous souhaitez passer cette étape à la prochaine fenetre
utilisez le bouton \"Annuler\" .
"
function SAISIE()
{
SAISIE_PASS1=$(zenity --entry --hide-text --text "Saisie du mot de passe utilisateur (1)")
test $? -ne 0 && break && SAISIE_PASS1="" && SAISIE_PASS2="" # Bouton Annuler
sleep 2
SAISIE_PASS2=$(zenity --entry --hide-text --text "Confirmez, Saisie du mot de passe utilisateur (2)")
test $? -ne 0 && break && SAISIE_PASS1="" && SAISIE_PASS2="" # Bouton Annuler
}
while [[ "$SAISIE_PASS1" != "$SAISIE_PASS2" || "$(echo -e "$SAISIE_PASS1" | wc -m)" -le "6" ]]
do
SAISIE
if [[ -n "$SAISIE_PASS1" && -n "$SAISIE_PASS2" ]]; then
if  [ $(echo -e "$SAISIE_PASS1" | wc -m) -le 6 ]; then
echo -e "\033[1;47;31m la saisie minimum est de 6 caractères \033[0m" ;
elif [ "$SAISIE_PASS1" != "$SAISIE_PASS2" ]; then
echo -e "\033[1;47;31m Erreur: pass 1 et 2 differents! \033[0m" ;
fi
fi
done
if [[ "$SAISIE_PASS1" == "$SAISIE_PASS2" && "$(echo -e "$SAISIE_PASS1" | wc -m)" -ge "6" ]]; then
echo -e '\E[37;44m'"\033[1m Pass ok on modifie \033[0m"

export SAISIE_PASS1
CRYPTER=""
CRYPTER="$(chroot /mnt/tmp_modif_liveusb mkpasswd -s $SAISIE_PASS1)"
while [[ ! `echo "$CRYPTER" | grep -w "^[A-Za-z0-9]*$"` ]]; do
echo -e "\033[1;33;44m Mauvais mot de passe CRYPTEDPASS:$CRYPTER, Nouvelle tentative... \033[00m"
CRYPTER="$(chroot /mnt/tmp_modif_liveusb mkpasswd -s $SAISIE_PASS1)"
done
echo -e '\E[37;44m'"\033[1m mkpasswd:$CRYPTER \033[0m"

if [ "$CRYPTER" ]; then
USER_LIVEUSB="$(cat /mnt/tmp_modif_liveusb/etc/casper.conf | grep "export USERNAME" | awk -F= '{print $2}'  | sed 's/[\"]//g')"
MOD_PASS=$(zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=640 \
--height=200 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
FALSE "A" "Utiliser mot de passe choisit pour utilisateur $USER_LIVEUSB (droit sudo sans pass)" \
TRUE "B" "Utiliser mot de passe choisit pour utilisateur $USER_LIVEUSB et sudo (demandera pass pour taches administration)" \
)
if [ "${MOD_PASS}" == "A" ]; then
#passer uid en 1000
sed -i "s/set passwd\/user-uid 999/set passwd\/user-uid 1000/" $CHEMIN_USER
sed -i 's/set passwd\/root-password-crypted .*\.*/set passwd\/root-password-crypted */' "$CHEMIN_USER"
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/root
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
xterm -e "pam-auth-update --force"
EOF
CAT_CHEMIN_USER=$(cat $CHEMIN_USER)
MODIF_PASS=$(echo -e "$CAT_CHEMIN_USER" | sed "s/set passwd\/user-password-crypted U6aMy0wojraho/set passwd\/user-password-crypted ${CRYPTER}/")
echo -e "$MODIF_PASS" | tee "$CHEMIN_USER"

elif [ "${MOD_PASS}" == "B" ]; then
#passer uid en 1000
sed -i "s/set passwd\/user-uid 999/set passwd\/user-uid 1000/" $CHEMIN_USER
sed -i 's/set passwd\/root-password-crypted .*\.*/set passwd\/root-password-crypted */' "$CHEMIN_USER"
#http://www.linux-france.org/article/man-fr/man5/nologin-5.html
#ATTENTION danger reactive  connexions externes
#rm /mnt/tmp_modif_liveusb/etc/nologin
#supprimer politique tous privileges user
chmod -x '/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/44pk_allow_ubuntu' 
#reactiver acces session guest 
chmod -x '/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/45disable_guest_account' 
#ajouter /bin/false
if [ ! "$(grep "/bin/false" /mnt/tmp_modif_liveusb/etc/shells)" ]; then
echo -e "/bin/false" | tee -a /mnt/tmp_modif_liveusb/etc/shells
sed -i '/^$/d' /mnt/tmp_modif_liveusb/etc/shells
fi
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/root
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
xterm -e "pam-auth-update --force"
EOF
CAT_CHEMIN_USER=$(cat $CHEMIN_USER)
MODIF_PASS=$(echo -e "$CAT_CHEMIN_USER" | sed "s/set passwd\/user-password-crypted U6aMy0wojraho/set passwd\/user-password-crypted ${CRYPTER}/")
echo -e "$MODIF_PASS" | tee "$CHEMIN_USER"
#CAT_CHEMIN_USER=$(cat $CHEMIN_USER)
#MODIF_PASSROOT=$(echo -e "$CAT_CHEMIN_USER" | sed "s/set passwd\/root-password-crypted \*/set passwd\/root-password-crypted ${CRYPTER}/")
#echo -e "$MODIF_PASSROOT" | tee "$CHEMIN_USER"
sed -i -e 's/NOPASSWD: ALL/ALL/g' "$CHEMIN_USER"

fi
fi

fi
fi
TEST_PASS=$(cat "$CHEMIN_USER" | grep -i "/bin/sh")
if [ ! $TEST_PASS ]; then
echo -e "\033[1;47;31m Erreur: sed au changement de pass \033[0m" ;
exit 0
fi
}
CHOIX_PASS
###################_fin_pass_###################

###################_AUTO_LOGIN_###################
if [ ! "$(cat /mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/10adduser | grep 'user-password-crypted U6aMy0wojraho')" ]; then
function AUTO_LOGIN()
{
if [ -x "/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/15autologin" ]; then
# substituer  "true" par "false" A L'EXCEPTION des lignes contenant "FirstLogin=false"
# sed '/FirstLogin=false/!s/true/false/g'
function AUTO_LOGIN_FALSE()
{
FICHIER=$(cat /mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/15autologin)
echo -e "$FICHIER" | sed '/FirstLogin=false/!s/true/false/g' >/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/15autologin
}
function AUTO_LOGIN_TRUE()
{
FICHIER=$(cat /mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/15autologin)
echo -e "$FICHIER" | sed '/FirstLogin=false/!s/false/true/g' >/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/15autologin
}
if [ "$(echo -e "$FICHIER" | grep -e "=true")" ]; then
	STATUT="actif"
else
	STATUT="inactif"
fi
AUTO_LOGIN=$(zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous
(l'autologin est actuellement $STATUT)" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=400 \
--height=220 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Activer/Désactiver autologin" \
--hide-column="2" \
TRUE "Z" "Ne rien modifier" \
FALSE "A" "Activer autologin (choix par defaut)" \
FALSE "B" "Désactiver autologin" \
)
if [ "${AUTO_LOGIN}" == "A" ]; then 
AUTO_LOGIN_TRUE
elif [ "${AUTO_LOGIN}" == "B" ]; then 
AUTO_LOGIN_FALSE
fi
fi
}
AUTO_LOGIN
fi
###################_fin_AUTO_LOGIN_###################
}
###################_fin_CUSTOM_LOGIN_###################


###################_MOD_PROPRIO_###################
function MOD_PROPRIO()
{
cd /tmp
if [ "$(chroot /mnt/tmp_modif_liveusb lsb_release -c | awk '{print $2}')" == "hardy" ]; then
wget -T 3 -t 3 ${HEBERGEMENT}/add-on/add-on-liveusb.8.04-drivers-proprio.sh -O add-on-liveusb.8.04-drivers-proprio.sh
. ./add-on-liveusb.8.04-drivers-proprio.sh
rm ./add-on-liveusb.8.04-drivers-proprio.sh
elif [ "$(chroot /mnt/tmp_modif_liveusb lsb_release -c | awk '{print $2}')" == "intrepid" ]; then
wget -T 3 -t 3 ${HEBERGEMENT}/add-on/add-on-liveusb.8.10-drivers-proprio.sh -O add-on-liveusb.8.10-drivers-proprio.sh
. ./add-on-liveusb.8.10-drivers-proprio.sh
rm ./add-on-liveusb.8.10-drivers-proprio.sh
else
zenity --info --text "Info\nInstallation des drivers propriétaires ATI et NVIDIA\nfonction non disponible pour $(chroot /mnt/tmp_modif_liveusb lsb_release -c | awk '{print $2}')"
fi
cd -
}
###################_FIN_MOD_PROPRIO_###################


###################_CUSTOM_GNOME_###################
function CUSTOM_GNOME()
{
if [ "$(chroot /mnt/tmp_modif_liveusb lsb_release -i | awk '{print $3}')" == "Ubuntu" ]; then
echo "_________________________________"

#si gnome-session
if [ "$(ls -l /mnt/tmp_modif_liveusb/etc/alternatives/x-session-manager | grep gnome-session)" ]; then
ADD_BACKGROUNDS

zenity --info --width 600  --text "
l'étape suivante va vous permettre de customiser Ubuntu/Gnome
au programme:
Précharger le démarrage rapide de OpenOffice
Personnaliser les éléments du bureau
changer appearance
choisir clavier
gconf-editor, pour les habitués
pessulus pour activer desactiver les applet disponibles
alacarte pour configurer les menus
gnome-panel pour modifier les tableau de bord
"

function CUSTOM_OO()
{
#Précharger le démarrage rapide de OpenOffice
OpenOffice=$(zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=520 \
--height=220 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
TRUE "A" "Précharger le démarrage rapide de OpenOffice" \
FALSE "B" "Supprimer Précharger le démarrage rapide de OpenOffice" \
FALSE "C" "Ne rien faire" \
)
if [ "${OpenOffice}" == "A" ]; then
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
echo -e '\E[37;44m'"\033[1m Précharger le démarrage rapide de OpenOffice \033[0m"
mkdir -p /home/liveusb/.config/autostart/ &>/dev/null
ln -s /usr/lib/openoffice/share/xdg/qstart.desktop /home/liveusb/.config/autostart/qstart.desktop
EOF
elif [ "${OpenOffice}" == "B" ]; then
echo -e '\E[37;44m'"\033[1m Supprimer Précharger le démarrage rapide de OpenOffice \033[0m"
rm /mnt/tmp_modif_liveusb/home/liveusb/.config/autostart/qstart.desktop
fi
}
CUSTOM_OO

function CUSTOM_NAUTILUS()
{
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
#http://doc.ubuntu-fr.org/gconf
mkdir -p /home/liveusb/.gconf
CUSTOMA=$(gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults --get "/apps/nautilus/desktop/computer_icon_visible")
CUSTOMB=$(gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults --get "/apps/nautilus/desktop/home_icon_visible")
CUSTOMC=$(gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults --get "/apps/nautilus/desktop/documents_icon_visible")
CUSTOMD=$(gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults --get "/apps/nautilus/desktop/network_icon_visible")
CUSTOME=$(gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults --get "/apps/nautilus/desktop/trash_icon_visible")
CUSTOMF=$(gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults --get "/apps/nautilus/desktop/volumes_visible")
if [ ! "$CUSTOMA" ]; then CUSTOMA="false" ;fi
if [ ! "$CUSTOMB" ]; then CUSTOMB="false" ;fi
if [ ! "$CUSTOMC" ]; then CUSTOMC="false" ;fi
if [ ! "$CUSTOMD" ]; then CUSTOMD="false" ;fi
if [ ! "$CUSTOME" ]; then CUSTOME="false" ;fi
if [ ! "$CUSTOMF" ]; then CUSTOMF="false" ;fi
CUSTOM_GCONF=$(zenity \
--title="Live CD/USB" \
--text="Choisir l\'option desiree dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=440 \
--height=280 \
--list \
--print-column="2" \
--checklist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction a executer" \
--hide-column="2" \
$CUSTOMA "A" ":Afficher Icône du poste de travail sur le bureau" \
$CUSTOMB "B" ":Afficher Icône home sur le bureau" \
$CUSTOMC "C" ":Afficher Icône documents sur le bureau" \
$CUSTOMD "D" ":Afficher Icône réseau sur le bureau" \
$CUSTOME "E" ":Afficher Icône poubelle sur le bureau" \
$CUSTOMF "F" ":Afficher Icône volumes montés sur le bureau" \
)
PRESS_BUTTON="$?"
if [ "${PRESS_BUTTON}" == "0" ]; then #PRESS_BUTTON
if [ "$(echo "${CUSTOM_GCONF}" | grep A)" ]; then RETOURA="true" ; else RETOURA="false" ;fi
if [ "$(echo "${CUSTOM_GCONF}" | grep B)" ]; then RETOURB="true" ; else RETOURB="false" ;fi
if [ "$(echo "${CUSTOM_GCONF}" | grep C)" ]; then RETOURC="true" ; else RETOURC="false" ;fi
if [ "$(echo "${CUSTOM_GCONF}" | grep D)" ]; then RETOURD="true" ; else RETOURD="false" ;fi
if [ "$(echo "${CUSTOM_GCONF}" | grep E)" ]; then RETOURE="true" ; else RETOURE="false" ;fi
if [ "$(echo "${CUSTOM_GCONF}" | grep F)" ]; then RETOURF="true" ; else RETOURF="false" ;fi

gconftool-2 --direct --config-source=xml:readwrite:/home/liveusb/.gconf --set "/apps/nautilus/desktop/computer_icon_visible" --type bool "$RETOURA"
gconftool-2 --direct --config-source=xml:readwrite:/home/liveusb/.gconf --set "/apps/nautilus/desktop/home_icon_visible" --type bool "$RETOURB"
gconftool-2 --direct --config-source=xml:readwrite:/home/liveusb/.gconf --set "/apps/nautilus/desktop/documents_icon_visible" --type bool "$RETOURC"
gconftool-2 --direct --config-source=xml:readwrite:/home/liveusb/.gconf --set "/apps/nautilus/desktop/network_icon_visible" --type bool "$RETOURD"
gconftool-2 --direct --config-source=xml:readwrite:/home/liveusb/.gconf --set "/apps/nautilus/desktop/trash_icon_visible" --type bool "$RETOURE"
gconftool-2 --direct --config-source=xml:readwrite:/home/liveusb/.gconf --set "/apps/nautilus/desktop/volumes_visible" --type bool "$RETOURF"

gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults --set "/apps/nautilus/desktop/computer_icon_visible" --type bool "$RETOURA"
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults --set "/apps/nautilus/desktop/home_icon_visible" --type bool "$RETOURB"
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults --set "/apps/nautilus/desktop/documents_icon_visible" --type bool "$RETOURC"
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults --set "/apps/nautilus/desktop/network_icon_visible" --type bool "$RETOURD"
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults --set "/apps/nautilus/desktop/trash_icon_visible" --type bool "$RETOURE"
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults --set "/apps/nautilus/desktop/volumes_visible" --type bool "$RETOURF"

fi #PRESS_BUTTON
EOF
}
CUSTOM_NAUTILUS


function MOD_GNOME()
{
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0

#Copie libflashplayer
#si inistallé
if [ "$(dpkg -l | grep -e flashplugin-nonfree)" ]; then
#verifié si accept lisence
if [ ! -e "/usr/lib/flashplugin-nonfree/libflashplayer.so" ]; then
gnome-terminal  -t "flashplugin-nonfree" -e "dpkg-reconfigure flashplugin-nonfree"
fi
#Copie libflashplayer
if [ -e "/usr/lib/mozilla/plugins" ]; then
mkdir -p /home/liveusb/.mozilla/plugins
cp -R /usr/lib/mozilla/plugins/*  /home/liveusb/.mozilla/plugins/
fi
fi

if [ ! -e /home/liveusb/.gtkrc-2.0 ]; then
echo -e "gtk-menu-popup-delay = 0" | tee -a /home/liveusb/.gtkrc-2.0
elif [ $(cat /home/liveusb/.gtkrc-2.0 | grep '^gtk-menu-popup-delay = 0') ]; then
echo -e "gtk-menu-popup-delay = 0" | tee -a /home/liveusb/.gtkrc-2.0
fi

EOF

#install pessulus
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
>/tmp/.gdm_socket
#metacity --replace&
xterm -title 'install pessulus' -e "apt-get install -y pessulus"
EOF

if [ "$(echo $DIST_VERSION | grep -E "hardy|intrepid")" ]; then
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
sudo chown -R liveusb:liveusb /home/liveusb
sudo -E -H -u liveusb gnome-appearance-properties %F
#visualiser les temmes metacity ex:
#metacity-theme-viewer Human
sudo -E -H -u liveusb gnome-keyboard-properties
sudo -E -H -u liveusb gconf-editor
#sudo -E -H -u liveusb thunderbird
#http://library.gnome.org/admin/system-admin-guide/stable/menustructure-13.html.fr
sudo -E -H -u liveusb alacarte
sudo chown -R liveusb:liveusb /home/liveusb
sudo -E -H -u liveusb pessulus
EOF
else
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
sudo chown -R liveusb:liveusb /home/liveusb
sudo -H -u liveusb gnome-appearance-properties %F
#visualiser les temmes metacity ex:
#metacity-theme-viewer Human
sudo -H -u liveusb gnome-keyboard-properties
sudo -H -u liveusb gconf-editor
#sudo -H -u liveusb thunderbird
#http://library.gnome.org/admin/system-admin-guide/stable/menustructure-13.html.fr
sudo -H -u liveusb alacarte
sudo chown -R liveusb:liveusb /home/liveusb
sudo -H -u liveusb pessulus
EOF
fi
##gnome-color-chooser
##gmenu-simple-editor
}
MOD_GNOME

function MODIF_WM()
{
#modif tableau de bord
##http://gentoo-wiki.com/HOWTO_Gnome_Desktop_Admin_Guide
##http://library.gnome.org/admin/system-admin-guide/2.22/
##http://library.gnome.org/admin/system-admin-guide/2.22/gconf-8.html.fr
MESSAGE="chargement de gnome-panel"
TIMEOUT&

# demarrer gnome-panel
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0

cd /home/liveusb
if [ ! -e "/opt/.origine-panel-setup.entries" ]; then
#sauvegarder origine
echo -e '\E[37;44m'"\033[1m Sauvegarde conf origine \033[0m"
sudo -H -u liveusb gconftool-2 \
--config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults \
--dump / >/opt/.origine-panel-setup.entries
fi
chown -R liveusb:liveusb /home/liveusb
echo -e '\E[37;44m'"\033[1m Démarrer gnome-panel \033[0m"

if [ -f "$XAUTHORITY" ]; then
sudo cp -f $XAUTHORITY /home/liveusb/.Xauthority
export XAUTHORITY=/home/liveusb/.Xauthority
fi

sudo chown -r liveusb:liveusb /home/liveusb/
sudo -H -u liveusb gnome-panel &>/dev/null &
metacity --replace&
#su liveusb
#unset SESSION_MANAGER
#env -u SESSION_MANAGER gnome-session&
#sudo -H -u liveusb gnome-session-properties
#sudo -H -u liveusb x-session-manager
#sudo -H -u liveusb gnome-session
#sudo -H -u liveusb gnome-panel &
#exec dbus-launch --exit-with-session gnome-panel
EOF
sleep 5
rm "/tmp/Log_liveusb.txt"
sleep 2

zenity --info --text "Modifiez la position des icones des tableau de bord,
Attention!
ne pas activer de soft ni de reglages du menu systeme
sous peine de boger le liveusb.
Placez les applet a droite a gauche en haut en bas, mais jamais au milieu!
verouillez les applet apres leur placement.

une fois vos modifications effectuées,
cliquez sur le bouton Valider de cette fenetre
pour poursuivre le script"

TUER=$(ps ax | grep gnome-panel | grep pts | grep -v grep | awk '{print $1}' | xargs)
if [ "$TUER" ]; then
kill -9 $TUER
DISPLAY=localhost:5.0 metacity --replace&
fi
}
MODIF_WM

#attendre application modif gconf
function GCONF_ATTENTE()
{
chown -R $SUDO_USER:$SUDO_USER /mnt/tmp_modif_liveusb/home/liveusb
if [ -e "/mnt/tmp_modif_liveusb/home/liveusb/.gconfd/saved_state" ]; then
i=0
while :
do
i=$(($i+2))
GCONF_ATTENTE=$(cat /mnt/tmp_modif_liveusb/home/liveusb/.gconfd/saved_state | wc -l)
echo ${i} ; 
echo "#Attente reste $GCONF_ATTENTE opération(s)à effectuer - ${i} seconde(s)" ;
if [ "$?" -ne "0" ]; then break ;fi
if [ "$GCONF_ATTENTE" -le "2" ]; then break ;fi
if [ "$i" == "120" ]; then break ;fi
sleep 2
done | zenity --progress --progress --auto-close;
fi
}
#GCONF_ATTENTE

#xubuntu xfce4
elif [ "$(ls -l /mnt/tmp_modif_liveusb/etc/alternatives/x-session-manager | grep xfce4-session)" ]; then
echo Xubuntu
function MODIF_WM()
{
MESSAGE="chargement de Xubuntu"
TIMEOUT&

# demarrer xfce4
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0

cd /home/liveusb
chown -R liveusb:liveusb /home/liveusb
echo -e '\E[37;44m'"\033[1m Démarrer xfce4-panel \033[0m"

if [ -f "$XAUTHORITY" ]; then
sudo cp -f $XAUTHORITY /home/liveusb/.Xauthority
export XAUTHORITY=/home/liveusb/.Xauthority
fi

sudo chown -r liveusb:liveusb /home/liveusb/
#sudo -H -u liveusb xfce4-panel &>/dev/null &
sudo -H -u liveusb startxfce4 &>/dev/null &
metacity --replace&
EOF
sleep 5
rm "/tmp/Log_liveusb.txt"
sleep 2

zenity --info --text "Modifiez la position des icones des tableau de bord,
Attention!
ne pas activer de soft ni de reglages du menu systeme
sous peine de boger le liveusb.
Placez les applet a droite a gauche en haut en bas, mais jamais au milieu!

une fois vos modifications effectuées,
cliquez sur le bouton Valider de cette fenetre
pour poursuivre le script"

TUER=$(ps ax | grep xfce | grep pts | grep -v grep | awk '{print $1}' | xargs)
if [ "$TUER" ]; then
kill -9 $TUER
DISPLAY=localhost:5.0 metacity --replace&
fi
}
MODIF_WM

fi
fi
}
###################_FIN_CUSTOM_GNOME_###################


###################_VIR_ALIAS_###################
function VIR_ALIAS()
{
VIR_ALIAS=$(zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=460 \
--height=200 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
TRUE "A" "Ne rien modifier" \
FALSE "B" "Désactiver alias ubiquity et Examples du bureau" \
FALSE "C" "Réactiver alias ubiquity et Examples du bureau" \
)
if [ "${VIR_ALIAS}" == "B" ]; then
echo -e '\E[37;44m'"\033[1m Désactiver alias ubiquity et Examples du bureau \033[0m"
#cat /proc/cmdline
#Désactiver alias ubiquity sur bureau
CHERCHE='chroot /root install -D -o $USERNAME -g $USERNAME $file /home/$USERNAME/Desktop/$(basename "$file")'
sed -i "s%^[ \t]*${CHERCHE}%#${CHERCHE}%" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/10adduser
#Désactiver alias Examples sur bureau
CHERCHE='chroot /root install -o $USERNAME -g $USERNAME -d /home/$USERNAME/Desktop/'
sed -i "s%^[ \t]*${CHERCHE}%#${CHERCHE}%" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/10adduser
#Désactiver alias Examples sur bureau
CHERCHE='mv /root/home/$USERNAME/Examples /root/home/$USERNAME/Desktop/'
sed -i "s%^[ \t]*${CHERCHE}%#${CHERCHE}%" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/10adduser

elif [ "${VIR_ALIAS}" == "C" ]; then
echo -e '\E[37;44m'"\033[1m Réactiver alias ubiquity et Examples du bureau \033[0m"
#cat /proc/cmdline
#Réactiver alias ubiquity sur bureau
CHERCHE='chroot /root install -D -o $USERNAME -g $USERNAME $file /home/$USERNAME/Desktop/$(basename "$file")'
sed -i "s%#${CHERCHE}%        ${CHERCHE}%" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/10adduser
#Réactiver alias Examples sur bureau
CHERCHE='chroot /root install -o $USERNAME -g $USERNAME -d /home/$USERNAME/Desktop/'
sed -i "s%#${CHERCHE}%    ${CHERCHE}%" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/10adduser
#Réactiver alias Examples sur bureau
CHERCHE='mv /root/home/$USERNAME/Examples /root/home/$USERNAME/Desktop/'
sed -i "s%#${CHERCHE}%    ${CHERCHE}%" \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/10adduser

fi
}
###################_FIN_VIR_ALIAS_###################


###################_dossiers_media_###################
function MOD_MEDIA()
{
USER_LIVEUSB="$(cat /mnt/tmp_modif_liveusb/etc/casper.conf | grep "export USERNAME" | awk -F= '{print $2}'  | sed 's/[\"]//g')"
MOD_MEDIA=$(zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=640 \
--height=200 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
TRUE "Z" "Ne rien modifier" \
FALSE "A" "Afficher dossiers Music,Pictures,Videos dans /home/$USER_LIVEUSB" \
FALSE "B" "Afficher dossiers Music,Pictures,Videos dans /home/$USER_LIVEUSB/Documents" \
)
if [ "${MOD_MEDIA}" == "A" ]; then
MOD_DIRECTORIES="# Default settings for user directories
#
# The values are relative pathnames from the home directory and
# will be translated on a per-path-element basis into the users locale
DESKTOP=Desktop
DOWNLOAD=Desktop
TEMPLATES=Templates
PUBLICSHARE=Public
DOCUMENTS=Documents
MUSIC=Music
PICTURES=Pictures
VIDEOS=Videos
# Another alternative is:
#MUSIC=Documents/Music
#PICTURES=Documents/Pictures
#VIDEOS=Documents/Videos"
echo -e "$MOD_DIRECTORIES" | tee /mnt/tmp_modif_liveusb/etc/xdg/user-dirs.defaults

elif [ "${MOD_MEDIA}" == "B" ]; then
MOD_DIRECTORIES="# Default settings for user directories
#
# The values are relative pathnames from the home directory and
# will be translated on a per-path-element basis into the users locale
DESKTOP=Desktop
DOWNLOAD=Desktop
TEMPLATES=Templates
PUBLICSHARE=Public
DOCUMENTS=Documents
#MUSIC=Music
#PICTURES=Pictures
#VIDEOS=Videos
# Another alternative is:
MUSIC=Documents/Music
PICTURES=Documents/Pictures
VIDEOS=Documents/Videos"
echo -e "$MOD_DIRECTORIES" | tee /mnt/tmp_modif_liveusb/etc/xdg/user-dirs.defaults

fi
}
###################_fin_dossiers_media_###################


###################_MOD_FIREFOX_###################
function MOD_FIREFOX()
{
#modifier les paramètres par défaut de FireFox
#/etc/firefox/profile
#le plus intéressant étant les Marque-pages avec le fichier « bookmarks.html ».

zenity --info --width 500 --text "Customiser Mozilla Firefox, 
Modifiez Marque-pages, Thèmes, Extensions, Plugins, ...
"

chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
if [ ! "$(which firefox)" ]; then
apt-get install -y -q firefox &>/dev/null
fi
EOF

chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
#firefox compact menus #https://addons.mozilla.org/fr/firefox/addon/4550
#dictionnaire français myspell
#UnPlug is an extension which lets you save video and audio
ADD_ON_LIST="https://addons.mozilla.org/fr/firefox/addon/4550
https://addons.mozilla.org/fr/firefox/addon/1250
https://addons.mozilla.org/fr/firefox/addon/2671
https://addons.mozilla.org/fr/firefox/browse/type:3
https://addons.mozilla.org/fr/firefox/addon/3006
https://addons.mozilla.org/fr/firefox/browse
http://www.macromedia.com/support/documentation/fr/flashplayer/help/settings_manager04.html"
sudo -H -u liveusb `firefox -ProfileManager $(echo -e "$ADD_ON_LIST" | tr "\n" " ")`

#Ajout du scroll rapide à firefox
#http://www.mozilla.org/unix/customizing.html#prefs
#about:config general.autoScroll true
FILE="$(ls -a "$HOME"/.mozilla/firefox/*/prefs.js)"
TEST=$(cat $FILE | grep 'user_pref("general.autoScroll", true);')
if [ ! "$TEST" ]; then
echo -e '\E[37;44m'"\033[1m Ajout du scroll rapide à firefox \033[0m"
echo 'user_pref("general.autoScroll", true);' | tee -a "$FILE"
fi

EOF
}
###################_FIN_MOD_FIREFOX_###################


###################_MOD_THUNDERBIRD_###################
function MOD_THUNDERBIRD()
{
#Créez vos profils Mozilla Thunderbird
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
if ! which thunderbird >/dev/null 2>&1; then
xterm -title 'installer Mozilla Thunderbird' -e "apt-get install thunderbird thunderbird-locale-fr lightning-extension lightning-extension-locale-fr latex-xft-fonts"
fi
sudo -H -u liveusb $(thunderbird -ProfileManager)
EOF
}
###################_FIN_MOD_THUNDERBIRD_###################


###################_ADDON_EXTERNE_###################
function ADDON_EXTERNE()
{
#w3m http://liveusb.info/dotclear/index.php?category/Add-on
ADDON=()
cd $HOME
if [ "$(ls -A ./add-on-liveusb.*.sh)" ]; then
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
xterm -title 'installer headers' -e "apt-get install -y linux-headers-${VERSION_LIN} build-essential"
EOF
echo -e 'zenity \
--title="Live CD/USB" \
--text="Choisir le(s) Add-on a executer dans la liste ci-dessous\nvous trouverez une documentation sur ce sujet a cette adresse:\n<b><span color=\"blue\">http://liveusb.info/dotclear/index.php?category/Add-on</span></b>" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=640 \
--height=480 \
--list \
--checklist \
--print-column="2" \
--separator=" " \
--column="*" \
--column="Cochez le/les add-on à executer" \
--column="Description" \\' >/tmp/liste-add-on-liveusb
ls -A ./add-on-liveusb.*.sh | while read line
do
if [ "$(cat "$line" | grep DESCRIPTION=)" ]; then
echo -e "\"FALSE\" \"$line\" "$(cat "$line" | grep DESCRIPTION=  | awk -F= '{print $2}')" \\" | tee -a /tmp/liste-add-on-liveusb
else
echo -e "\"FALSE\" \"$line\" \"Pas de description\" \\" | tee -a /tmp/liste-add-on-liveusb
fi
done
ADDON=$(. /tmp/liste-add-on-liveusb)

if [ "$ADDON" ]; then 
ADDON=(${ADDON[@]})
#declare -COMPTE
COMPTE=0
while (( COMPTE < ${#ADDON[@]} ))
do
. ${ADDON[$COMPTE]} ;
(( COMPTE = COMPTE + 1 )) ;
done
fi
fi
}
###################_FIN_ADDON_EXTERNE_###################


###################_MOD_TREMINAL_###################
function MOD_TREMINAL()
{
DISPLAY=localhost:5.0 metacity --replace&
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
if which gnome-terminal >/dev/null 2>&1; then
gnome-terminal
elif which konsole >/dev/null 2>&1; then
konsole
elif which xterm >/dev/null 2>&1; then
xterm
else
echo -e "\033[1;47;31m Erreur: pas trouvé de terminal \033[0m" ;
fi
EOF
}
###################_FIN_MOD_TREMINAL_###################


###################_MOD_LANG_###################
function MOD_LANG()
{
chroot /mnt/tmp_modif_liveusb <<"EOF"
export LANG="$(cat /opt/lang.txt)"
export HOME=/home/liveusb
export LC_ALL=C
export DISPLAY=localhost:5.0
chown -R liveusb:liveusb /home/liveusb
if which gnome-language-selector >/dev/null 2>&1 ; then
gnome-language-selector &>/dev/null
fi
if which gnome-keyboard-properties >/dev/null 2>&1 ; then
echo gnome-keyboard-properties
if [ "$(echo $DIST_VERSION | grep -E "hardy|intrepid")" ]; then
sudo -E -H -u liveusb gnome-keyboard-properties
else
sudo -H -u liveusb gnome-keyboard-properties
fi
fi
xterm -title 'dpkg-reconfigure console-setup' -e "sudo dpkg-reconfigure console-setup"
EOF
}
###################_FIN_MOD_LANG_###################


###################_MENU_CHROOT_###################
function MENU_CHROOT()
{
MESSAGE="Calcul de la taille actuelle du chroot"
TIMEOUT&
TSQFS="$(($(sudo du -sB 1 /mnt/tmp_modif_liveusb | awk '{print $1}')/1000/1000))"
rm "/tmp/Log_liveusb.txt"
sleep 2

MENU_CHROOT=$(zenity \
--title="Live CD/USB" \
--text="<span color=\"blue\"><b>Choisir l'option désirée dans la liste ci-dessous.
Mode Custom live, Distribution utilisée $(chroot /mnt/tmp_modif_liveusb lsb_release -d | awk '{print $2}') $(chroot /mnt/tmp_modif_liveusb lsb_release -c | awk '{print $2}') Version:$(chroot /mnt/tmp_modif_liveusb lsb_release -r | awk '{print $2}')</b>\nVersion du kernel: ${VERSION_LIN}</span>
<span color=\"red\" font-family=\"impact\" weight=\"bold\" size=\"x-large\"><big>Attention ! </big></span>
le menu:\"Exécuter la totalité des fonctions nécessaires\" est a exécuter au moins 1 fois.
<span color=\"blue\">Taille actuelle du squashfs décompressé:${TSQFS}Mio</span>" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=640 \
--height=480 \
--list \
--radiolist \
--print-column="2" \
--separator=" " \
--hide-column="2" \
--column="*" \
--column="*" \
--column="Fonction à exécuter" \
TRUE "A" "Exécuter la totalité des fonctions nécessaires" \
FALSE "B" "Editer le fichier sources.list/key personnelles" \
FALSE "C" "Mise à jour Système" \
FALSE "D" "Exécuter gnome-commander" \
FALSE "E" "Ajouter des logiciels et diverses fonctions d'administration" \
FALSE "F" "Modifier login/pass/autologin utilisateur du LiveCD/USB" \
FALSE "G" "Régler la langue" \
FALSE "H" "Installation des drivers propriétaires ATI et NVIDIA" \
FALSE "I" "Customiser Ubuntu Gnome" \
FALSE "J" "Activer/désactiver alias ubiquity sur le bureau" \
FALSE "K" "Modifier la position des dossiers multimédia" \
FALSE "L" "Créez vos profils Mozilla Firefox" \
FALSE "M" "Créez vos profils Mozilla Thunderbird" \
FALSE "N" "Télécharger tous les Add-on" \
FALSE "O" "Exécuter le mode Add-on" \
FALSE "P" "Ouvrir un terminal en chroot" \
FALSE "Q" "Fin du script, reconstruire le LiveCD/USB" \
)
test $? -ne 0 && exit 0  # Bouton Annuler
}
###################_F.I.N_MENU_CHROOT_###################


###################_REPRISE_CHROOT_###################
function REPRISE_CHROOT()
{
while true; do
DISPLAY=localhost:5.0 MENU_CHROOT
if [ "$MENU_CHROOT" == "A" ]; then
DISPLAY=localhost:5.0 MOD_SOURCELIST
DISPLAY=localhost:5.0 FCT_UPDATE
DISPLAY=localhost:5.0 GNOME_COMMANDER
DISPLAY=localhost:5.0 MOD_INSTALL
DISPLAY=localhost:5.0 MOD_INITRAMFS
DISPLAY=localhost:5.0 VERIFIER_KERNEL
DISPLAY=localhost:5.0 CUSTOM_LOGIN
#DISPLAY=localhost:5.0 MOD_LANG
DISPLAY=localhost:5.0 MOD_PROPRIO
DISPLAY=localhost:5.0 CUSTOM_GNOME
DISPLAY=localhost:5.0 VIR_ALIAS
DISPLAY=localhost:5.0 MOD_MEDIA
DISPLAY=localhost:5.0 MOD_FIREFOX
DISPLAY=localhost:5.0 ADDON_EXTERNE
#ADD_BACKGROUNDS #appelé dans certaines fonctions pour charger les backgrounds de gnome
elif [ "$MENU_CHROOT" == "B" ]; then
DISPLAY=localhost:5.0 MOD_SOURCELIST
DISPLAY=localhost:5.0 FCT_UPDATE
elif [ "$MENU_CHROOT" == "C" ]; then
DISPLAY=localhost:5.0 FCT_UPDATE
DISPLAY=localhost:5.0 FCT_UPGRADE
DISPLAY=localhost:5.0 MOD_INITRAMFS
DISPLAY=localhost:5.0 VERIFIER_KERNEL
elif [ "$MENU_CHROOT" == "D" ]; then
DISPLAY=localhost:5.0 GNOME_COMMANDER
elif [ "$MENU_CHROOT" == "E" ]; then
DISPLAY=localhost:5.0 MOD_INSTALL
DISPLAY=localhost:5.0 MOD_INITRAMFS
DISPLAY=localhost:5.0 VERIFIER_KERNEL
DISPLAY=localhost:5.0 MOD_PROPRIO
elif [ "$MENU_CHROOT" == "F" ]; then
DISPLAY=localhost:5.0 CUSTOM_LOGIN
elif [ "$MENU_CHROOT" == "G" ]; then
DISPLAY=localhost:5.0 MOD_INITRAMFS
DISPLAY=localhost:5.0 MOD_LANG
elif [ "$MENU_CHROOT" == "H" ]; then
DISPLAY=localhost:5.0 VERIFIER_KERNEL
DISPLAY=localhost:5.0 MOD_PROPRIO
elif [ "$MENU_CHROOT" == "I" ]; then
DISPLAY=localhost:5.0 CUSTOM_GNOME
elif [ "$MENU_CHROOT" == "J" ]; then
DISPLAY=localhost:5.0 VIR_ALIAS
elif [ "$MENU_CHROOT" == "K" ]; then
DISPLAY=localhost:5.0 MOD_MEDIA
elif [ "$MENU_CHROOT" == "L" ]; then
DISPLAY=localhost:5.0 MOD_FIREFOX
elif [ "$MENU_CHROOT" == "M" ]; then
DISPLAY=localhost:5.0 MOD_THUNDERBIRD
elif [ "$MENU_CHROOT" == "N" ]; then
DISPLAY=localhost:5.0 DOWNLOAD_ADDON
elif [ "$MENU_CHROOT" == "O" ]; then
DISPLAY=localhost:5.0 FCT_UPDATE
DISPLAY=localhost:5.0 VERIFIER_KERNEL
DISPLAY=localhost:5.0 ADDON_EXTERNE
DISPLAY=localhost:5.0 VERIFIER_KERNEL
elif [ "$MENU_CHROOT" == "P" ]; then
MOD_TREMINAL
DISPLAY=localhost:5.0 VERIFIER_KERNEL
elif [ "$MENU_CHROOT" == "Q" ]; then
FIN_SCRIPT=$(DISPLAY=localhost:5.0 zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=600 \
--height=200 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
TRUE "A" "Veuillez confirmer, Reconstruire le squashfs avec compression" \
FALSE "B" "Veuillez confirmer, Reconstruire le squashfs sans compression" \
FALSE "C" "Oup's non j'ai oublié de faire une modification, j'y retourne" \
)
if [ "${FIN_SCRIPT}" == "A" ]; then
DISPLAY=localhost:5.0 VERIFIER_KERNEL
break
elif [ "${FIN_SCRIPT}" == "B" ]; then
OPTIONS_SQUASHFS="-noInodeCompression -noDataCompression -noFragmentCompression" 
DISPLAY=localhost:5.0 VERIFIER_KERNEL
break
elif [ "${FIN_SCRIPT}" == "C" ]; then
echo "reprise menu"
fi

fi
MENU_CHROOT=""
done
}
###################_F.I.N_REPRISE_CHROOT_###################


###################_MENAGE_CHROOT_###################
function MENAGE_CHROOT()
{
###################################################################
#                        reconstruction                           #
###################################################################

# Fermeture session graghique
function STOP_SESSION()
{
DISPLAY=localhost:5.0 zenity --info --width 500 --text "Le script va maintenant se poursuivre, veuillez attendre la fermeture de cette fenêtre..." &
if [ "${XN1}" != "$(ps ax | grep $(echo "$XGRAPH" | awk '{print $1}') | grep -v grep | awk '{print $1}' | xargs)" ]; then
#verif si X tourne encore, si pas la arreter script ici
echo -e "\033[1;47;31m Erreur: Detection $(echo "$XGRAPH" | awk '{print $1}') \033[0m" ;
exit 0
fi
echo -e '\E[37;44m'"\033[1m sortie de $(echo "$XGRAPH" | awk '{print $1}') \033[0m"
sleep 2
kill ${XN1} &>/dev/null
}
STOP_SESSION

#Definir vos reglages de gnome comme par defaut
function DEFAUT_GNOME()
{
MESSAGE="Definir vos reglages de gnome comme par defaut"
TIMEOUT&
chroot /mnt/tmp_modif_liveusb<<"EOF"
export HOME=/home/liveusb
export LANG="$(cat /opt/lang.txt)"
export LANGUAGE="$(cat /opt/lang.txt)"
export LC_ALL="$(cat /opt/lang.txt)"
export DISPLAY=localhost:5.0
#Sauvegarder la conf de user liveusb dans /etc/skel
gconftool-2 \
--direct --config-source=xml:readwrite:/home/liveusb/.gconf \
--dump / >/etc/skel/.my-panel-setup.entries
sed -i "s/\/home\/liveusb\//\/etc\/skel\//g" /etc/skel/.my-panel-setup.entries
#definir par defaut pour tous les users
gconftool-2 \
--direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults \
--load /etc/skel/.my-panel-setup.entries
#http://library.gnome.org/
#man gconftool-2
#http://doc.ubuntu-fr.org/gconf
#remettre conf par defaut
#gnome-session-remove gnome-panel
#gconftool-2 --recursive-unset /apps/panel

xdg-desktop-menu forceupdate --mode system

cd /home/liveusb/.config/menus/
for source in $(ls -A)
do
echo "Modifier: /home/liveusb/.config/menus/$source"
sed -i "s/\/home\/liveusb/\/etc\/skel/g" \
	/home/liveusb/.config/menus/$source
done
cd ~

rsync -uravH --delete /home/liveusb/.config/. /etc/skel/.config
rsync -uravH --delete /home/liveusb/.local/. /etc/skel/.local
#rsync -uravH --delete /home/liveusb/.gconf/. /etc/skel/.gconf
#rsync -uravH --delete /home/liveusb/.gnome2/. /etc/skel/.gnome2
#rsync -uravH --delete /home/liveusb/.gtkrc /etc/skel/.gtkrc
sleep 2

EOF
rm "/tmp/Log_liveusb.txt"
sleep 2
}
if [ -e /etc/X11/Xsession.d/55gnome-session_gnomerc ]; then
DEFAUT_GNOME
fi


#Supprimer utilisateur liveusb
function REMOVE_USER()
{
MESSAGE="Suppression de user liveusb"
TIMEOUT&
chroot /mnt/tmp_modif_liveusb<<"EOF"
export LANG="$(cat /opt/lang.txt)"
export HOME=/root
export LC_ALL=C

#preparer firefox
if [ -e /home/liveusb/.mozilla/firefox ]; then
rm -R "/home/liveusb/.mozilla/firefox/$(ls -A "/home/liveusb/.mozilla/firefox" | grep ".default")/Cache/"
cd "/home/liveusb/.mozilla/firefox/$(ls -A "/home/liveusb/.mozilla/firefox" | grep ".default")"
for source in $(ls -A)
do
echo "Modifier: $source"
sed -i "s/\/home\/liveusb/\/etc\/skel/g" \
	"/home/liveusb/.mozilla/firefox/$(ls -A "/home/liveusb/.mozilla/firefox" | grep ".default")/$source"
done
cd ~
rsync -uravH --delete /home/liveusb/.mozilla/. /etc/skel/.mozilla
fi

#synchroniser .mozilla-thunderbird
rsync -uravH --delete /home/liveusb/.mozilla-thunderbird/. /etc/skel/.mozilla-thunderbird &>/dev/null

#synchroniser themes perso
rsync -uravH --delete /home/liveusb/.themes/. /etc/skel/.themes &>/dev/null
rsync -uravH --delete /home/liveusb/.icons/. /etc/skel/.icons &>/dev/null
rsync -uravH --delete /home/liveusb/.awn/. /etc/skel/.awn &>/dev/null
rsync -uravH --delete /home/liveusb/.cairo-dock/. /etc/skel/.cairo-dock &>/dev/null
rsync -uravH --delete /home/liveusb/.SimDock/. /etc/skel/.SimDock &>/dev/null
rsync -uravH --delete /home/liveusb/.beryl/. /etc/skel/.beryl &>/dev/null
rsync -uravH --delete /home/liveusb/.emerald/. /etc/skel/.emerald &>/dev/null
rsync -uravH --delete /home/liveusb/.screenlets/. /etc/skel/.screenlets &>/dev/null
cp -f /home/liveusb/.gtkrc-2.0 /etc/skel/.gtkrc-2.0 &>/dev/null

#synchroniser kompozer Add-on
rsync -uravH --delete /home/liveusb/.kompozer/. /etc/skel/.kompozer &>/dev/null

#synchroniser dossiers xdg perso
rsync -uravH --delete /home/liveusb/Bureau/. /etc/skel/Bureau &>/dev/null
rsync -uravH --delete /home/liveusb/Documents/. /etc/skel/Documents &>/dev/null
rsync -uravH --delete /home/liveusb/Images/. /etc/skel/Images &>/dev/null
rsync -uravH --delete /home/liveusb/Modèles/. /etc/skel/Modèles &>/dev/null
rsync -uravH --delete /home/liveusb/Musique/. /etc/skel/Musique &>/dev/null
rsync -uravH --delete /home/liveusb/Public/. /etc/skel/Public &>/dev/null
rsync -uravH --delete /home/liveusb/Vidéos/. /etc/skel/Vidéos &>/dev/null

#virer admin et liveusb de /etc/sudoers
#cat /etc/sudoers | sed '/%admin/d' | tee /etc/sudoers
echo -e "root ALL=(ALL) ALL" | tee /etc/sudoers
#supprimer user 
userdel -r liveusb
grpck
EOF
rm "/tmp/Log_liveusb.txt"
sleep 2
}
REMOVE_USER


################_MAJ_INITRD_################
function MAJ_INITRD()
{
MESSAGE="Mise à jour de initrd..."
TIMEOUT&

#sed -i 's/xres=.*/xres=1024/' /mnt/tmp_modif_liveusb/etc/usplash.conf
#sed -i 's/yres=.*/yres=768/' /mnt/tmp_modif_liveusb/etc/usplash.conf

#ajouter /var/tmp en tmpfs à fstab pour economie flash
if [ ! "$(grep "/var/tmp" "/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/12fstab")" ] ; then
sed -i 's/tmpfs \/tmp tmpfs nosuid,nodev 0 0/tmpfs \/tmp tmpfs nosuid,nodev 0 0\ntmpfs \/var\/tmp tmpfs nosuid,nodev 0 0/g' \
	/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/scripts/casper-bottom/12fstab
fi

chroot /mnt/tmp_modif_liveusb<<"EOF"
export LANG="$(cat /opt/lang.txt)"
export HOME=/root
export LC_ALL=C
#dpkg-reconfigure locales
depmod -ae
apt-get clean &>/dev/null
apt-get autoremove -y &>/dev/null
apt-get autoclean &>/dev/null
update-pciids
update-usbids
#purge paquets
dpkg -l |grep ^rc |awk '{print $2}' |xargs dpkg -P &>/dev/null
apt-get check #vérifier le cache et de détecter d'éventuels problèmes de dépendance
#sudo apt-get remove --purge `deborphan` &>/dev/null
#sudo find / -name *.bak | xargs sudo rm -v
#sudo find / -name *.old | xargs sudo rm -v
#sudo find / -name *~ | xargs sudo rm -v
#sudo find / -name *dpkg-dist | xargs sudo rm -v
EOF

TEST1=$(grep '^[^:]*:[^:]*:[1-9][0-9][0-9][0-9]:' /mnt/tmp_modif_liveusb/etc/passwd)
TEST2=$(grep '^[^:]*:[^:]*:[12][0-9][0-9][0-9][0-9]:' /mnt/tmp_modif_liveusb/etc/passwd)
if [[ $TEST1 || $TEST2 ]]; then
echo -e "\033[1;47;31m Erreur: /etc/passwd contiens un utilisateur non conforme. \033[0m" ;
rm "/tmp/Log_liveusb.txt"
sleep 2
exit 0
fi

#Ajouter modules init
#FICHIER="/mnt/tmp_modif_liveusb/etc/initramfs-tools/modules"
FICHIER="/mnt/tmp_modif_liveusb/usr/share/initramfs-tools/modules"
LISTE_ACTUELLE=$(cat $FICHIER | grep -v "^#" | grep '.' | xargs)
#ehci-hcd
#uhci-mod
#ohci-mod
#usb-storage
#scsi-mod
#sd-mod
AJOUTER=(sd-mod ata_generic ide-generic ata_piix)
i=0 ; while [ $i -lt ${#AJOUTER[@]} ]
do
if [ ! "$(echo "$LISTE_ACTUELLE" | grep "${AJOUTER[$i]}")" ]; then
echo "Ajouter Module:${AJOUTER[$i]}"
echo "${AJOUTER[$i]}" | tee -a $FICHIER
fi
i=$(($i+1)) 
done

chroot /mnt/tmp_modif_liveusb<<"EOF"
export LANG="$(cat /opt/lang.txt)"
export HOME=/root
export LC_ALL=C
update-initramfs -u -k ${VERSION_LIN}
#update-initramfs -c -k ${VERSION_LIN}
EOF

if [ -e "/mnt/tmp_modif_liveusb/boot/initrd.img-${VERSION_LIN}" ] && [ -e "/mnt/tmp_modif_liveusb/boot/vmlinuz-${VERSION_LIN}" ]; then
echo -e '\E[37;44m'"\033[1m initrd.img-${VERSION_LIN} \033[0m"
echo -e '\E[37;44m'"\033[1m vmlinuz-${VERSION_LIN} \033[0m"

#copier à racine initrd et vmlinuz
mv /mnt/tmp_modif_liveusb/boot/initrd.img-${VERSION_LIN} /mnt/$NOM_INITRD
cp /mnt/tmp_modif_liveusb/boot/vmlinuz-${VERSION_LIN} /mnt/vmlinuz

else
echo -e "\033[1;47;31m Erreur: impossible de détecter la version du kernel!(2) \033[0m" ;
rm "/tmp/Log_liveusb.txt"
sleep 2
exit 0
fi

rm "/tmp/Log_liveusb.txt"
sleep 2
}
MAJ_INITRD
################_FIN_MAJ_INITRD_################


function NETTOYAGE()
{
MESSAGE="Nettoyage en cours, Patience..."
TIMEOUT&

# si pas Eee supprimer xorg.conf
if [ "$MODIF_EEE" != "1" ] ; then
test -e /mnt/tmp_modif_liveusb/etc/X11/xorg.conf && rm /mnt/tmp_modif_liveusb/etc/X11/xorg.conf ;
fi

#nettoyer le dossier /mnt/tmp_modif_liveusb/root
mv /mnt/tmp_modif_liveusb/root/.bashrc /mnt/tmp_modif_liveusb/tmp/.bashrc
mv /mnt/tmp_modif_liveusb/root/.profile /mnt/tmp_modif_liveusb/tmp/.profile
mv /mnt/tmp_modif_liveusb/root/.wapi /mnt/tmp_modif_liveusb/tmp/.wapi
rm -Rf /mnt/tmp_modif_liveusb/root/.*
mv /mnt/tmp_modif_liveusb/tmp/.bashrc /mnt/tmp_modif_liveusb/root/.bashrc
mv /mnt/tmp_modif_liveusb/tmp/.profile /mnt/tmp_modif_liveusb/root/.profile
mv /mnt/tmp_modif_liveusb/tmp/.wapi /mnt/tmp_modif_liveusb/root/.wapi


chroot /mnt/tmp_modif_liveusb<<"EOF"
export LANG="$(cat /opt/lang.txt)"
export HOME=/root
export LC_ALL=C
#supprimer lien Examples
rm /etc/skel/Examples
#au cas ou tout repasser a root
chown -Rf root:root /etc/skel
rm -Rf /var/tmp/*
rm -Rf /tmp/*
rm -Rf /home/*
rm -Rf /var/crash/*
rm -Rf /var/lock/*
rm -Rf /var/run/*
rm /etc/resolv.conf
rm /etc/hosts
/etc/init.d/cupsys stop
/etc/init.d/dbus stop
EOF

kill -9 `lsof -at /mnt/tmp_modif_liveusb | xargs` &>/dev/null

sleep 2
umount -f /mnt/tmp_modif_liveusb/proc/sys/fs/binfmt_misc binfmt_misc &>/dev/null
umount -f /mnt/tmp_modif_liveusb/proc &>/dev/null
umount -f /mnt/tmp_modif_liveusb/sys &>/dev/null
umount -f /mnt/tmp_modif_liveusb/dev/pts &>/dev/null
umount -f /mnt/tmp_modif_liveusb/dev &>/dev/null
umount -f /mnt/tmp_modif_liveusb/tmp &>/dev/null

rm "/tmp/Log_liveusb.txt"
sleep 2
}
NETTOYAGE
}
###################_F.I.N_MENAGE_CHROOT_###################


################_RECONSTRUCTION_SQUASHFS_LIVEUSB_################
function RECONSTRUCTION_SQUASHFS_LIVEUSB()
{
MESSAGE="Construction de la nouvelle version, Patience..."
TIMEOUT&
echo -e '\E[37;44m'"\033[1m Construction de la nouvelle version, Patience... \033[0m"
UMOUNT_SD
sleep 2

#on monte la part ext3 /dev/sdx1 de la clé en lecture
mount -t ext3 -o ro ${EXTLINUXDEVICE} /mnt/liveusb
sleep 2

#on synchronise dans /mnt/tmp_liveusb
rsync -aH --exclude="filesystem.squashfs" /mnt/liveusb/. /mnt/tmp_liveusb/. &>/dev/null

#au cas ou nouvelle version de syslinux, remplacer
cp -f /boot/extlinux/vesamenu.c32 /mnt/tmp_liveusb/vesamenu.c32
#cp -f /boot/extlinux/menu.c32 /mnt/tmp_liveusb/menu.c32
#cp -f /boot/extlinux/chain.c32 /mnt/tmp_liveusb/chain.c32
#cp -f /boot/extlinux/mboot.c32 /mnt/tmp_liveusb/mboot.c32

#on remplace vmlinuz et initrd
mv -f /mnt/$NOM_INITRD /mnt/tmp_liveusb/$NOM_INITRD
mv -f /mnt/vmlinuz /mnt/tmp_liveusb/vmlinuz

#on regenere filesystem.manifest et filesystem.manifest-desktop
chmod +w /mnt/tmp_liveusb/casper/filesystem.manifest
chroot /mnt/tmp_modif_liveusb dpkg-query -W --showformat='${Package} ${Version}\n' > /mnt/tmp_liveusb/casper/filesystem.manifest
cp /mnt/tmp_liveusb/casper/filesystem.manifest /mnt/tmp_liveusb/casper/filesystem.manifest-desktop
sed -i '/ubiquity/d' /mnt/tmp_liveusb/casper/filesystem.manifest-desktop
sleep 2

#plus besoin on demonte
umount /mnt/liveusb
rm "/tmp/Log_liveusb.txt"
sleep 2

#faire prechauffer le/les processeur, on reconstruit squashfs, pause café 2
MESSAGE="pause café 2, Reconstruction du squashfs, Patience..."
TIMEOUT&
echo -e '\E[37;44m'"\033[1m Pause café 2, Reconstruction de filesystem.squashfs, Patience... \033[0m"
#rm /mnt/tmp_liveusb/casper/filesystem.squashfs
mksquashfs /mnt/tmp_modif_liveusb/ /mnt/tmp_liveusb/casper/filesystem.squashfs ${OPTIONS_SQUASHFS} -e '*~'
sleep 2
rm "/tmp/Log_liveusb.txt"
sleep 2

#http://fr.wikipedia.org/wiki/Unionfs
#http://fr.wikipedia.org/wiki/Aufs
#http://www.filesystems.org/project-unionfs.html
#http://aufs.sourceforge.net/
#http://electronicfr.com/index.php/fr/Embedded-computing/Construire-un-systeme-linux-read-only-sur-une-compact-flash.html
## Rajoute aufs , par defaut est Unionfs
#if [ ! "$(cat /mnt/tmp_liveusb/extlinux.conf | grep -i "union=aufs")" ]; then 
#echo -e '\E[37;44m'"\033[1m Rajoute aufs , par defaut est Unionfs \033[0m"
#sed -i 's/append /append union=aufs /g' /mnt/tmp_liveusb/extlinux.conf
#fi

#reconstruire le fichier md5sum.txt
MESSAGE="Reconstruction du fichier md5sum.txt"
TIMEOUT&
echo -e '\E[37;44m'"\033[1m Reconstruction du fichier md5sum.txt \033[0m"
cd /mnt/tmp_liveusb
find . -type f -print0 | xargs -0 md5sum | tee md5sum.txt
cd /mnt
rm "/tmp/Log_liveusb.txt"
sleep 2

#calcul de la taille cible
TAILLE=$(($(du -sB 1 "/mnt/tmp_liveusb" | awk '{print $1}')/1000/1000)) #
echo -e '\E[37;44m'"\033[1m TAILLE:$TAILLE \033[0m" #
echo -e '\E[37;44m'"\033[1m Soit: $(($(du -sb /mnt/tmp_liveusb | awk '{print $1}')/1024/1024)) Mio \033[0m" #

echo -e '\E[37;44m'"\033[1m on Redimmensionne \033[0m"
NEW_DIMENSION #declenche aussi un progress

echo -e '\E[37;44m'"\033[1m Transfert de la nouvelle version... \033[0m"
CHERCHE_CLE
MOD_DEMONTE
#on monte la part ext3 /dev/sdx1 de la clé
mount -t ext3 -o rw,users /dev/${CLE_USB}1 /mnt/liveusb
sleep 2
#rsync -aH /mnt/tmp_liveusb/. /mnt/liveusb/.

SOURCE="/mnt/tmp_liveusb"
DESTINATION="/mnt/liveusb"
function DECIMALE()
{
if [ $1 = "-p" ]; then
precision=$2; shift 2;
else
precision=2  # valeur par défaut ex: #DECIMALE -p 4 158/600*100 
fi
bc -q << EOF
scale=$precision
$*
quit
EOF
}
function COPIE()
{
TAILLE=$(($(du -sB 1 ${SOURCE} | awk '{print $1}')/1000/1000));T1=1;
`rsync -aH --exclude="*~" ${SOURCE}/. ${DESTINATION}/.`& sleep 1;
(i=0 ; while [ $i -lt ${TAILLE} ] ; do
T1=$(($(du -sB 1 ${DESTINATION} | awk '{print $1}')/1000/1000))
i=$T1;
T2=`DECIMALE -p 2 $T1/$TAILLE*100`;
(echo -e "${T2}\n#Pourcentage de la copie sur /dev/${CLE_USB}1 effectué: (${T2}%) de ${TAILLE}Mb";) #mod
sleep 1 ;
done) | zenity --progress --width 600 --auto-close
}
COPIE

chmod 444 /mnt/liveusb/casper/filesystem.manifest
chmod 444 /mnt/liveusb/casper/filesystem.manifest-desktop
chmod 444 /mnt/liveusb/casper/filesystem.squashfs

#reinstaller extlinux
MESSAGE="reinslaller extlinux..."
TIMEOUT&
echo -e '\E[37;44m'"\033[1m réinslaller extlinux \033[0m"
extlinux -i /mnt/liveusb
extlinux -U /mnt/liveusb
#creer md5 pour appairer chroot a clé usb
echo "$(/usr/bin/md5sum "/mnt/liveusb/md5sum.txt" | awk '{ print $1 }')" | tee "/mnt/tmp_modif_liveusb/opt/md5.txt"
UMOUNT_SD

#supprimer ancienne sauvegarde chroot si presente
VIRER_ANCIEN="/tmp/old_$(date +%d-%m-%Y-%T-%N)"
mv -f "$REPRISE" $VIRER_ANCIEN
rm -R "$VIRER_ANCIEN" &>/dev/null &

#sauvegarde chroot
mv /mnt/tmp_modif_liveusb "$REPRISE" &>/dev/null
echo -e '\E[37;44m'"\033[1m chroot sauvegardé dans:\"$REPRISE\" \033[0m"

rm "/tmp/Log_liveusb.txt"
sleep 2

echo -e '\E[37;44m'"\033[1m F.I.N de la Customisation LiveUSB /dev/${CLE_USB} \033[0m"
zenity --info --text "F.I.N de la Customisation LiveUSB"
}
################_FIN_RECONSTRUCTION_SQUASHFS_LIVEUSB_################


################_RECONSTRUCTION_SQUASHFS_LIVECD_################
function RECONSTRUCTION_SQUASHFS_LIVECD
{
MESSAGE="Copie vos modifications, Patience..."
TIMEOUT&

#remonter cd pour modif
mount -t iso9660 -o loop,ro "${FICHIER_IMG}" /mnt/liveusb
sleep 2

#copier /mnt/liveusb/ dans /mnt/tmp_liveusb, on reconstruit ici pour live CD!
rsync -aH /mnt/liveusb/. /mnt/tmp_liveusb/. &>/dev/null #pause café 2
sleep 5

function LG_ISOLINUX()
{
#Adapter lang de boot gfxboot pour boot livecd
#cd /usr/src
#apt-get install -y dpkg-dev gfxboot &>/dev/null
#apt-get source -y gfxboot-theme-ubuntu &>/dev/null
#cd gfxboot-theme-ubuntu*/
#make DEFAULT_LANG=${MODLANG[0]}
#cp -Rf boot/. /mnt/tmp_liveusb/isolinux
#cd /usr/src
#rm -Rf /usr/src/gfxboot-theme*
apt-get install -y bzr gfxboot &>/dev/null
cd /tmp
bzr co http://bazaar.launchpad.net/~ubuntu-core-dev/gfxboot-theme-ubuntu/mainline gfxboot-theme
cd /tmp/gfxboot-theme
DEFAULT_LANG="${MODLANG[0]}"
sed -i "s/DEFAULT_LANG =/DEFAULT_LANG = $DEFAULT_LANG/" Makefile
make
cp -Rf /tmp/gfxboot-theme/boot/. /mnt/tmp_liveusb/isolinux
rm -Rf /tmp/gfxboot-theme*
}
LG_ISOLINUX

rm "/tmp/Log_liveusb.txt" #virer fenetre process
sleep 2

#modif des menu isolinux
CUSTOM_MENU=$(zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=400 \
--height=180 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
TRUE "A" "Modifier le menu démarrer du fichier isolinux.cfg" \
FALSE "B" "Non merçi, pas la peine" \
)
if [ "${CUSTOM_MENU}" == "A" ]; then
echo -e '\E[37;44m'"\033[1m customisation isolinux.cfg \033[0m"
chmod 644 /mnt/tmp_liveusb/isolinux/isolinux.cfg
#http://fr.wikipedia.org/wiki/Unionfs
#http://fr.wikipedia.org/wiki/Aufs
#http://www.filesystems.org/project-unionfs.html
#http://aufs.sourceforge.net/
#http://electronicfr.com/index.php/fr/Embedded-computing/Construire-un-systeme-linux-read-only-sur-une-compact-flash.html
## Rajoute aufs , par defaut est Unionfs
#if [ ! "$(cat /mnt/tmp_liveusb/isolinux/isolinux.cfg | grep -i "union=aufs")" ]; then 
#echo -e '\E[37;44m'"\033[1m Rajoute aufs , par defaut est Unionfs \033[0m"
#sed -i 's/quiet/union=aufs quiet/g' /mnt/tmp_liveusb/isolinux/isolinux.cfg
#fi
if which gedit >/dev/null 2>&1; then
echo -e '\E[37;44m'"\033[1m Éditer le fichier isolinux.cfg (1) \033[0m"
gedit /mnt/tmp_liveusb/isolinux/isolinux.cfg
elif which kwrite >/dev/null 2>&1; then
echo -e '\E[37;44m'"\033[1m Éditer le fichier isolinux.cfg (2)\033[0m"
kwrite /mnt/tmp_liveusb/isolinux/isolinux.cfg
elif which kate >/dev/null 2>&1; then
echo -e '\E[37;44m'"\033[1m Éditer le fichier isolinux.cfg (3) \033[0m"
kate /mnt/tmp_liveusb/isolinux/isolinux.cfg
else
echo -e "\033[1;47;31m Erreur: pas trouvé éditeur de texte. \033[0m" ;
fi
rm /mnt/tmp_liveusb/isolinux/isolinux.cfg~  &>/dev/null
chmod 444 /mnt/tmp_liveusb/isolinux/isolinux.cfg
fi

MESSAGE="Reconstruction du squashfs et isocd, Patience..."
TIMEOUT&

#virer old
rm -Rf /mnt/tmp_liveusb/casper/*

#on deplace new initrd
mv /mnt/$NOM_INITRD /mnt/tmp_liveusb/casper/$NOM_INITRD
mv /mnt/vmlinuz /mnt/tmp_liveusb/casper/vmlinuz

#on regenere filesystem.manifest et filesystem.manifest-desktop
#chmod +w /mnt/tmp_liveusb/casper/filesystem.manifest
chroot /mnt/tmp_modif_liveusb dpkg-query -W --showformat='${Package} ${Version}\n' > /mnt/tmp_liveusb/casper/filesystem.manifest
cp /mnt/tmp_liveusb/casper/filesystem.manifest /mnt/tmp_liveusb/casper/filesystem.manifest-desktop
sed -i '/ubiquity/d' /mnt/tmp_liveusb/casper/filesystem.manifest-desktop
sleep 2

#faire prechauffer le/les processeur, on reconstruit, pause café 2
echo "Pause café 2, Reconstruction de filesystem.squashfs, Patience..."
#reconstruire squashfs
mksquashfs /mnt/tmp_modif_liveusb/ /mnt/tmp_liveusb/casper/filesystem.squashfs
echo -e '\E[37;44m'"\033[1m Taille du Nouveau squashfs: $(ls -sh '/mnt/tmp_liveusb/casper/filesystem.squashfs' | awk '{print $1}') \033[0m"
sleep 2

#reconstruire le fichier md5sum.txt
cd /mnt/tmp_liveusb
find . -type f -print0 | xargs -0 md5sum | tee md5sum.txt
cd /

#reconstruire image .iso CD
mkisofs -r -V "CustomLiveCD" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o "$(dirname "${FICHIER_IMG}" )/Custom-$(basename "${FICHIER_IMG}")" /mnt/tmp_liveusb
if [ ! -e "$(dirname "${FICHIER_IMG}" )/Custom-$(basename "${FICHIER_IMG}")" ] ; then
rm "/tmp/Log_liveusb.txt" #virer fenetre process
sleep 2
echo -e "\033[1;47;31m Erreur: mkisofs \033[0m" ;
exit 0
fi
chown $SUDO_USER:$SUDO_USER "$(dirname "${FICHIER_IMG}" )/Custom-$(basename "${FICHIER_IMG}")"
chmod 644 "$(dirname "${FICHIER_IMG}" )/Custom-$(basename "${FICHIER_IMG}")"
sleep 2

#creer un fichier caché: $HOME/.md5_live_perso.txt de .iso Customisée
NEWMD5="$(/usr/bin/md5sum "$(dirname "${FICHIER_IMG}" )/Custom-$(basename "${FICHIER_IMG}")" | awk '{ print $1 }')"
echo "$NEWMD5 Custom-$(basename "${FICHIER_IMG}")" | tee -a "$HOME/.md5_live_perso.txt"
chown $SUDO_USER:$SUDO_USER "$HOME/.md5_live_perso.txt"
chmod 644 "$HOME/.md5_live_perso.txt"

umount /mnt/liveusb

#supprimer ancienne sauvegarde chroot
VIRER_ANCIEN="/tmp/old_$(date +%d-%m-%Y-%T-%N)"
mv -f "$REPRISE" $VIRER_ANCIEN
rm -R "$VIRER_ANCIEN" &>/dev/null &

#sauvegarde chroot
mv /mnt/tmp_modif_liveusb "$REPRISE" &>/dev/null
#creer fichier dans chroot pour verif md5 "$REPRISE/opt/md5.txt"
echo "$NEWMD5" | tee "$REPRISE/opt/md5.txt"
echo -e '\E[37;44m'"\033[1m chroot sauvegardé dans:\"$REPRISE\" \033[0m"

rm "/tmp/Log_liveusb.txt" #virer fenetre process
sleep 2

echo -e '\E[37;44m'"\033[1m Veuillez graver image du cd
Chemin: \"$(dirname "${FICHIER_IMG}" )/Custom-$(basename "${FICHIER_IMG}")\"
(clic droit, graver un disque sur le fichier .iso) \033[0m"
zenity --info --text "Veuillez graver l\'image du cd
Chemin: \"$(dirname "${FICHIER_IMG}" )/Custom-$(basename "${FICHIER_IMG}")\"
(clic droit, graver un disque sur le fichier .iso)"
echo -e '\E[37;44m'"\033[1m F.I.N \033[0m"
}
################_FIN_RECONSTRUCTION_SQUASHFS_LIVECD_################

#si boot echoue au niveau de (initramfs), taper a cote de (initramfs)
#cat casper.log
#pour naviguer si la liste est longue shift + pgup/pgdown
#et relever les informations
#_______________________________________________________________________________________________
#______________________________F.I.N_CUSTOM_LIVE_CD/USB_________________________________________


#_______________________________________________________________________________________________
#_______________________________________SAUVEGARDE______________________________________________
function SAUVEGARDE()
{
CHERCHE_CLE

function DECIMALE()
{
if [ $1 = "-p" ]; then
precision=$2; shift 2;
else
precision=2  # valeur par défaut ex: #DECIMALE -p 4 158/600*100 
fi
bc -q << EOF
scale=$precision
$*
quit
EOF
}

NB=()
NBPART=$(fdisk -l -u /dev/${CLE_USB} | grep -i "^/dev/${CLE_USB}[0-9]" | awk '{print $1}' | tr "\n" " ")
NB=(${NB[@]} ${NBPART[@]})
echo "${#NB[@]} ${NB[@]}"
DOSSIER="$HOME/Sauvegarde-LiveUSB-du-`date +%d-%m-%Y-%T-%N`/"
export DOSSIER
mkdir "$DOSSIER"
chmod -R 755 "$DOSSIER"
chown -R $SUDO_USER:$SUDO_USER "${DOSSIER}"
#taille dispo dans ${DOSSIER}
DISPO=$(df -T -t ext3 -P -B MB "${DOSSIER}" | grep "ext3" | awk '{print $5}' | sed 's/\/*//;s/[a-z A-Z]\/*//g')
#retourne la taille totale de la clé en Mb
DEMANDE="$(($(fdisk -l /dev/${CLE_USB} | grep /dev/${CLE_USB} | grep octets | awk '{print $5}')/1000/1000))"
if [ $DISPO -le $DEMANDE ]; then
echo -e "\033[1;47;31m Erreur: pas suffisament d\'espace pour sauvegarder. $DISPO -le $DEMANDE \033[0m" ;
exit 0
fi

i=0 ;
while [ $i -lt ${#NB[@]} ] ; do 
DEVICE="$(echo "/dev/${CLE_USB}$(echo ${NB[$i]} | sed 's/[/a-z]//g')")"
MARQUEUR="$(vol_id --label "$DEVICE")"
echo "MARQUEUR:$MARQUEUR"
if [ "$MARQUEUR" == "extlinux-ro" ]; then
umount -f ${DEVICE} &>/dev/null
FICHIER="${DOSSIER}extlinux-ro.img"
echo "$FICHIER"
TAILLE=$(($(sfdisk -s ${DEVICE}) / 1000 + 1)); T1=1;
`dd if=${DEVICE} of="$FICHIER"`& sleep 1;
(i=0 ; while [ $i -lt ${TAILLE} ] ; do 
T1=$(( $(du -sb "$FICHIER" | awk '{print $1}') / 1000 / 1000))
i=$T1;
T2=`DECIMALE -p 2 $T1/$TAILLE*100`;
(echo -e "${T2}\n#Pourcentage de la sauvegarde de ${DEVICE} effectué : (${T2}%) de ${TAILLE}Mb";)
sleep 1 ;
done) | zenity --progress --width 600 --auto-close
chown $SUDO_USER:$SUDO_USER "$FICHIER"
chmod 644 "$FICHIER"
fi
((i=$i+1))
done

zenity --info --text "Fin de la sauvegarde de /dev/${CLE_USB}, effectuée dans le dossier: $DOSSIER"
exit 0
}
#_______________________________________________________________________________________________
#__________________________________F.I.N_SAUVEGARDE_____________________________________________


#_______________________________________________________________________________________________
#_____________________________________RESTAURATION______________________________________________
function RESTAURATION()
{

#boucle tant que pas extlinux-ro.img
while true; do
SELECTION_FICHIER=`zenity --title "Veuillez sélectionner le fichier image extlinux-ro.img de sauvegarde à utiliser" --file-selection --filename="$PWD/"`
test $? -ne 0 && exit 0  # Bouton Annuler
if [ "$(echo "$SELECTION_FICHIER " | grep "extlinux-ro.img")" ]; then
echo -e '\E[37;44m'"\033[1m $SELECTION_FICHIER \033[0m"
break
fi
done

CHOIX_DISQUE

#test si extlinux-ro.img rentre dans clé avec 250Mb de reserve pour casper
if [ "$(($(($(du -sb "$SELECTION_FICHIER" | awk '{print $1}')/1000/1000))+250))" -le "$(($(fdisk -l /dev/${CLE_USB} | grep /dev/${CLE_USB} | grep octets | awk '{print $5}')/1000/1000))" ] ; then
echo -e '\E[37;44m'"\033[1m Restaurer /dev/${CLE_USB} dans $SELECTION_FICHIER \033[0m"

MESSAGE="Restaurer /dev/${CLE_USB} dans $SELECTION_FICHIER"
TIMEOUT&

#on demonte
MOD_DEMONTE

#suppression de toute les part du disk
echo -e '\E[37;44m'"\033[1m début du préformatage \033[0m"
#dd if=/dev/zero of=/dev/${CLE_USB}
dd if=/dev/zero of=/dev/${CLE_USB} bs=512 count=1
parted -s /dev/${CLE_USB} mklabel msdos
parted -s /dev/${CLE_USB} mkpart primary ext2 1 100% # mkpartfs
sleep 10
umount /dev/${CLE_USB}1
mke2fs -j -L extlinux-ro /dev/${CLE_USB}1 #formate et pose label
echo -e '\E[37;44m'"\033[1m fin  du préformatage \033[0m"
sleep 3

TAILLE="$(($(du -sb "$SELECTION_FICHIER" | awk '{print $1}')/1000/1000))"

#detection cylindre valide pour P1
heads=$(fdisk -l /dev/${CLE_USB} | grep "heads"  | awk '{print $1}')
sectors=$(fdisk -l /dev/${CLE_USB} | grep "sectors"  | awk '{print $3}')
cylinders=$(fdisk -l /dev/${CLE_USB} | grep "cylinders"  | awk '{print $5}')
T1=$(($heads * $sectors * 512))
i=0
while [ $i -lt $cylinders ]
do
i=$(($i+1))
if [ "$(($i * $T1 / 1000 /1000 ))" -ge "${TAILLE}" ]; then
echo -e '\E[37;44m'"\033[1m Cylindre N°$i P1 $(($i * $T1 / 1000 /1000 )) Megabytes \033[0m"
RETOUR=$(($i * $T1 / 1000 /1000 ))
break
fi
done

#tout demonter
MOD_DEMONTE
echo -e '\E[37;44m'"\033[1m suppression de part temp ${CLE_USB}1 \033[0m"
parted -s /dev/${CLE_USB} rm 1
echo -e '\E[37;44m'"\033[1m création de ${CLE_USB}1 1 ==> $RETOUR \033[0m"
parted -s /dev/${CLE_USB} unit MB mkpart primary ext2 1 $RETOUR # mkpartfs
echo -e '\E[37;44m'"\033[1m création de ${CLE_USB}2 $RETOUR ==> 100% \033[0m"
MOD_DEMONTE
parted -s /dev/${CLE_USB} unit MB mkpart primary ext2 $RETOUR 100% # mkpartfs
sleep 15
#tout demonter
MOD_DEMONTE

echo -e '\E[37;44m'"\033[1m formatage de ${CLE_USB}1 \033[0m"
#formate et pose label
#mkfs.ext3 -L extlinux-ro /dev/${CLE_USB}1
mke2fs -j -L extlinux-ro /dev/${CLE_USB}1
sleep 15

echo -e '\E[37;44m'"\033[1m formatage de ${CLE_USB}2 \033[0m"
#formate et pose label
#mkfs.ext3 -L casper-rw /dev/${CLE_USB}2
mke2fs -j -L casper-rw /dev/${CLE_USB}2
sleep 15

echo -e '\E[37;44m'"\033[1m marquer bootable \033[0m"
parted -s /dev/${CLE_USB} set 1 boot on
sleep 10
#tout demonter
MOD_DEMONTE

echo -e '\E[37;44m'"\033[1m ajout mbr \033[0m"
#ajout mbr
cat /usr/share/syslinux/mbr.bin > /dev/${CLE_USB}

#on monte la part ext3 /dev/sdx1 de la clé
mount -t ext3 -o rw,users /dev/${CLE_USB}1 /mnt/liveusb

#on monte la sauvegarde
mount -o loop "$SELECTION_FICHIER" /mnt/tmp_liveusb

rm "/tmp/Log_liveusb.txt"
sleep 2

function DECIMALE()
{
if [ $1 = "-p" ]; then
precision=$2; shift 2;
else
precision=2  # valeur par défaut ex: #DECIMALE -p 4 158/600*100 
fi
bc -q << EOF
scale=$precision
$*
quit
EOF
}

#on copie /mnt/tmp_liveusb dans /mnt/liveusb
function COPIE()
{
TAILLE=$(($(du -sB 1 /mnt/tmp_liveusb | awk '{print $1}')/1000/1000));T1=1;
`rsync -aH --exclude="*~" /mnt/tmp_liveusb/. /mnt/liveusb/.`& sleep 1;
(i=0 ; while [ $i -lt ${TAILLE} ] ; do
T1=$(($(du -sB 1 /mnt/liveusb | awk '{print $1}')/1000/1000))
i=$T1;
T2=`DECIMALE -p 2 $T1/$TAILLE*100`;
(echo -e "${T2}\n#Pourcentage de la copie sur /dev/${CLE_USB}1 effectué: (${T2}%) de ${TAILLE}Mb";) #mod
sleep 1 ;
done) | zenity --progress --width 600 --auto-close
}
COPIE

MESSAGE="Pose extlinux et mbr"
TIMEOUT&
sleep 10
extlinux -i /mnt/liveusb
#tout demonter
MOD_DEMONTE
#demonter sauvegarde
umount /mnt/tmp_liveusb
rm "/tmp/Log_liveusb.txt"
sleep 2
echo -e '\E[37;44m'"\033[1m F.I.N /dev/${CLE_USB} \033[0m"
zenity --info --text "votre clé est prête, redémarrez , testez,  pensez a régler votre bios sur: \"Premier disque de démarrage USB\""

else
echo -e "\033[1;47;31m Erreur: pas suffisament d\'espace  dans /dev/${CLE_USB} pour restaurer \033[0m" ;
exit 0
fi

echo -e '\E[37;44m'"\033[1m Fin de la Restauration \033[0m"
exit 0
}
#_______________________________________________________________________________________________
#__________________________________F.I.N_RESTAURATION___________________________________________


#_______________________________________________________________________________________________
#_____________________________________RESET_CASPER______________________________________________
function RESET_CASPER()
{
CHERCHE_CLE
UMOUNT_SD
sleep 1
if [ -n "$(mount | grep /dev/${CLE_USB})" ]; then
echo -e "\033[1;47;31m Erreur: impossible de demonter /dev/${CLE_USB} \033[0m" ;
exit 0
fi ;
e2fsck -fy ${CASPERDEVICE} #verif reparer
mount -t ext3 -o rw ${CASPERDEVICE} /mnt/liveusb
sleep 1
TO=$(( $(du -sb /mnt/liveusb | awk '{print $1}') / 1000 / 1000))

echo ${TO}Mb

(i=$TO ; while [ $i -gt 0 ] ; 
do 
	i=$(( $(du -sb /mnt/liveusb | awk '{print $1}') / 1000 / 1000 ))
	(echo -e "$(($o-$i))\n#Effacer ${TO}Mb ($i) de ${CASPERDEVICE}";)
	sleep .1 ;
done) | zenity --progress --width 600 --auto-close&
sleep 1
`rm -Rdf /mnt/liveusb/*`
umount /mnt/liveusb
rmdir /mnt/liveusb
zenity --info --text "Effacement du mode persistent effectué."
}
#_______________________________________________________________________________________________
#__________________________________F.I.N_RESET_CASPER___________________________________________


#_______________________________________________________________________________________________
#_____________________________________QEMU_INSTALL______________________________________________
#suggéré par smo ==> http://forum.ubuntu-fr.org/viewtopic.php?id=132294
## installe qemu et compile kqemu
function QEMU_INSTALL()
{
CHERCHE_CLE
MESSAGE="Vérification et mise en place de quemu et kqemu (acceleration)"
TIMEOUT&
if [ ! -e /usr/bin/qemu ]; then
echo "installation de qemu"
    aptitude -y install qemu kqemu-common module-assistant &>/dev/null
fi

if [ "$(lsmod |  grep kqemu)" == "" ]; then
modprobe kqemu &>/dev/null
mknod /dev/kqemu c 250 0 &>/dev/null
chmod 666 /dev/kqemu &>/dev/null
fi

if [ "$(lsmod |  grep kqemu)" == "" ]; then
echo "Compile et met en place kqemu (acceleration)"
    m-a a-i kqemu &>/dev/null
modprobe kqemu &>/dev/null
mknod /dev/kqemu c 250 0 &>/dev/null
chmod 666 /dev/kqemu &>/dev/null
fi

rm "/tmp/Log_liveusb.txt"
sleep 2

RAM_LIBRE="$(free | grep -e "-/+" | awk '{print $4}')"
if [ "$RAM_LIBRE" -gt "512" ]; then
RAM_LIBRE=512
elif [ "$RAM_LIBRE" -gt "256" ]; then
echo -e '\E[37;44m'"\033[1m Espace ram disponible $RAM_LIBRE Mio \033[0m"
RAM_LIBRE=256
elif [ "$RAM_LIBRE" -lt "256" ]; then
echo -e "\033[1;47;31m Erreur: pas assez de ram libre disponible:$RAM_LIBRE souhaité:256 Mio \033[0m" ;
exit 0
fi

echo "Démarrer qemu pour vérification de boot"
zenity --info --text="Attention!
pour démarrer clé USB avec qemu pour test,
veuillez utiliser le dernier menu extlinux a savoir:
Mode live qemu generic.all_generic_ide=1"
qemu -k fr -std-vga -no-acpi -boot c -usb -usbdevice "/dev/${CLE_USB}" -hda "${EXTLINUXDEVICE}" -hdb "${CASPERDEVICE}" -m $RAM_LIBRE
}
#_______________________________________________________________________________________________
#___________________________________F.I.N_QEMU_INSTALL__________________________________________




#_______________________________________________________________________________________________
#_____________________________________MOUNT_LIVEUSB______________________________________________
function MOUNT_LIVEUSB()
{
CHERCHE_CLE
MESSAGE="Décompréssion en cours..."
TIMEOUT&
mount -t ext3 ${EXTLINUXDEVICE} /mnt/liveusb
sleep 2
mount -t squashfs -o loop,ro /mnt/liveusb/casper/filesystem.squashfs /mnt/tmp_liveusb
sleep 2

#détection nom initrd
NOM_INITRD=$(basename $(ls -a /mnt/liveusb/initrd.*))
if [ ! "$NOM_INITRD" ]; then
echo -e "\033[1;47;31m Erreur: impossible de détecter la version de initrd \033[0m" ;
exit 0
fi

cd /mnt/tmp_modif_liveusb
gzip -dc /mnt/liveusb/$NOM_INITRD | cpio -i
gedit init&
cd ~
nautilus /mnt/liveusb /mnt/tmp_liveusb /mnt/tmp_modif_liveusb&
rm "/tmp/Log_liveusb.txt"
sleep 2
}
#_______________________________________________________________________________________________
#__________________________________F.I.N_MOUNT_LIVEUSB___________________________________________


#_______________________________________________________________________________________________
#_____________________________________MOUNT_LIVECD______________________________________________
function MOUNT_LIVECD()
{
CHOIX_LIVECD
MESSAGE="Décompréssion en cours..."
TIMEOUT&
mount -t iso9660 -o loop,ro "${FICHIER_IMG}" /mnt/liveusb
sleep 2
mount -t squashfs -o loop,ro /mnt/liveusb/casper/filesystem.squashfs /mnt/tmp_liveusb
sleep 2

#détection nom initrd
NOM_INITRD=$(basename $(ls -a /mnt/liveusb/casper/initrd.*))
if [ ! "$NOM_INITRD" ]; then
echo -e "\033[1;47;31m Erreur: impossible de détecter la version de initrd \033[0m" ;
exit 0
fi

cd /mnt/tmp_modif_liveusb
gzip -dc /mnt/liveusb/casper/$NOM_INITRD | cpio -i
gedit init&
cd ~
nautilus /mnt/liveusb /mnt/tmp_liveusb /mnt/tmp_modif_liveusb&
rm "/tmp/Log_liveusb.txt"
sleep 2
}
#_______________________________________________________________________________________________
#__________________________________F.I.N_MOUNT_LIVECD___________________________________________


#_______________________________________________________________________________________________
#____________________________________DELOCALISER_MNT____________________________________________
#Délocaliser /mnt (utile notament pour executer le script depuis un livecd)
function DELOCALISER_MNT()
{
#si deja delocalisé stop!
if [ "$(mount -l | grep /mnt)" ]; then
echo -e "\033[1;47;31m Erreur /mnt est déjà délocalisé.\n$(mount -l | grep /mnt)\n\npour le demonter utilisez la commande: sudo umount /mnt \033[0m"
exit 0
fi

zenity --info --text "Cette fonction devrait vous permettre de délocaliser /mnt
Pourquoi cette fonction?
notament utile pour utiliser ce script depuis un LiveCD
car son espace de stockage est la ram de votre pc.
ou simplement car sur votre disque la partition contenant /mnt
ne dispose pas de suffisament d'espace...

nous allons créer un fichier image formaté en ext3
qui sera monté en lieu et place de /mnt
veuillez spécifier à la fenêtre suivante un dossier
sur un volume de votre choix ou sera crée le fichier image.
Attention si vous specifiez un volume formaté en fat32
il vous faudra modifier la variable ESPACE_TRAVAIL
située au debut du script a une valeur appropriée,
en effet en format fat32 la taille maximale d'un fichier est: 4 Gio
voir:
http://fr.wikipedia.org/wiki/FAT32

la variable est en ce moment réglé sur: ESPACE_TRAVAIL:${ESPACE_TRAVAIL}Mb
"
DOSSIER_TRAVAIL=`zenity --title "Veuillez sélectionner un dossier de travail" --file-selection --directory --filename="/media/"`
test $? -ne 0 && exit 0  # Bouton Annuler


#verifier taille dispo est sup à ${ESPACE_TRAVAIL}
#DISPO=$(df -P -B 1M "$DOSSIER_TRAVAIL" | grep "/dev/" | awk '{print $4}')
#DISPO=$(df -P -B MB "$DOSSIER_TRAVAIL" | grep "$DOSSIER_TRAVAIL" | awk '{print $4}' | sed 's/\/*//;s/[a-z A-Z]\/*//g')
DISPO=$(df -P -B MB "$DOSSIER_TRAVAIL" | grep "/dev" | awk '{print $4}' | sed 's/\/*//;s/[a-z A-Z]\/*//g')
if [ "$DISPO" -lt "$ESPACE_TRAVAIL" ]; then
echo -e "\033[1;47;31m Erreur: espace libre insuffisant: UTILISABLE:$DISPO Mb SOUHAITÉ:$ESPACE_TRAVAIL Mb \033[0m"
rm "/tmp/Log_liveusb.txt"
sleep 2
#exit 0
else
echo -e '\E[37;44m'"\033[1m Espace ok UTILISABLE:$DISPO Mb SOUHAITÉ:$ESPACE_TRAVAIL Mb \033[0m"
fi

#creer fichier image vide
function DECIMALE()
{
if [ $1 = "-p" ]; then
precision=$2; shift 2;
else
precision=2  # valeur par défaut ex: #DECIMALE -p 4 158/600*100 
fi
bc -q << EOF
scale=$precision
$*
quit
EOF
}
TAILLE=$ESPACE_TRAVAIL; T1=1;
$(dd if=/dev/zero of="${DOSSIER_TRAVAIL}/travail.img" bs=MB count=${ESPACE_TRAVAIL})& sleep 1;
(i=0 ; while [ $i -lt ${TAILLE} ] ; do
T1=$(($(ls -l "${DOSSIER_TRAVAIL}/travail.img" | awk '{print $5}')/1000/1000))
i=$T1;
T2=`DECIMALE -p 2 $T1/$TAILLE*100`;
(echo -e "${T2}\n#création du  fichier image ${DOSSIER_TRAVAIL}/travail.img (${T2}%) de ${TAILLE}Mb";) #mod
sleep 1 ;
done) | zenity --progress --width 600 --auto-close

MESSAGE="Délocalisation formatage du fichier image en cours\, veuillez patienter..."
TIMEOUT&
sleep 2

#formater en ext3 le fichier image
mke2fs -m 0 -F -j -L ext3-travail "${DOSSIER_TRAVAIL}/travail.img"

chown $SUDO_USER:$SUDO_USER "${DOSSIER_TRAVAIL}/travail.img"
chmod 777 "${DOSSIER_TRAVAIL}/travail.img"
sleep 2

#monter le fichier image dans /mnt
#mount -t ext3 -o loop=$(losetup -f),user,rw,exec,dev "${DOSSIER_TRAVAIL}/travail.img" /mnt
mount -t ext3 -o loop=$(losetup -f),rw,exec,dev "${DOSSIER_TRAVAIL}/travail.img" /mnt

if [ "$(mount -l | grep /mnt |  awk '{print $1}')" ]; then
DISPO=$(parted $(mount -l | grep /mnt |  awk '{print $1}') unit MB print | grep ext3  | awk '{print $4}' | sed 's/\/*//;s/[a-z A-Z]\/*//g')
echo -e '\E[37;44m'"\033[1m ok délocalisé $DISPO MB \033[0m"
else
echo -e "\033[1;47;31m Erreur: la délocalisation a echoué \033[0m" ;
rm "/tmp/Log_liveusb.txt"
sleep 2
exit 0
fi 

rm "/tmp/Log_liveusb.txt"
sleep 2

#afficher message ok
zenity --info --text "Délocalisation effectuée avec succès.

Après execution du script soit vous redemarrez,
soit démontez /mnt avec la commande: sudo umount /mnt

puis supprimez: \"${DOSSIER_TRAVAIL}/travail.img\"
"
}


#Délocaliser /mnt (remonter ancien fichier image travail.img)
function DELOCALISER_OLD_MNT()
{
#si deja delocalisé stop!
if [ "$(mount -l | grep /mnt)" ]; then
echo -e "\033[1;47;31m Erreur /mnt est déjà délocalisé.\n$(mount -l | grep /mnt)\n\npour le demonter utilisez la commande: sudo umount /mnt \033[0m"
exit 0
fi

RECHERCHE_TRAVAIL="$(find /media/* -name '*travail.img')"
if [ "$RECHERCHE_TRAVAIL" ]; then
FICHIER_TRAVAIL=$(echo -e "$RECHERCHE_TRAVAIL" | zenity \
--list \
--title "Résultat de la recherche" \
--text "Recherche fichier travail.img" \
--column "Sélection fichier")
else
FICHIER_TRAVAIL=$(zenity --title "Veuillez sélectionner le fichier image travail.img" --file-selection --filename="/media/")
fi
test $? -ne 0 && exit 0  # Bouton Annuler

if [ -f "$FICHIER_TRAVAIL" ]; then
#monter le fichier image dans /mnt
mount -t ext3 -o loop=$(losetup -f),rw,exec,dev "$FICHIER_TRAVAIL" /mnt
if [ "$(mount -l | grep /mnt |  awk '{print $1}')" ]; then
rm -R /mnt/* &>/dev/null
DISPO=$(parted $(mount -l | grep /mnt |  awk '{print $1}') unit MB print | grep ext3  | awk '{print $4}' | sed 's/\/*//;s/[a-z A-Z]\/*//g')
echo -e '\E[37;44m'"\033[1m ok délocalisé $DISPO MB \033[0m"
else
echo -e "\033[1;47;31m Erreur: la delocalisation a echoué \033[0m" ;
rm "/tmp/Log_liveusb.txt"
sleep 2
exit 0
fi
fi
}
#________________________________FIN_DELOCALISER_MNT____________________________________________
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#_________________________________DELOCALISER_MNT_EXT3__________________________________________
function DELOCALISER_MNT_EXT3()
{
#si deja delocalisé stop!
if [ "$(mount -l | grep /mnt)" ]; then
echo -e "\033[1;47;31m Erreur /mnt est déjà délocalisé.\n$(mount -l | grep /mnt)\n\npour le demonter utilisez la commande: sudo umount /mnt \033[0m"
exit 0
fi

while true; do
DOSSIER_TRAVAIL=`zenity --title "Veuillez sélectionner un dossier de travail" --file-selection --directory --filename="/"`
test $? -ne 0 && exit 0  # Bouton Annuler
TYPE=$(df -T -t ext3 -P $DOSSIER_TRAVAIL | grep 'ext3' | awk '{print $2}')
DISPO=$(df -P -B MB "$DOSSIER_TRAVAIL" | grep "/dev" | awk '{print $4}' | sed 's/\/*//;s/[a-z A-Z]\/*//g')

if [ "$(ls -s $DOSSIER_TRAVAIL | head -1 | awk '{print $2}')" != "0" ]; then
echo -e "\033[1;47;31m Erreur: Veuillez spécifier un dossier vide \033[0m"

elif [ "$TYPE" != "ext3" ]; then
echo -e "\033[1;47;31m Erreur de format sur répertoire de travail /mnt: ext3 != $TYPE \033[0m"
zenity --error --text "Erreur de format sur répertoire de travail /mnt: ext3 != $TYPE
Veuillez sélectionner un volume formaté en ext3, 
ou bien utiliser le Menu:
\"Délocaliser /mnt (vers un autre volume formaté en ntfs, crée un fichier travail.img)\"
"

elif [ "$DISPO" -lt "$ESPACE_TRAVAIL" ]; then
echo -e "\033[1;47;31m Erreur: espace libre insuffisant: UTILISABLE:$DISPO Mb SOUHAITÉ:$ESPACE_TRAVAIL Mb \033[0m"

else
echo -e '\E[37;44m'"\033[1m Ok $DOSSIER_TRAVAIL support est bien ext3 \033[0m"
echo -e '\E[37;44m'"\033[1m Espace ok UTILISABLE:$DISPO Mb SOUHAITÉ:$ESPACE_TRAVAIL Mb \033[0m"
break
fi
done

mount -t ext3 --rbind "$DOSSIER_TRAVAIL" /mnt
}
#_____________________________FIN_DELOCALISER_MNT_EXT3__________________________________________
#_______________________________________________________________________________________________


#_______________________________________________________________________________________________
#_____________________________________MOD_MENUGRUB______________________________________________
function MOD_MENUGRUB()
{
CHERCHE_CLE
MOD_DEMONTE
mount -t ext3 ${EXTLINUXDEVICE} /mnt/liveusb
if [ -e "/boot/grub/menu.lst" ]; then
MOD_UNION=$(zenity \
--title="Live CD/USB" \
--text="Choisir l'option désirée dans la liste ci-dessous" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=400 \
--height=180 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
TRUE "aufs" "Utiliser AuFS comme système de fichier" \
FALSE "unionfs" "Utiliser UnionFS comme système de fichier" \
)
if [ "${MOD_UNION}" == "aufs" ]; then
echo -e '\E[37;44m'"\033[1m Utiliser ${MOD_UNION} comme système de fichier \033[0m"
elif [ "${MMOD_UNION}" == "unionfs" ]; then
echo -e '\E[37;44m'"\033[1m Utiliser ${MOD_UNION} comme système de fichier \033[0m"
else
MOD_UNION="aufs"
fi
echo -e '\E[37;44m'"\033[1m Detection grub ok \033[0m"
#rechercher et copier iniitrd et vmlinuz
INITRD=$(basename $(ls -a /mnt/liveusb/initrd* | xargs | awk '{print $1}'))
VMLINUZ=$(basename $(ls -a /mnt/liveusb/vmlinuz* | xargs | awk '{print $1}'))
if [[ "$INITRD"  && "$VMLINUZ" ]]; then
echo -e '\E[37;44m'"\033[1m Detection initrd/vmlinuz ok on copie dans /boot/grub/ \033[0m"
#rechercher et copier iniitrd et vmlinuz
echo "INITRD:$INITRD VMLINUZ:$VMLINUZ"
cp -f /mnt/liveusb/$INITRD /boot/liveusb-$INITRD
cp -f /mnt/liveusb/$VMLINUZ /boot/liveusb-$VMLINUZ

#ajouter entrées à /boot/grub/menu.lst
if [ ! "$(grep "LiveUSB mode live" /boot/grub/menu.lst)" ]; then
#decacher menu
sudo sed -i "s/^hiddenmenu/#hiddenmenu/" /boot/grub/menu.lst
#augmenter timeout
sudo sed -i 's/^timeout .* $/timeout\t\t30/g' /boot/grub/menu.lst

#Activer menu couleur
sudo sed -i 's/#color cyan\/blue white\/blue/color cyan\/blue white\/blue/' /boot/grub/menu.lst

#detecter root (hd?,?)
#DISQUE="$(grep -E "^root.*(hd[0-9,0-9])" /boot/grub/menu.lst | head -1 | awk '{print $2}')"
DISQUE="$(echo $(grub --batch --read-only<<"EOF"
find /boot/grub/stage1
EOF) | grep "find /boot/grub/stage1" | awk -F "/boot/grub/stage1" '{print $2}' | awk '{print $1}')"
if [ ! "$DISQUE" ]; then
echo -e "\033[1;47;31m Erreur: impossible le bon disque \033[0m" ;
exit 0
fi
echo -e '\E[37;44m'"\033[1m Ajouter une entrée liveusb au menu grub \033[0m"
echo -e "\ntitle\t\tLiveUSB mode live
root\t\t$DISQUE
kernel\t\t/boot/liveusb-$VMLINUZ union=${MOD_UNION} noprompt boot=casper locale=${MODLANG[0]}_${MODLANG[1]} kbd-chooser/method=${MODLANG[3]} console-setup/layoutcode=${MODLANG[4]} console-setup/variantcode=${MODLANG[5]} console-setup/modelcode=${MODLANG[6]} verbose splash
initrd\t\t/boot/liveusb-$INITRD
quiet

title\t\tLiveUSB mode live sans erreur
root\t\t$DISQUE
kernel\t\t/boot/liveusb-$VMLINUZ union=${MOD_UNION} noprompt boot=casper locale=${MODLANG[0]}_${MODLANG[1]} kbd-chooser/method=${MODLANG[3]} console-setup/layoutcode=${MODLANG[4]} console-setup/variantcode=${MODLANG[5]} console-setup/modelcode=${MODLANG[6]} acpi=off noapic noapm nodma nomce nolapic nosmp vga=normal verbose splash
initrd\t\t/boot/liveusb-$INITRD
quiet

title\t\tLiveUSB mode persistent
root\t\t$DISQUE
kernel\t\t/boot/liveusb-$VMLINUZ union=${MOD_UNION} persistent noprompt boot=casper locale=${MODLANG[0]}_${MODLANG[1]} kbd-chooser/method=${MODLANG[3]} console-setup/layoutcode=${MODLANG[4]} console-setup/variantcode=${MODLANG[5]} console-setup/modelcode=${MODLANG[6]} verbose splash
initrd\t\t/boot/liveusb-$INITRD
quiet\n" | tee -a /boot/grub/menu.lst
else
echo -e "\033[1;33;44m Erreur: Menu déjà présent \033[00m"
fi
else
echo -e "\033[1;47;31m Erreur: impossible de detecter initrd/vmlinuz \033[0m" ;
exit 0
fi
else
echo -e "\033[1;47;31m Erreur: impossible de detecter /boot/grub/menu.lst \033[0m" ;
exit 0
fi
}
#_______________________________________________________________________________________________

#_______________________________________________________________________________________________
#________________________________________MOD_FAT________________________________________________
function MOD_FAT()
{
function MOD_AJOUTER()
{
echo -e "\033[1;33;44m fonction pose partition fat \033[00m"
function MOD_CHOIX()
{
CLE_USB="";TEST1="";TEST2="";
#chercher casper-rw et extlinux-ro
TEST1=$(blkid /dev/sd* | grep casper-rw  | awk '{print $1}' | sed 's/[0-9:]//g' | sed '/^\/dev\/ */!d; s///;q')
TEST2=$(blkid /dev/sd* | grep extlinux-ro  | awk '{print $1}' | sed 's/[0-9:]//g' | sed '/^\/dev\/ */!d; s///;q')
#verifier
if [[ ! "$TEST1" || ! "$TEST2" ]]; then
echo -e "\033[1;47;31m Erreur: Veuillez verifier la présence de votre clé usb \033[0m" ;
exit 0
fi
#verifier
if [ "$TEST1" != "$TEST2" ]; then
echo -e "\033[1;47;31m Erreur: Veuillez verifier la présence de votre clé usb \033[0m" ;
exit 0
fi
#verifier que 1 seul casper-rw et extlinux-ro trouvé
if [[ "$(echo $TEST1 | wc -w)" != "1" || "$(echo $TEST2 | wc -w)" != "1" ]]; then
echo -e "\033[1;47;31m Erreur: Veuillez verifier la présence de votre clé usb \033[0m" ;
exit 0
fi
CLE_USB=$TEST1
#demonter
while [ "$(mount -l | grep /dev/${CLE_USB})" ]
do
echo -e "\033[1;33;44m Démonter:$(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs) \033[00m"
umount $(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs)
sleep 2
done

#clé détecté
echo "CLE_USB:/dev/${CLE_USB}"

#retourne la taille totale de la clé usb en Mb
DISPO="$(parted /dev/${CLE_USB} unit MB print | grep "/dev/${CLE_USB}" | awk '{print $4}' | sed 's/\/*//;s/[a-z A-Z]\/*//g')"
echo "DISPO:${DISPO}MB"

#taille de amorce en Mb
TAILLE_EXTLINUX="$(parted /dev/${CLE_USB} unit MB print | grep ext3 | grep -E "amorce|d*marrage" | awk '{print $4}'| sed 's/\/*//;s/[a-z A-Z]\/*//g')"
echo "TAILLE_EXTLINUX:${TAILLE_EXTLINUX}MB"

#verifier 250Mb mini pour casper , presistent
OCCUPE="$((${TAILLE_EXTLINUX}+250))"
echo "OCCUPE:${OCCUPE}MB"

#taille utilisable pour vfat
UTILISABLE="$((${DISPO}-${OCCUPE}))"
echo "UTILISABLE:${UTILISABLE}MB"

#verifier si il y a suffisament d'espace dams /mnt pour copier /mnt/extlinux.img
TAILLETMP=$(df -T -t ext3 -P -B MB /mnt | grep "MB" | awk '{print $5}' | sed 's/\/*//;s/[a-z A-Z]\/*//g')
if [ "${TAILLETMP}" -gt "${TAILLE_EXTLINUX}" ]; then
echo -e '\E[37;44m'"\033[1m Suffisament d'espace dans /mnt on sauvegarde ${TAILLETMP} > ${TAILLE_EXTLINUX} \033[0m"
else
echo -e "\033[1;47;31m Erreur: pas suffisament d'espace dans /mnt ${TAILLETMP}Mb > ${TAILLE_EXTLINUX}Mb \033[0m" ;
zenity --error --text "
<b><big><span color=\"red\"><span font-family=\"Helvetica\">Erreur: pas suffisament d'espace dans /mnt 
Disponible:${TAILLETMP}Mb Demandé:${TAILLE_EXTLINUX}Mb
Veuillez utiliser le Menu:
\"Délocaliser /mnt (depuis un autre volume, crée un fichier travail.img)\"
afin de palier à ce manque d'espace.</span></span></big></b>"
exit 0
fi

MIN=8
MAX=${UTILISABLE}
DEF=${UTILISABLE}
VFAT=$(zenity \
--width "400" \
--height "200" \
--text "<b><big><span color=\"red\"><span font-family=\"Helvetica\">Attention\!</span></span></big></b>
Déplacez le curseur avec les fleches, et pas avec la souris
Taille fixe pour le mode live:${TAILLE_EXTLINUX}Mb ,  partition extlinux-ro
Taile réservé à casper-rw le mode persistent 250Mb
Spécifiez la Taille souhaité pour la partition primaire exprimée en Mb
si vous ne mettez pas la totalité disponible , 
le reste ira a casper-rw la partition du mode persistent
" \
--scale \
--step=8 \
--value=$DEF \
--min-value=$MIN \
--max-value=$MAX \
)
test $? -ne 0 && exit 0 # Bouton Annuler
echo -e "Tailles choisies pour les 3 partitions:
DISPONIBLE:${DISPO}Mb (Taille de la clé usb)
VFAT:${VFAT}Mb
LIVE:${TAILLE_EXTLINUX}Mb
PERSISTENT:$((${DISPO}-((${VFAT}+${TAILLE_EXTLINUX}))))Mb
"
MOD_CHOIX=$(zenity \
--title="Live CD/USB" \
--text="<b><span color=\"blue\">Tailles choisies pour les 3 partitions:
DISPONIBLE:${DISPO}Mb (Taille de la clé usb)
P1 VFAT:${VFAT}Mb
P2 LIVE:${TAILLE_EXTLINUX}Mb
P3 PERSISTENT:$((${DISPO}-((${VFAT}+${TAILLE_EXTLINUX}))))Mb</span></b>" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=380 \
--height=220 \
--list \
--radiolist \
--print-column="2" \
--separator=" " \
--hide-column="2" \
--column="*" \
--column="*" \
--column="Fonction à exécuter" \
TRUE "A" "Ok on formate" \
FALSE "B" "Oup's non on retourne aux réglages" \
)
test $? -ne 0 && exit 0  # Bouton Annuler
}

while true; do
MOD_CHOIX
if [ "$MOD_CHOIX" == "A" ]; then
break
fi
done

#demonter
while [ "$(mount -l | grep /dev/${CLE_USB})" ]
do
echo -e "\033[1;33;44m Démonter:$(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs) \033[00m"
umount $(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs)
sleep 2
done

#ou est extlinux-ro ?
EXTLINUX="$(blkid /dev/sd* | grep extlinux-ro | awk '{print $1}' | sed 's/[:]//g')"
echo "EXTLINUX:${EXTLINUX}"

#verifier si suffisament d'espace sur la clé pour poser les 3 partitions
if [ $((${VFAT}+${TAILLE_EXTLINUX}+$((${DISPO}-((${VFAT}+${TAILLE_EXTLINUX})))))) == $DISPO ]; then
echo -e '\E[37;44m'"\033[1m $((${VFAT}+${TAILLE_EXTLINUX}+$((${DISPO}-((${VFAT}+${TAILLE_EXTLINUX})))))) == $DISPO \033[0m"
else
echo -e "\033[1;47;31m Erreur: de tailles $((${VFAT}+${TAILLE_EXTLINUX}+$((${DISPO}-((${VFAT}+${TAILLE_EXTLINUX})))))) $DISPO \033[0m" ;
exit 0
fi

#on sauvegarde extlinux-ro dans fichier image ==> /mnt/extlinux.img
function COPIE()
{
rm /mnt/extlinux.img &>/dev/null
#demonter
while [ "$(mount -l | grep /dev/${CLE_USB})" ]
do
echo -e "\033[1;33;44m Démonter:$(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs) \033[00m"
umount $(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs)
sleep 2
done
#copier
echo -e '\E[37;44m'"\033[1m Début de la copie \033[0m"
`dd if=${EXTLINUX} of="/mnt/extlinux.img"`& sleep 1;
(T1=0 ; while [ $T1 -lt ${TAILLE_EXTLINUX} ] ; do
T1=$(($(du -s -B 1 "/mnt/extlinux.img" | awk '{print $1}')/1000/1000))
T2=`DECIMALE -p 2 $T1/$TAILLE_EXTLINUX*100`;
(echo -e "${T2}\n#Pourcentage de la copie sur ${EXTLINUX} effectué: (${T2}%) de ${TAILLE_EXTLINUX}Mb";)
sleep 1 ;
done) | zenity --progress --width 600 --auto-close
}
COPIE

#detection cylindre valide pour P1
heads=$(fdisk -l /dev/${CLE_USB} | grep "heads"  | awk '{print $1}')
sectors=$(fdisk -l /dev/${CLE_USB} | grep "sectors"  | awk '{print $3}')
cylinders=$(fdisk -l /dev/${CLE_USB} | grep "cylinders"  | awk '{print $5}')
T1=$(($heads * $sectors * 512))
i=0
while [ $i -lt $cylinders ]
do
i=$(($i+1))
if [ "$(($i * $T1 / 1000 /1000 ))" -ge "${VFAT}" ]; then
echo -e '\E[37;44m'"\033[1m Cylindre N°$i P1 $(($i * $T1 / 1000 /1000 )) Megabytes \033[0m"
P1=$(($i * $T1 / 1000 /1000 ))
break
fi
done

#on efface tout! aie! aie! aie!
LISTE=$(sudo fdisk -l | grep "^/dev/${CLE_USB}" | awk '{print $1}' | xargs)
i=0;n=0;for i in $LISTE ; do
(( n = n + 1 ))
echo "Effacer ${CLE_USB}:${i} ${n}"
parted -s /dev/${CLE_USB} rm ${n}
done

#on formate premiere partition P1 en fat32
dd if=/dev/zero of=/dev/${CLE_USB} bs=512 count=1
parted -s /dev/${CLE_USB} mklabel msdos
parted -s /dev/${CLE_USB} unit MB mkpart primary fat32 1 $P1# mkpartfs
sleep 10
umount /dev/${CLE_USB}1
mkfs.vfat -F 32 -n partage-rw /dev/${CLE_USB}1 #formate et pose label

#detection cylindre valide pour P2
i=0
while [ $i -lt $cylinders ]
do
i=$(($i+1))
if [ "$(($i * $T1 / 1000 /1000 ))" -ge "$(($P1+${TAILLE_EXTLINUX}))" ]; then
echo -e '\E[37;44m'"\033[1m Cylindre N°$i P2 $(($i * $T1 / 1000 /1000 )) Megabytes \033[0m"
P2=$(($i * $T1 / 1000 /1000 ))
break
fi
done

#pose P2 extlinux-rw
parted -s /dev/${CLE_USB} unit MB mkpart primary ext2 $P1 $P2 # mkpartfs
sleep 10
umount /dev/${CLE_USB}2
mke2fs -j -L extlinux-ro /dev/${CLE_USB}2

#pose P3 casper-rw
parted -s /dev/${CLE_USB} unit MB mkpart primary ext2 $P2 100% # mkpartfs
umount /dev/${CLE_USB}3
sleep 10
mke2fs -j -L casper-rw /dev/${CLE_USB}3

#creer point de montage
mkdir /mnt/liveusb &>/dev/null
mkdir /mnt/tmp_liveusb &>/dev/null

#on monte
mount -o loop /mnt/extlinux.img /mnt/liveusb
umount /dev/${CLE_USB}2
mount /dev/${CLE_USB}2 /mnt/tmp_liveusb

#on copie
function COPIE()
{
echo -e '\E[37;44m'"\033[1m Début de la copie finale sur /dev/${CLE_USB}2 \033[0m"
TAILLE=$(($(du -sB 1 /mnt/liveusb | awk '{print $1}')/1000/1000));T1=0;
rsync -uravH --delete --exclude="*~" /mnt/liveusb/. /mnt/tmp_liveusb/. &
echo -e '\E[37;44m'"\033[1m ________________________ \033[0m"
(while [ "$T1" -lt "${TAILLE}" ] ; do
T1=$(($(du -sB 1 /mnt/tmp_liveusb | awk '{print $1}')/1000/1000))
T2=$(DECIMALE -p 2 $T1/$TAILLE*100)
(echo -e "${T2}\n#Pourcentage de la copie sur /dev/${CLE_USB}2 effectué: (${T2}%) de ${TAILLE}Mb";)
sleep 2 ;
done) | zenity --progress --width 600 --auto-close
}
COPIE
echo -e '\E[37;44m'"\033[1m FIN de la copie finale sur /dev/${CLE_USB}2 \033[0m"

#pose extlinux
echo -e '\E[37;44m'"\033[1m pose extlinux \033[0m"
extlinux -i /mnt/tmp_liveusb

#demonter temp
umount /mnt/liveusb
umount /mnt/tmp_liveusb
rm /mnt/extlinux.img

#Marquer bootable
echo -e '\E[37;44m'"\033[1m Marquer bootable \033[0m"
parted -s /dev/${CLE_USB} set 2 boot on

#demonter clé
while [ "$(mount -l | grep /dev/${CLE_USB})" ]
do
echo -e "\033[1;33;44m Démonter:$(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs) \033[00m"
umount $(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs)
sleep 2
done

#poser mbr
echo -e '\E[37;44m'"\033[1m poser mbr \033[0m"
cat /usr/share/syslinux/mbr.bin > /dev/${CLE_USB}

#demonter clé
while [ "$(mount -l | grep /dev/${CLE_USB})" ]
do
echo -e "\033[1;33;44m Démonter:$(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs) \033[00m"
sudo umount $(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs)
sleep 2
done

#verif
echo -e '\E[37;44m'"\033[1m Verifier /dev/${CLE_USB}1 /dev/${CLE_USB}2 \033[0m"
e2fsck -fy /dev/${CLE_USB}2 #verif
e2fsck -fy /dev/${CLE_USB}3 #verif
}


function MOD_SUPPRIMER()
{
CLE_USB="";TEST1="";TEST2="";
#chercher casper-rw et extlinux-ro
TEST1=$(blkid /dev/sd* | grep casper-rw  | awk '{print $1}' | sed 's/[0-9:]//g' | sed '/^\/dev\/ */!d; s///;q')
TEST2=$(blkid /dev/sd* | grep extlinux-ro  | awk '{print $1}' | sed 's/[0-9:]//g' | sed '/^\/dev\/ */!d; s///;q')
#verifier
if [[ ! "$TEST1" || ! "$TEST2" ]]; then
echo -e "\033[1;47;31m Erreur: Veuillez verifier la présence de votre clé usb \033[0m" ;
exit 0
fi
#verifier
if [ "$TEST1" != "$TEST2" ]; then
echo -e "\033[1;47;31m Erreur: Veuillez verifier la présence de votre clé usb \033[0m" ;
exit 0
fi
#verifier que 1 seul casper-rw et extlinux-ro trouvé
if [[ "$(echo $TEST1 | wc -w)" != "1" || "$(echo $TEST2 | wc -w)" != "1" ]]; then
echo -e "\033[1;47;31m Erreur: Veuillez verifier la présence de votre clé usb \033[0m" ;
exit 0
fi
CLE_USB=$TEST1

TEST3=$(blkid /dev/${CLE_USB}1 | grep partage-rw  | awk '{print $1}' | sed 's/[0-9:]//g' | sed '/^\/dev\/ */!d; s///;q')
if [ ! "$TEST3" ]; then
echo -e "\033[1;47;31m Erreur: Détection de la partition fat impossible. /dev/${CLE_USB} (1) \033[0m" ;
exit 0
fi

#retourne la taille totale de la clé usb en Mb
DISPO="$(parted /dev/${CLE_USB} unit MB print | grep "/dev/${CLE_USB}" | awk '{print $4}' | sed 's/\/*//;s/[a-z A-Z]\/*//g')"
echo "DISPO:${DISPO}MB"

#taille de amorce en Mb
TAILLE_EXTLINUX="$(parted /dev/${CLE_USB} unit MB print | grep ext3 | grep -E "amorce|d*marrage" | awk '{print $4}'| sed 's/\/*//;s/[a-z A-Z]\/*//g')"
echo "TAILLE_EXTLINUX:${TAILLE_EXTLINUX}MB"

#verifier 250Mb mini pour casper , presistent
OCCUPE="$((${TAILLE_EXTLINUX}+250))"
echo "OCCUPE:${OCCUPE}MB"

#taille utilisable pour vfat
UTILISABLE="$((${DISPO}-${OCCUPE}))"
echo "UTILISABLE:${UTILISABLE}MB"

#ou est extlinux-ro ?
EXTLINUX="$(blkid /dev/sd* | grep extlinux-ro | awk '{print $1}' | sed 's/[:]//g')"
echo "EXTLINUX:${EXTLINUX}"

#verifier si il y a suffisament d'espace dams /mnt pour copier /mnt/extlinux.img
TAILLETMP=$(df -T -t ext3 -P -B MB /mnt | grep "MB" | awk '{print $5}' | sed 's/\/*//;s/[a-z A-Z]\/*//g')
if [ "${TAILLETMP}" -gt "${TAILLE_EXTLINUX}" ]; then
echo -e '\E[37;44m'"\033[1m Suffisament d'espace dans /mnt on sauvegarde ${TAILLETMP} > ${TAILLE_EXTLINUX} \033[0m"
else
echo -e "\033[1;47;31m Erreur: pas suffisament d'espace dans /mnt ${TAILLETMP}Mb > ${TAILLE_EXTLINUX}Mb \033[0m" ;
zenity --error --text "
<b><big><span color=\"red\"><span font-family=\"Helvetica\">Erreur: pas suffisament d'espace dans /mnt 
Disponible:${TAILLETMP}Mb Demandé:${TAILLE_EXTLINUX}Mb
Veuillez utiliser le Menu:
\"Délocaliser /mnt (depuis un autre volume, crée un fichier travail.img)\"
afin de palier à ce manque d'espace.</span></span></big></b>"
exit 0
fi

zenity --question --title="Alerte" --text="<b><big><span color=\"red\"><span font-family=\"Helvetica\">Attention! </span></span></big></b>
Votre clé USB à été détectée en <b>/dev/${CLE_USB}</b>
si cela ne vous semble pas exact, veuillez utiliser le bouton Annuler.

$(fdisk -l | grep -i ^/dev/${CLE_USB})
"
test $? -ne 0 && exit 0 # Bouton Annuler

#on sauvegarde extlinux-ro dans fichier image ==> /mnt/extlinux.img
function COPIE()
{
rm /mnt/extlinux.img &>/dev/null
#demonter
while [ "$(mount -l | grep /dev/${CLE_USB})" ]
do
echo -e "\033[1;33;44m Démonter:$(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs) \033[00m"
umount $(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs)
sleep 2
done
#copier
echo -e '\E[37;44m'"\033[1m Début de la copie \033[0m"
`dd if=${EXTLINUX} of="/mnt/extlinux.img"`& sleep 1;
(T1=0 ; while [ $T1 -lt ${TAILLE_EXTLINUX} ] ; do
T1=$(($(du -s -B 1 "/mnt/extlinux.img" | awk '{print $1}')/1000/1000))
T2=`DECIMALE -p 2 $T1/$TAILLE_EXTLINUX*100`;
(echo -e "${T2}\n#Pourcentage de la copie sur ${EXTLINUX} effectué: (${T2}%) de ${TAILLE_EXTLINUX}Mb";)
sleep 1 ;
done) | zenity --progress --width 600 --auto-close
}
COPIE

#demonter
while [ "$(mount -l | grep /dev/${CLE_USB})" ]
do
echo -e "\033[1;33;44m Démonter:$(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs) \033[00m"
umount $(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs)
sleep 2
done

#on efface tout! aie! aie! aie!
LISTE=$(sudo fdisk -l | grep "^/dev/${CLE_USB}" | awk '{print $1}' | xargs)
i=0;n=0;for i in $LISTE ; do
(( n = n + 1 ))
echo "Effacer ${CLE_USB}:${i} ${n}"
parted -s /dev/${CLE_USB} rm ${n}
done

#detection cylindre valide pour P1
heads=$(fdisk -l /dev/${CLE_USB} | grep "heads"  | awk '{print $1}')
sectors=$(fdisk -l /dev/${CLE_USB} | grep "sectors"  | awk '{print $3}')
cylinders=$(fdisk -l /dev/${CLE_USB} | grep "cylinders"  | awk '{print $5}')
T1=$(($heads * $sectors * 512))
i=0
while [ $i -lt $cylinders ]
do
i=$(($i+1))
if [ "$(($i * $T1 / 1000 /1000 ))" -ge "${TAILLE_EXTLINUX}" ]; then
echo -e '\E[37;44m'"\033[1m Cylindre N°$i P1 $(($i * $T1 / 1000 /1000 )) Megabytes \033[0m"
P1=$(($i * $T1 / 1000 /1000 ))
break
fi
done

#pose P1 extlinux-ro
parted -s /dev/${CLE_USB} unit MB mkpart primary ext2 1 ${P1} # mkpartfs
sleep 10
umount /dev/${CLE_USB}1
mke2fs -j -L extlinux-ro /dev/${CLE_USB}1

#pose P2 casper-rw
parted -s /dev/${CLE_USB} unit MB mkpart primary ext2 $P1 100% # mkpartfs
umount /dev/${CLE_USB}2
sleep 10
mke2fs -j -L casper-rw /dev/${CLE_USB}2

#creer point de montage
mkdir /mnt/liveusb &>/dev/null
mkdir /mnt/tmp_liveusb &>/dev/null

#on monte
mount -o loop /mnt/extlinux.img /mnt/liveusb
umount /dev/${CLE_USB}1
mount /dev/${CLE_USB}1 /mnt/tmp_liveusb

#on copie
function COPIE()
{
echo -e '\E[37;44m'"\033[1m Début de la copie finale sur /dev/${CLE_USB}1 \033[0m"
TAILLE=$(($(du -sB 1 /mnt/liveusb | awk '{print $1}')/1000/1000));T1=0;
rsync -uravH --delete --exclude="*~" /mnt/liveusb/. /mnt/tmp_liveusb/. &
echo -e '\E[37;44m'"\033[1m ________________________ \033[0m"
(while [ "$T1" -lt "${TAILLE}" ] ; do
T1=$(($(du -sB 1 /mnt/tmp_liveusb | awk '{print $1}')/1000/1000))
T2=$(DECIMALE -p 2 $T1/$TAILLE*100)
(echo -e "${T2}\n#Pourcentage de la copie sur /dev/${CLE_USB}1 effectué: (${T2}%) de ${TAILLE}Mb";)
sleep 2 ;
done) | zenity --progress --width 600 --auto-close
}
COPIE
echo -e '\E[37;44m'"\033[1m FIN de la copie finale sur /dev/${CLE_USB}1 \033[0m"

#pose extlinux
echo -e '\E[37;44m'"\033[1m pose extlinux \033[0m"
extlinux -i /mnt/tmp_liveusb

#demonter temp
umount /mnt/liveusb
umount /mnt/tmp_liveusb
rm /mnt/extlinux.img

#Marquer bootable
echo -e '\E[37;44m'"\033[1m Marquer bootable \033[0m"
parted -s /dev/${CLE_USB} set 1 boot on

#demonter clé
while [ "$(mount -l | grep /dev/${CLE_USB})" ]
do
echo -e "\033[1;33;44m Démonter:$(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs) \033[00m"
umount $(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs)
sleep 2
done

#poser mbr
echo -e '\E[37;44m'"\033[1m poser mbr \033[0m"
cat /usr/share/syslinux/mbr.bin > /dev/${CLE_USB}

#demonter clé
while [ "$(mount -l | grep /dev/${CLE_USB})" ]
do
echo -e "\033[1;33;44m Démonter:$(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs) \033[00m"
umount $(mount -l | grep /dev/${CLE_USB} | awk '{print $1}' | xargs)
sleep 2
done

#verif
echo -e '\E[37;44m'"\033[1m Verifier /dev/${CLE_USB}1 /dev/${CLE_USB}2 \033[0m"
e2fsck -fy /dev/${CLE_USB}1 #verif
e2fsck -fy /dev/${CLE_USB}2 #verif
}


MENU=$(zenity \
--title="Live CD/USB" \
--text="<b><span color=\"blue\">Ce script vous permet d'ajouter au début de votre LiveUSB
une partition fat de maniere à rendre votre clé usb partageable avec windows

<b><big><span color=\"red\"><span font-family=\"Helvetica\">Attention! </span></span></big></b>
Par précaution veuillez effectuer une sauvegarde\nde votre LiveUSB avant d'utilliser cette fonction.</span></b>" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=600 \
--height=220 \
--list \
--radiolist \
--print-column="2" \
--separator=" " \
--hide-column="2" \
--column="*" \
--column="*" \
--column="Fonction à exécuter" \
TRUE "A" "Ajouter/Modifier partition fat" \
FALSE "B" "Supprimer partition fat" \
)
test $? -ne 0 && exit 0  # Bouton Annuler
if [ "${MENU}" == "A" ]; then
MOD_AJOUTER
elif [ "${MENU}" == "B" ]; then
MOD_SUPPRIMER
fi
exit 0
}
#_______________________________________________________________________________________________


function MOD_MENU()
{
MOD_MENU=""
MOD_MENU=$(zenity \
--title="Live CD/USB" \
--text="<span foreground=\"#BD5714\" font-family=\"impact\" size=\"x-large\">Création-Customisation de Live-CD-USB</span>
<span foreground=\"#276346\"><b>Paramètres définis pour votre LiveCD/USB
Lang:${MODLANG[0]}_${MODLANG[1]}.${MODLANG[2]} Clavier:${MODLANG[6]}:${MODLANG[5]} Région:${MODLANG[7]}
Version de Syslinux installé:${SYL_VERSION}
$(echo -e "$(sudo  dmidecode --type 2)" | grep -Ei "Manufacturer|Product" | xargs)</b></span>" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=640 \
--height=480 \
--list \
--print-column="2" \
--radiolist \
--separator=" " \
--column="*" \
--column="Val" \
--column="Fonction à exécuter" \
--hide-column="2" \
FALSE "A" "Customiser LiveCD" \
FALSE "B" "Reprise du mode \"Customiser LiveCD\"" \
FALSE "" "__________________@(\`↓´)@__________________" \
TRUE "C" "Créer LiveUSB" \
FALSE "D" "Customiser LiveUSB (Effacera clé USB, sauvegardez vos documents avant)" \
FALSE "E" "Reprise du mode \"Customiser LiveUSB\" (sauvegardez vos documents avant)" \
FALSE "" "__________________@(\`↓´)@__________________" \
FALSE "F" "Créer CD d'amorçage pour LiveUSB" \
FALSE "G" "Créer/M-à-jour une entrée à Grub pour démarrer votre LiveUSB" \
FALSE "H" "Ajouter/Modifier/Supprimer partition fat32 pour partage de données" \
FALSE "I" "Sauvegarde LiveUSB de la partition extlinux-ro" \
FALSE "J" "Restauration LiveUSB de la partition  extlinux-ro" \
FALSE "K" "Sauvegarde/Restauration totale de votre clé USB" \
FALSE "L" "Effacer mode \"persistent\" (casper-rw)" \
FALSE "" "__________________@(\`↓´)@__________________" \
FALSE "M" "Monter LiveUSB pour débogage" \
FALSE "N" "Monter LiveCD pour débogage" \
FALSE "O" "Démarrer qemu pour vérification de boot (clé USB)" \
FALSE "P" "Délocaliser /mnt (depuis un autre volume, crée un fichier travail.img)" \
FALSE "Q" "Délocaliser /mnt (remonter ancien fichier image travail.img)" \
FALSE "R" "Délocaliser /mnt (depuis un autre volume formaté en ext3)" \
FALSE "S" "Editer votre fichier .md5_live_perso.txt" \
)
test $? -ne 0 && exit 0 # Bouton Annuler
}

while true; do
if [ ! "$MOD_MENU" ]; then
MOD_MENU
else
break ;
exit 0
fi;
done;

if [ "${MOD_MENU}" == "A" ]; then
#Customiser LiveCD
CHECK_SPACE_JOB
DECOMPRESS_LIVECD
PREPA2
REPRISE_CHROOT
MENAGE_CHROOT
RECONSTRUCTION_SQUASHFS_LIVECD

elif [ "${MOD_MENU}" == "B" ]; then
#Reprise du mode \"Customiser LiveCD\"
CHECK_SPACE_JOB
REPRISE_LIVECD
PREPA2
REPRISE_CHROOT
MENAGE_CHROOT
RECONSTRUCTION_SQUASHFS_LIVECD

elif [ "${MOD_MENU}" == "C" ]; then
#Créer LiveUSB
cd $HOME
wget ${HEBERGEMENT}/liveusb.sh -O liveusb.sh
chown $SUDO_USER:$SUDO_USER ./liveusb.sh
chmod 644 ./liveusb.sh
md5="$( /usr/bin/md5sum ./liveusb.sh | awk '{print $1}' )"
chmod +x ./liveusb.sh
./liveusb.sh nocheck

elif  [ "${MOD_MENU}" == "D" ]; then
#Customiser LiveUSB (Effacera clé USB, sauvegardez vos documents avant)
CHECK_SPACE_JOB
CHERCHE_CLE
echo "clé: /dev/${CLE_USB}"
DECOMPRESS_LIVEUSB
PREPA2
REPRISE_CHROOT
MENAGE_CHROOT
RECONSTRUCTION_SQUASHFS_LIVEUSB

elif  [ "${MOD_MENU}" == "E" ]; then
#Reprise du mode \"Customiser LiveUSB\" (sauvegardez vos documents avant)
CHECK_SPACE_JOB
CHERCHE_CLE
echo "clé: /dev/${CLE_USB}"
REPRISE_LIVEUSB
PREPA2
REPRISE_CHROOT
MENAGE_CHROOT
RECONSTRUCTION_SQUASHFS_LIVEUSB

elif [ "${MOD_MENU}" == "F" ]; then
#Créer CD d'amorçage pour LiveUSB
CHERCHE_CLE
CD_BOOT

elif [ "${MOD_MENU}" == "G" ]; then
#Créer/M-à-jour une entrée à Grub pour démarrer votre LiveUSB
MOD_MENUGRUB

elif [ "${MOD_MENU}" == "H" ]; then
#Ajouter/Modifier/Supprimer partition fat32 pour partage de données
MOD_FAT

elif [ "${MOD_MENU}" == "I" ]; then
#Sauvegarde LiveUSB
SAUVEGARDE

elif [ "${MOD_MENU}" == "J" ]; then
#Restauration LiveUSB
RESTAURATION

elif [ "${MOD_MENU}" == "K" ]; then
#Sauvegarde/Restauration totale de votre clé USB
cd $HOME
wget ${HEBERGEMENT}/sauvegarde-restauration.sh -O sauvegarde-restauration.sh
chown $SUDO_USER:$SUDO_USER ./sauvegarde-restauration.sh
chmod 644 ./sauvegarde-restauration.sh
md5="$( /usr/bin/md5sum ./sauvegarde-restauration.sh | awk '{print $1}' )"
chmod +x ./sauvegarde-restauration.sh
./sauvegarde-restauration.sh

elif [ "${MOD_MENU}" == "L" ]; then
#Effacer mode \"persistent\" (casper-rw)
RESET_CASPER

elif [ "${MOD_MENU}" == "M" ]; then
#Monter LiveUSB pour débogage
MOUNT_LIVEUSB

elif [ "${MOD_MENU}" == "N" ]; then
#Monter LiveCD pour débogage
MOUNT_LIVECD

elif [ "${MOD_MENU}" == "O" ]; then
#Démarrer qemu pour vérification de boot (clé USB)
QEMU_INSTALL

elif [ "${MOD_MENU}" == "P" ]; then
#Délocaliser /mnt (depuis un autre volume, crée un fichier travail.img)
DELOCALISER_MNT

elif [ "${MOD_MENU}" == "Q" ]; then
#Délocaliser /mnt (remonter ancien fichier image travail.img)
DELOCALISER_OLD_MNT

elif [ "${MOD_MENU}" == "R" ]; then
#Délocaliser /mnt (depuis un autre volume formaté en ext3)
DELOCALISER_MNT_EXT3

elif [ "${MOD_MENU}" == "S" ]; then
#Editer votre fichier .md5_live_perso.txt
chown $SUDO_USER:$SUDO_USER "$HOME/.md5_live_perso.txt"
chmod 644 "$HOME/.md5_live_perso.txt"
gedit $HOME/.md5_live_perso.txt &
exit 0

else
echo "N/A";
fi

exit 0
#_______________________________________________________________________________________________
#________________________________________F.I.N__________________________________________________

