#!/bin/bash
# Fonction alerte : une fenêtre d'information qui met fin au programme
function alerte() {
yad --title="SDTools" --width="600" --height="400" --fixed --center \
--window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
--image="/usr/share/icons/SDTools.png" --borders="20" --item-separator=";" \
--text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>\n<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>" \
--form --columns="1" \
--dialog-sep \
--align="left" \
--field="\n<span color=\"red\"><big><b>$1</b></big></span>:LBL" "" \
--field="<span color=\"red\">$2</span>:LBL" "" \
--button=" Quitter;gtk-cancel:1;Cliquez ici pour quitter" 2> /dev/null
# retour vaut le retour de la fenêtre
retour=$?
# si on clic sur la croix
if [ $retour -eq 252 ]; then
# on sort du programme
exit
# si on clic sur le bouton quitter
elif [ $retour -eq 1 ]; then
# on sort du programme
exit
fi
}
# Fonction pulse : une fenêtre qui affiche une pulse bar pendant une action
function pulse() {
yad --title="SDTools" --width="600" --height="400" --fixed --center \
--window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
--image="/usr/share/icons/SDTools.png" --borders="20" --item-separator=";" \
--text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>\n<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>
\n
<big><b><span color=\"red\">$1</span></b></big>
\n\n\n" \
--progress \
--pulsate \
--auto-close \
--auto-kill \
--no-buttons
# retour vaut le retour de la fenêtre
retour=$?
# si on clic sur la croix
if [ $retour -eq 252 ]; then
killall mkfs mkdosfs 2> /dev/null
exit
fi
}
# Fonction gestion_pulse : affiche en conséquence le retour du processus de formatage
function gestion_pulse() {
# On récupère le PID de la progress bar
pid_yad=$(pgrep yad)
# Tant qu'il tourne on attend
while (ps -p $pid_yad > /dev/null) ; do
sleep 1
done
# on récupère des infos du fichier pulse
error=$(cat /tmp/formatage.log | head -n 1 | awk -F" " '{print $2}')
# Si on trouve le mot failed
if [ "$error" = "failed" ]; then
alerte "Alerte !!!" "\n\n\nLe support a été retirer avant la fin "
# si le fichier pulse est toujours vide
elif [[ -s $(cat /tmp/formatage.log) ]]; then
alerte "Alerte !!!" "\n\n\nVous avez interrompu avant la fin "
fi
}
# Fonction infos : une fenêtre qui affiche une information
function info() {
yad --title="SDTools" --width="600" --height="400" --fixed --center \
--window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
--image="/usr/share/icons/SDTools.png" --borders="20" -separator="|" --item-separator=";" \
--text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>
<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>\n
\n
<big><b><span color=\"red\">$1</span></b></big>
\n" \
--form --columns="3" \
--dialog-sep \
--align="left" \
--field="$2" "$3" \
--button="$4" \
--button="$5"
# retour vaut le retour de la fenêtre
retour=$?
# si on clic sur la croix
if [ $retour -eq 252 ]; then
killall mkfs mkdosfs 2> /dev/null
exit
elif [ $retour -eq 1 ]; then
:
else
cmd="break"
fi
}
# Fonction progress : une fenêtre qui affiche une progress bar pendant une action
function progress() {
yad --title="SDTools" --width="600" --height="400" --fixed --center \
--window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
--image="/usr/share/icons/SDTools.png" --borders="20" --item-separator=";" \
--text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>\n<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>
\n
<big><b><span color=\"red\">$1</span></b></big>
\n\n\n" \
--progress \
--auto-close \
--auto-kill \
--no-buttons
}
# Fonction gestion_progress : affiche en conséquence le retour du processus de copie ou sauvegarde
function gestion_progress() {
# On récupère le PID de la progress bar
pid=$(pgrep yad)
# Tant qu'il tourne on attend
while (ps -p $pid > /dev/null) ; do
sleep 1
done
i=0
# si le fichier pulse est vide, tant qu'il est vide on lance la pulse bar (60s max)
( while [ -s $(cat /tmp/progress.log) ]; do
compterebour=$((60-$i))
echo "#Veuillez patienter $compterebour secondes max ..."
sleep 1
((i++))
# Au bout de 60s on tue les processus dd pv et yad
if [ $i -eq 60 ]; then
killall dd pv yad
break
fi
done ) | pulse "Fermeture du processus en cours"
# si le fichier progress.log est toujours vide au bout de 60s
if [ -s $(cat /tmp/progress.log) ]; then
# c'est que l'on a cliqué sur la croix, on affiche une alerte
alerte "Alerte !!!" "\n\n\nVous avez interrompu avant la fin de $1"
# sinon
else
# si on est sur une installation
if [ $ret_installer = "TRUE" ]; then
# on récupère des infos du fichier progress.log, si il contient le mot erreur
if [[ $(cat /tmp/progress.log) == *"erreur"* ]] || [[ $(cat /tmp/progress.log) == *"Erreur"* ]]; then
error=$(cat /tmp/progress.log | head -n 1 | awk '{print$0}')
# on affiche une alerte
alerte "Alerte !!!" "\n\n\nLe support a été retirer avant la fin de $1\n\n$error"
fi
# si on est sur une sauvegarde
else
# on récupère la taille copié dans le fichier progress.log
SIZE_copie=$(cat /tmp/progress.log | tail -n 1 | awk -F" " '{print $4}')
# on supprime le caractère vide à la fin pour n'avoir qu'un nombre
taille_copie=${SIZE_copie%?}
# si la taille copié est inférieur à la taille de la clé
if (( $taille_copie < $taille_octet)); then
# on affiche une alerte
alerte "Alerte !!!" "\n\n\nLe support a été retirer avant la fin de $1\nSeulement $taille_copie octets de copiés sur $taille_octet octets"
fi
fi
fi
# si il n'y a pas eu de problème on affiche les infos de la copie ou sauvegarde
info "$2 :" ":TXT" "$(cat /tmp/progress.log)" " Quitter;gtk-cancel:1" " Continuer;gtk-ok:0" &> /dev/null
}
# on met en variable 2 émojis
emojiPleur=$(printf '\U1F62D\n')
emojiInquiet=$(printf '\U1F914\n')
# On récupère le nom d'utilisateur du système
user=$(who | awk '{print $1}')
# variable pour la liste des types de support
lst_support="SD;USB"
# variable pour le dossier ou sont stockées vos images
folder="/home/$user/Documents/SDTools"
# variable pour la taille max
taille_max=2
# variable pour la liste des images
list_img="aucune image"
# variable pour la fenêtre
arg1="Veuillez brancher votre support avant de continuer"
# variable pour la liste des tailles
list_taille=(2 4 8 16 32 64 128)
# on reconstitue la liste des taille mais en texte par un ;
for i in "${list_taille[@]}"; do
list_taille_focus="${list_taille_focus}${i};"
done
# boucle toujours vrai
while :; do
# on récupère le dernier support monté sur le système
montage=$(sudo fdisk -l | sed -n '/Disque/p' | tail -n 1 | awk '{print $2}'| cut -d":" -f1)
# on supprime l'espace vide de la fin dans la variable montage
montage_support=${montage%?}
# on récupère le nom
cle=$(echo $montage_support | awk -F"/" '{print $3}')
# On récupère sa taille, sa taille arrondi et le double de la taille arrondi
taille=$(fdisk -l | sed -n '/Disque/p' | tail -n 1 | cut -d" " -f3 )
taille_arrondi=$(fdisk -l | sed -n '/Disque/p' | tail -n 1 | cut -d" " -f3 | cut -d"," -f1 )
tailleDouble=$(( $taille_arrondi*2 ))
# On récupère la taille réelle de la clé en octet
taille_oct=$(fdisk -l | sed -n '/Disque/p' | tail -n 1 | awk -F" " '{print $5}' | awk -F"o" '{print $1}')
# On supprime le cratère vide de la fin dans la variable taille_octet (pour avoir uniquement des chiffres)
taille_octet=${taille_oct%?}
# variable cmd vide
cmd=""
# on détruit la variable rep si elle existe
unset rep
# on se déplace dans le dossier SDTools
cd $folder
# on y récupère toutes les images de type img ou iso que l'on stock dans la variable rep (de type tableau)
i=0
for j in $(find *.img *.iso ); do
rep[$i]=$(basename "$j")
((i++))
done
# Si on ne trouve pas d'image
if [[ -z ${rep[@]} ]]; then
# le 3eme argument du formulaire à venir sera cette phrase
list_img="aucune image"
# si on trouve des images
else
# pour chaque image trouvée
for k in ${rep[@]}; do
# si elle est déjà présente dans la variable img_installer
if [[ $k == $img_installer ]]; then
# on ajoute le ^ devant son nom et le met dans la variable list_img2 afin que le focus soit sur elle dans le formulaire
list_img2="$list_img2 ^$k "
# sinon
else
# on met son nom dans la variable list_img2
list_img2="$list_img2 $k "
fi
done
# on reconstitue la liste des images en remplaçant les espaces par un ;
list_img=$(echo $list_img2 | tr " " ";" )
# on détruit list_img2
unset list_img2
fi
# On affiche une fenêtre avec un formulaire
yad --title="SDTools" --width="600" --height="400" --fixed --center \
--window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
--image="/usr/share/icons/SDTools.png" --borders="20" -separator="|" --item-separator=";" \
--text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>
<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>\n
\n
<big><b><span color=\"red\">$arg1</span></b></big>
\n" \
--form --columns="3" \
--dialog-sep \
--align="left" \
--field="Formater :CHK" "$ret_formater" \
--field="Installer :CHK" "$ret_installer" \
--field="Sauvegarder :CHK" "$ret_sauvegarder" \
--field=":CB" "$lst_support" \
--field=":LBL" "" \
--field=":LBL" "" \
--field="Taille du support:CB" "$list_taille_focus" \
--field="Choix de l'image :CB" "$list_img" \
--field="Nom de l'image : LBL" "$nom_img_sauvegarder" \
--button=" Quitter;gtk-cancel:1;Cliquez ici pour quitter" \
--button=" Vérifier;gtk-ok;Cliquez ici pour vérifier:0" > /tmp/data.log # les choix du formulaire sont stocké dans le fichier data.log
# formulaire sur 3 colonnes 1 4 7
# 2 5 8
# 3 6 9
# le champ (1) du choix pour le formatage (case à cocher)
# le champ (2) du choix pour l'installation (case à cocher)
# le champ (3) du choix pour la sauvegarde (case à cocher)
# le champ (4) du choix pour le type de support (liste)
# le champ (5) vide (label vide)
# le champ (6) vide (label vide)
# le champ (7) du choix pour la taille du support (liste)
# le champ (8) du choix pour les images à installer (liste)
# le champ (9) du choix pour le nom à donner à la sauvegarde (label)
# retour vaut le retour de la fenêtre
retour=$?
# si on clic sur la croix
if [ $retour -eq 252 ]; then
# on quitte le programme
exit
# si on clic sur le bouton quitter
elif [ $retour -eq 1 ]; then
# on quitte le programme
exit
fi
# si on clic sur le bouton vérifier, on récupère les infos du formulaire dans des variables
ret_formater=$(cat /tmp/data.log | awk -F"|" '{print $1}')
ret_installer=$(cat /tmp/data.log | awk -F"|" '{print $2}')
ret_sauvegarder=$(cat /tmp/data.log | awk -F"|" '{print $3}')
support_choisi=$(cat /tmp/data.log | awk -F"|" '{print $4}')
taille_max=$(cat /tmp/data.log | awk -F"|" '{print $7}')
img_installer=$(cat /tmp/data.log | awk -F"|" '{print $8}'| awk '{$1=$1}1')
nom_img_sauvegarder=$(cat /tmp/data.log | awk -F"|" '{print $9}')
# on récupère la taille de l'image choisi
SIZE=$(stat --printf="%s" $folder/$img_installer)
# on détruit la liste avec focus et on la refait avec le nouveau choix
unset list_taille_focus
for i in "${list_taille[@]}"; do
if [ $i -eq $taille_max ];then
list_taille_focus="${list_taille_focus}^${i};"
else
list_taille_focus="${list_taille_focus}${i};"
fi
done
# en fonction du support choisi on met le focus dessus
if [[ $support_choisi == "USB" ]]; then lst_support="^USB;SD"; else lst_support="USB;^SD"; fi
# si votre support choisis ne correspond pas au type du dernier montage, on vous alerte
if ([[ $cle =~ ^sd.* ]] && [[ $support_choisi == "SD" ]]) || ([[ $cle =~ ^mm.* ]] && [[ $support_choisi == "USB" ]]); then
arg1="$emojiInquiet Vous avez choisis ${support_choisi}, \nCe qui ne correspond pas au dernier support du système: ${cle}. $emojiPleur"
# si vous cocher formater et sauvegarder, on vous alerte
elif [[ $ret_formater == "TRUE" ]] && [[ $ret_sauvegarder == "TRUE" ]]; then
arg1="$emojiInquiet Choix interdit, \nOn ne formate pas dans le cas d'une sauvegarde $emojiPleur "
# si vous cocher installer et sauvegarder, on vous alerte
elif [[ $ret_installer == "TRUE" ]] && [[ $ret_sauvegarder == "TRUE" ]]; then
arg1="$emojiInquiet Choix interdit, \nOn ne peut pas faire les deux $emojiPleur "
# si vous ne cocher rien, on vous alerte
elif [[ $ret_formater == "FALSE" ]] && [[ $ret_installer == "FALSE" ]] && [[ $ret_sauvegarder == "FALSE" ]]; then
arg1="$emojiInquiet Vous devez faire un choix avant de vérifier $emojiPleur "
# si vous cocher installer mais qu'il n'y a pas d'image dans le dossier SDTools, on vous alerte
elif [[ $ret_installer == "TRUE" ]] && [[ $img_installer == "aucune image" ]]; then
# on vous demande si vous voulez installer raspberry pi os ou la version lite
info "Vous devez avoir une image à installer dans le dossier SDTools" "choisir une image à télécharger :CB" "Raspberry pi os;Raspberry pi os lite" " Quitter;gtk-cancel:1" " Exécuter;gtk-ok:0" > /tmp/data.log
# si vous quittez on sort du programme
if [ $? -eq 1 ]; then
exit
fi
# on récupère le non de l'image a télécharger
img_get=$(cat /tmp/data.log | awk -F"|" '{print $1}')
# si c'est raspberry pi os, on le télécharge dans une bar de progression
if [[ $img_get == "Raspberry_pi_os" ]]; then
wget -o /tmp/progress.log --progress=dot 'https://raspberry-pi.fr/download/raspbian_latest.zip' 2>&1 | tee /dev/stderr | sed -u "s/^ *[0-9]*K[ .]*\([0-9]*%\) *\([0-9,]*[A-Z]\) *\([0-9a-z]*\).*/\1\n#Téléchargement \1 --> \3 restant à \2\/s/" | progress "Téléchargement de $img_get\nSource: https://raspberry-pi.fr/telechargements/" 2> /dev/null
# si c'est raspberry pi os lite, on le télécharge dans une bar de progression
else
wget --progress=dot 'https://raspberry-pi.fr/download/raspbian_lite_latest.zip' 2>&1 | tee /dev/stderr | sed -u "s/^ *[0-9]*K[ .]*\([0-9]*%\) *\([0-9,]*[A-Z]\) *\([0-9a-z]*\).*/\1\n#Téléchargement \1 --> \3 restant à \2\/s/" | progress "Téléchargement de $img_get\nSource: https://raspberry-pi.fr/telechargements/" 2> /dev/null
fi
# on décompresse le fichier
unzip raspbian*.zip | pulse "Décompression du fichier ${img_get}.zip"
rm -f raspbian*.zip
# si vous cocher sauvegarder mais que vous ne donner pas de nom, on vous alerte
elif [[ $ret_sauvegarder == "TRUE" ]] && [[ -z $nom_img_sauvegarder ]]; then
arg1="$emojiInquiet Vous devez donner un nom à votre image $emojiPleur "
# si la taille du support choisis est inférieur à la taille du dernier montage, on vous alerte
elif awk 'BEGIN{exit ARGV[1]<ARGV[2]}' "$taille" "$taille_max"; then
arg1="$emojiInquiet Le support est plus grand que prévu, \nOn ne prend pas de risque $emojiPleur "
# si la taille du support choisis est supérieur à la taille du dernier montage, on vous alerte
elif awk 'BEGIN{exit ARGV[1]<ARGV[2]}' "$taille_max" "$tailleDouble"; then
arg1="$emojiInquiet Le support est plus petit que ça, \nOn ne prend pas de risque $emojiPleur "
# si la taille de l'image à installer est plus grande que le support, on vous alerte
elif awk 'BEGIN{exit ARGV[1]<ARGV[2]}' "$SIZE" "$taille_octet"; then
alerte "Attention !!!" "$emojiInquiet Le support de $taille_octet octets est plus petit que l'image ($SIZE octets), \nVeuillez utiliser un support plus grand $emojiPleur"
# sinon, rien de suspect, on continue
else
# on récupère les choix du formulaire
arg1="Veuillez brancher votre support avant de continuer"
recap="Support : $support_choisi \nTaille : $taille GiB \nNom : $cle\nFormatage :"
if [[ $ret_formater == "TRUE" ]]; then recap="$recap OUI\n"; else recap="$recap NON\n"; fi
if [[ $ret_installer == "TRUE" ]]; then recap="$recap Installation : $img_installer\n"; else recap="$recap Installation : NON\n"; fi
if [[ $ret_sauvegarder == "TRUE" ]]; then recap="$recap Sauvegarde : $nom_img_sauvegarder\n"; else recap="$recap Sauvegarde : NON\n"; fi
# on affiche un récapitulatif de ce qui va être fait (fonction info qui génère la sortie de la boucle ou pas selon votre choix)
info "récapitulatif :" ":TXT" "$recap" " Retour;edit-undo-rtl:1" " Exécuter;gtk-ok:0" &> /dev/null
# si on clic sur retour, on reste dans la boucle car la variable $cmd vaut rien, si on clic sur exécuter la variable $cmd vaut break, on quitte la boucle
$cmd
fi
done
# si vous avez choisi de formater
if [[ $ret_formater == "TRUE" ]]; then
# si la taille du support est plus grand que prévu, on vous alerte et quitte le programme
if awk 'BEGIN{exit ARGV[1]<ARGV[2]}' "$taille" "$taille_max"; then
alerte "Attention !!!" "\n\n\n$emojiInquiet Le support est plus grand que prévu, on ne prend pas de risque $$emojiPleur "
exit
# sinon
else
# on démonte le support du système
umount ${montage_support}* 2> /dev/null
# Si le support est une cle USB
if [ "$support_choisi" = "USB" ]; then
# On formate le support (en écrivant le retour dans le fichier formatage.log et dans un shell différent)
mkfs.vfat $montage_support -F32 -I > /tmp/formatage.log &
# On récupère le PID du processus de formatage
pid_formate=$(pgrep mkfs)
# Si le support est une carte SD
else
# On formate le support (en écrivant le retour dans le fichier formatage.log et dans un shell différent)
mkdosfs $montage_support -F32 -I > /tmp/formatage.log &
# On récupère le PID du processus de formatage
pid_formate=$(pgrep mkdosfs)
fi
# Tant que le processus de formatage tourne
( while ps -p $pid_formate &>/dev/null; do
# on écrit dans la pulse bar "Veuillez patienter""
echo "#Veuillez patienter ..."
sleep 1
done
# Quand c'est fini, on écrit dans la pulse bar "Formatage terminé"
echo "#Formatage terminé"
sleep 2) | pulse "Formatage $cle en cours" & # La pulse bar tourne pendant ce qui est en parenthèse
# on lance la fonction gestion_pulse qui vérifie le statut de la fenêtre
gestion_pulse "du formatage" "Le formatage est terminé"
fi
fi
# si vous avez choisi de sauvegarder un support dans une image disque
if [[ $ret_sauvegarder == "TRUE" ]]; then
# On démonte le support du système
umount /dev/${cle}* 2> /dev/null
# On se déplace dans ce dossier
cd $folder
# On crée une image vide avec le nom que vous avez choisi
touch "$folder/$nom_img_sauvegarder.img"
# On y clone le support
(dd if=/dev/"${cle}" | pv -n -s "$taille_octet" | dd bs=4096 of="$folder/$nom_img_sauvegarder.img" &> /tmp/progress.log) 2>&1 | progress "Sauvegarde de : \n$cle dans ${nom_img_sauvegarder}.img" &
# On lance la fonction qui gère la sortie de la copie
gestion_progress "la sauvegarde" "La sauvegarde est terminée" > /dev/null
fi
# si vous avez choisi d'installer une image disque
if [[ $ret_installer == "TRUE" ]]; then
# si la taille du support est plus grand que prévu, on vous alerte et quitte le programme
if awk 'BEGIN{exit ARGV[1]<ARGV[2]}' "$taille" "$taille_max"; then
alerte "Attention !!!" "\n\n\n$emojiInquiet Le support est plus grand que prévu, on ne prend pas de risque $emojiPleur "
exit
sinon
else
# On démonte le support du système
umount /dev/${cle}* 2> /dev/null
# On installe l'image sur le support en utilisant la commande «pv» pour avoir le pourcentage dans la progresse bar
(dd if="$folder/$img_installer" | pv -n -s "$SIZE" | dd bs=4096 of=/dev/"$cle" &> /tmp/progress.log) 2>&1 | progress "Installation de : \n$img_installer sur $cle" &
# On lance la fonction qui gère la sortie de la copie
gestion_progress "l'installation" "L'installation est terminée" 2> /dev/null
fi
fi
# si vous avez installer «Raspberry pi os»
if [[ $ret_installer == "TRUE" ]] && [[ $img_installer == *"raspios"* ]]; then
# on affiche une fenêtre qui demande si vous voulez configurer le SSH et le wifi
arg1="Vous devez renseigner vos identifiants pour le Wifi"
yad --title="SDTools" --width="600" --height="400" --fixed --center \
--window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
--image="/usr/share/icons/SDTools.png" --borders="20" -separator="|" --item-separator=";" \
--text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>
<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>\n
\n
<big><b><span color=\"red\">Vous avez installé Raspberry pi os</span></b></big>
\n" \
--form --columns="3" \
--dialog-sep \
--align="left" \
--field="Configurer le SSH et le WIFI :CB" "NON;OUI" \
--button=" Quitter;gtk-cancel:1" \
--button=" Continuer;gtk-ok:0" > /tmp/data.log
# retour vaut le retour de la fenêtre
retour=$?
# si on clic sur la croix, on quitte le programme
if [ $retour -eq 252 ]; then
exit
# si on clic sur quitter, on quitte le programme
elif [ $retour -eq 1 ]; then
exit
fi
# on récupère le choix
reponse=$(cat /tmp/data.log | awk -F"|" '{print $1}')
# si c'est oui
if [[ $reponse == "OUI" ]]; then
# tant que les variable sont vide, on affiche une fenêtre qui demande si vos identifiants wifi
while [[ -z $SSID ]] || [[ -z $mdpWIFI ]]; do
yad --title="SDTools" --width="600" --height="400" --fixed --center \
--window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
--image="/usr/share/icons/SDTools.png" --borders="20" -separator="|" --item-separator=";" \
--text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>
<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>\n
\n
<big><b><span color=\"red\">$arg1</span></b></big>
\n" \
--form --columns="3" \
--dialog-sep \
--align="left" \
--field="SSID " "" \
--field="Clé WIFI :H" "" \
--button=" Quitter;gtk-cancel:1;Cliquez ici pour quitter" \
--button=" Valider;gtk-ok;Cliquez ici pour valider:0" > /tmp/data.log
# retour vaut le retour de la fenêtre
retour=$?
# si on clic sur la croix, on quitte le programme
if [ $retour -eq 252 ]; then
exit
# si on clic sur le bouton quitter, on quitte le programme
elif [ $retour -eq 1 ]; then
exit
fi
# on récupère les identifiants du wifi
SSID=$(cat /tmp/data.log | awk -F"|" '{print $1}')
mdpWIFI=$(cat /tmp/data.log | awk -F"|" '{print $2}')
done
# On créer les dossiers de montage
mkdir /media/$user/boot
# On monte les partitions dans ce dossier en fonction du support
if [ "$support_choisi" = "USB" ]; then
mount /dev/"${cle}1" -o uid=1000 /media/$user/boot
else
mount /dev/"${cle}p1" -o uid=1000 /media/$user/boot
fi
# On attend 0.5 s
sleep 0.5
# On y créer un fichier vide nommé ssh
touch /media/$user/boot/ssh
# On crée un fichier vide nommé wpa_supplicant dans le dossier boot
touch /media/$user/boot/wpa_supplicant.conf
# On écrit ces lignes dans ce fichier (configuration du réseaux wifi au démarrage)
echo "ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev" >> /media/$user/boot/wpa_supplicant.conf
echo "country=FR" >> /media/$user/boot/wpa_supplicant.conf
echo "update_config=1" >> /media/$user/boot/wpa_supplicant.conf
echo "" >> /media/$user/boot/wpa_supplicant.conf
echo "network={" >> /media/$user/boot/wpa_supplicant.conf
echo " ssid=\"$SSID\"" >> /media/$user/boot/wpa_supplicant.conf
echo " psk=\"$mdpWIFI\"" >> /media/$user/boot/wpa_supplicant.conf
echo "}" >> /media/$user/boot/wpa_supplicant.conf
sleep 0.5
fi
# on affiche une fenêtre qui demande si vous voulez télécharger des scripts de configuration
if (yad --title="SDTools" --width="600" --height="400" --fixed --center \
--window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
--image="/usr/share/icons/SDTools.png" --borders="20" -separator="|" --item-separator=";" \
--text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>
<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>\n
\n
<big><b><span color=\"red\">Vous avez installé Raspberry pi os</span></b></big>
\n" \
--form --columns="3" \
--dialog-sep \
--align="left" \
--field="Installer les scripts utiles au premier démarrage ? :CB" "NON;OUI" \
--button=" Quitter;gtk-cancel:1" \
--button=" Continuer;gtk-ok:0" > /tmp/data.log ) then
# on récupère le choix
reponse=$(cat /tmp/data.log | awk -F"|" '{print $1}')
# si c'est oui
if [[ $reponse == "OUI" ]]; then
# On monte les partitions dans ce dossier en fonction du support
if [ "$support_choisi" = "USB" ]; then
mount /dev/"${cle}2" /media/$user
else
mount /dev/"${cle}p2" /media/$user
fi
# On verifie si git est installé
echo $(dpkg --get-selections | grep git) > /tmp/lamp.log
# si le premier champs ou le 3 eme est git
if [[ $(cat /tmp/lamp.log | awk -F" " '{print $1}') == "git" ]] || [[ $(cat /tmp/lamp.log | awk -F" " '{print $3}') == "git" ]]; then
# si le deuxième champs ou quatrième est «deinstall», le paquet n'est plus installé
if [[ $(cat /tmp/lamp.log | awk -F" " '{print $2}') == "deinstall" ]] || [[ $(cat /tmp/lamp.log | awk -F" " '{print $4}') == "deinstall" ]]; then
# on retourne 1
flag=1
# sinon c'est que le paquet est installé
else
# on retourne 0
flag=0
fi
# sinon, le premier champs est vide, le paquet n'a jamais été installé
else
# on retourne 1
flag=1
fi
(
# On attend 1 s
sleep 1
# si il ne l'est pas
if (( flag == 1 )); then
echo "#Installation de git"
apt-get install git -y # on install git
fi
sleep 1
# on clone le dossier Script_
echo "#Copie du dossier Script_Rpi"
cd /media/$user/home/pi
git clone https://github.com/weedmanu/Script_Rpi.git &> /tmp/git.log
sleep 1
# on rend les script exécutable et on vous rend propriétaire du dossier Script_Rpi
echo "#Attribution des permissions"
chmod +x Script_Rpi/*.sh
chown -R $user:$user Script_Rpi
sleep 1
# On attend 1 s
sleep 1
) | pulse "téléchargement des scripts en cours" & # La pulse bar tourne pendant ce qui est en parenthèse
gestion_pulse "téléchargement des scripts" "Le téléchargement des scripts est terminé" 2> /dev/null
fi
fi
fi
# on démonte la clé
umount /dev/${cle}* &>/dev/null
umount /media/$user/* &>/dev/null
# On supprime le dossier de montage
rm -fR /media/$user/boot
info "Fin du programme" ":LBL" "" " Quitter;gtk-cancel:1" " Continuer;gtk-ok:0" &> /dev/null
# fin du programme
exit