#1 Le 01/04/2013, à 21:16
- FelixP
[Résolu !] Mon premier script \o/ HELP !
Salut à tous
Je fais (enfin) un script pour Linux : créer une clé Win bootable sous Linux. (J'en ai hélas besoin…)
Je m'inspire de cette page, merci à Pierre !
Voici mon début de script. J'aurais quelques questions à vous soumettre…
EDIT : J'ai posté mes scripts sur Dropbox, comme ça je n'ai pas besoin de les actualiser ici !
https://www.dropbox.com/sh/kvifjq9019q9i53/DcXpIgWyE-
(l'extension .txt permet de lire le script en ligne. Vous pouvez la supprimer après ! )
#!/bin/bash
# Le script fonctionnera correctement avec fdisk, mkfs.ntfs, rsync, gettext, et après installation de ms-sys. Voir fin du script pour install.
# Le périphérique ne doit pas être en gpt, mais en mbr. Veuillez utiliser gparted avant dans ce cas.
ISO=$1
echo "À exécuter en Root (Administrateur). ATTENTION, perte de données sur la clé !"
fdisk -l | grep Disk
while [ ! -b "$CLE" ];do read -p "Donnez la clé à réécrire TOTALLEMENT (sous le format /dev/sd*) :" CLE; done
for i in $(seq 1 4); do umount $CLE$i
done
while [ "$BOOL" != "y" -a "$BOOL" != "n" ]; do read -p "L'iso $ISO sera copiée sur le périphérique $CLE. Okay ? (y/N) : " BOOL; done
echo "
******************Effacement du MBR.******************
"
dd if=/dev/zero of=$CLE bs=446 count=1
echo "
***************Création des partitions.***************"
cat <<EOF | fdisk $CLE
d
n
p
1
a
1
w
EOF
mkfs.ntfs $CLE'1' --fast --no-indexing
mkdir /mnt/USBWIN
mkdir /mnt/ISOWIN
mount $CLE'1' /mnt/USBWIN
mount "$ISO" /mnt/ISOWIN -o loop,ro
echo "
**************Copie. L'attente la plus longue sera sur sources/install.wim**************
"
rsync -arv --progress /mnt/ISOWIN/* /mnt/USBWIN
umount /mnt/ISOWIN
umount /mnt/USBWIN
rm -r /mnt/USBWIN /mnt/ISOWIN
while [[ "$VER" < 1 || "$VER" > 3 ]]; do read -p "Vous devez, pour écrire le MBR, sélectionner la version de Windows qui va être installée.
1. WindowsXP/2000/2003…
2. WindowsVista
3. Windows7 ou 8
Votre version ? (1-3) :" VER ; done
case $VER in
"1") /usr/local/bin/ms-sys --mbr $CLE ;;
"2") /usr/local/bin/ms-sys --mbrvista $CLE ;;
"3") /usr/local/bin/ms-sys --mbr7 $CLE ;;
esac
echo "Voilà ! Votre clé d'installation Windows® est prête à être utilisée."
# Télécharger la dernière version sur http://ms-sys.sourceforge.net/#Download puis :
# cd ms-sys-X.X.X
# sudo make
# sudo make install
1. Comment faire une invite "interactive", du genre "donner le chemin de l'iso… :" etc ?
2. Comme on peut le voir, la commande finale pour créer le MBR pour Windows' dépend de la version (oÔ). Je proposerais donc un choix où un chiffre est demandé. Comment tester la réponse (un match, un test… How ?) ?
3. Je vais ensuite copier les fichiers vers la clé. Est-il possible, avec cp, d'afficher l'avancement ? (j'imagine que oui, MAIS… je sais pas comment ) EDIT : Pour l'avancement, google a été mon (bref) ami, rsync -arv --progress résoud mon problème
Merci d'avance !
Félix
EDIT : il me reste un problème. Un code de test serait :
#!/bin/bash
ISO='Windows\ 8\ Pro.iso'
mount $ISO /mnt/auie -o loop,ro
Ça me retourne une erreur (en fait, le manuel de mount)
alors que
root@Osiris:/home/felix# mount Windows\ 8\ Pro.iso /mnt/auie -o loop
fonctionne très bien. Quelqu'un peut m'aider ?
Dernière modification par FelixP (Le 07/04/2013, à 11:31)
Envoyé depuis mon navigateur libre sous mon os libre.
Manjaro (basé Arch) + Cinnamon, et Firefox-Nightly 44.0 !
Voyez mes astuces ici : http://doc.ubuntu-fr.org/utilisateurs/felixp
Hors ligne
#2 Le 01/04/2013, à 21:42
- jacobus77
Re : [Résolu !] Mon premier script \o/ HELP !
1/ Eventuellement
read -p
?
Hors ligne
#3 Le 01/04/2013, à 21:46
- FelixP
Re : [Résolu !] Mon premier script \o/ HELP !
Okay, alors il faudrait que je fasse : read -p 'Chemin de l'iso :' ISO
?
EDIT : Testé, approuvé, merci de l'info
Dernière modification par FelixP (Le 01/04/2013, à 21:54)
Envoyé depuis mon navigateur libre sous mon os libre.
Manjaro (basé Arch) + Cinnamon, et Firefox-Nightly 44.0 !
Voyez mes astuces ici : http://doc.ubuntu-fr.org/utilisateurs/felixp
Hors ligne
#4 Le 01/04/2013, à 22:20
- FelixP
Re : [Résolu !] Mon premier script \o/ HELP !
Bah… En fait, j'ai trouvé mes infos tout seul ^^''
http://www.siteduzero.com/informatique/ … -a-la-fois
Merci en tout cas pour read !
Script actualisé dans le premier post !
Dernière modification par FelixP (Le 02/04/2013, à 15:00)
Envoyé depuis mon navigateur libre sous mon os libre.
Manjaro (basé Arch) + Cinnamon, et Firefox-Nightly 44.0 !
Voyez mes astuces ici : http://doc.ubuntu-fr.org/utilisateurs/felixp
Hors ligne
#5 Le 02/04/2013, à 02:56
- xavier4811
Re : [Résolu !] Mon premier script \o/ HELP !
Moi je dirais juste
while [ ! -f "$file" ];do read -p "quel fichier ?" file; done
while [ ! -b "$disk" ];do read -p "quel disque ?" disk; done
while [ "$reponse" != "y" -a "$reponse" != "n" ]; do read -p "reponse ? (y/n)" reponse; done
while [[ "$num" < 1 || "$num" > 3 ]]; do read -p "reponse entre 1 et 3 ?" num; done
assure toi que la saisie correspond a ce que tu attend.
Hors ligne
#6 Le 02/04/2013, à 06:04
- pingouinux
Re : [Résolu !] Mon premier script \o/ HELP !
Bonjour,
ISO='Windows\ 8\ Pro.iso' mount $ISO /mnt/auie -o loop,ro
Il faut faire
ISO=Windows\ 8\ Pro.iso
# ou
ISO='Windows 8 Pro.iso'
# ou
ISO="Windows 8 Pro.iso"
suivi de
mount "$ISO" /mnt/auie …
Hors ligne
#7 Le 02/04/2013, à 06:48
- Squashfs
Re : [Résolu !] Mon premier script \o/ HELP !
Salut.
On peut aussi utiliser " cfdisk " pour créer des partitions.
Hors ligne
#8 Le 02/04/2013, à 14:24
- FelixP
Re : [Résolu !] Mon premier script \o/ HELP !
Okay ! Alors
1. xavier4811 > ça correspond à quoi les options ! -f, ! -b, -a ?
Les double crochets pour le dernier test, ça correspond à quoi ?
(sinon le reste, je comprends)
2. pingouinux > Aah, okay, il faut mettre des guillements !
3. Squashfs > Je ne savais pas que cet utilitaire était installé de base ! Maintenant que tu me le proposes… Je vais tenter !
EDIT : Je pensais à sfdisk… Mais celui-ci est génial aussi !
Sinon, je viens de tomber sur ton script de barre de progression. Au niveau vitesse, en considérant que la cible est une pauvre clé usb, est-ce correct ?
J'ai modifié en conséquence mon script. Et il affiche la liste des disques avant de choisir !
Dernière modification par FelixP (Le 02/04/2013, à 15:29)
Envoyé depuis mon navigateur libre sous mon os libre.
Manjaro (basé Arch) + Cinnamon, et Firefox-Nightly 44.0 !
Voyez mes astuces ici : http://doc.ubuntu-fr.org/utilisateurs/felixp
Hors ligne
#9 Le 02/04/2013, à 15:48
- FelixP
Re : [Résolu !] Mon premier script \o/ HELP !
Je n'ai pas trouvé comment démonter toutes les partoches d'un périphérique d'un coup, d'où ma boucle moche. Vous avez une idée ?
Envoyé depuis mon navigateur libre sous mon os libre.
Manjaro (basé Arch) + Cinnamon, et Firefox-Nightly 44.0 !
Voyez mes astuces ici : http://doc.ubuntu-fr.org/utilisateurs/felixp
Hors ligne
#10 Le 02/04/2013, à 18:46
- jacobus77
Re : [Résolu !] Mon premier script \o/ HELP !
Une solution serait de récupérer la liste des périphériques montés à partir de la commande
mount
et d'extraire la liiste de ce que tu veux démonter à partir de là.
Hors ligne
#11 Le 02/04/2013, à 18:50
- FelixP
Re : [Résolu !] Mon premier script \o/ HELP !
hum, pas faux ! Je creuse l'idée.
édit : je fais donc, si mon périphérique est /dev/sdb,
mount | grep /dev/sdb
Comment puis-je demander à umount de démonter ce que lui ressort mount ?
(désolé, je me lance à peine dans la programmation shell linux, alors je découvre…)
Dernière modification par FelixP (Le 02/04/2013, à 18:53)
Envoyé depuis mon navigateur libre sous mon os libre.
Manjaro (basé Arch) + Cinnamon, et Firefox-Nightly 44.0 !
Voyez mes astuces ici : http://doc.ubuntu-fr.org/utilisateurs/felixp
Hors ligne
#12 Le 02/04/2013, à 20:02
- xavier4811
Re : [Résolu !] Mon premier script \o/ HELP !
re,
# ! pour inverser la condition
# tant que $file est un fichier
while [ -f "$file" ] ...
# tant que $file n'est pas un fichier
while [ ! -f "$file" ] ...
# tant que $disk n'est pas un periphérique de type block
while [ ! -b "$disk" ]...
# et -a pour AND
# tant que $reponse est différent de 'y' ET différent de 'n'
while [ "$reponse" != "y" -a "$reponse" != "n" ]...
# le petit dernier c'est OU ||
# tant que $num est plus petit que 1 ou plus grand que 3
while [[ "$num" < 1 || "$num" > 3 ]]...
et pourquoi ne pas démonter avec
CLE="sdb?"
printf "%s\n" /dev/$CLE | sudo xargs umount
Hors ligne
#13 Le 02/04/2013, à 20:02
- jacobus77
Re : [Résolu !] Mon premier script \o/ HELP !
Tu peux utiliser la commande
cut
pour extraire le premier champ et l'insérer dansun tableau de variables, mais tu as plein d'autres façon de faire.
Peut-être que tu devrais peut-être prendre un peu de temps pour lire des scripts existants ça te permettrait de te familiariser avec les commandes les plus courantes.
Ciao.
Hors ligne
#14 Le 02/04/2013, à 21:01
- FelixP
Re : [Résolu !] Mon premier script \o/ HELP !
Merci pour ces précisions !
par contre les barres, j'avais compris ; ce sont les "[[" et "]]" que je ne comprends pas… pourquoi pas un seul [ et ] comme avant ?
Je n'ai pas compris pour le démontage :
Tu crées CLE comme /dev/sdb-quelquechosen'importequoidumomentquec'estunseulcaractère
Tu "affiches" '/dev/sdbquelquechoseetc + retour chariot' | tel que tu vas démonter.
C'est bien ça ?
@jacobus77 > Tu as tout à fait raison. Je me suis lancé direct dans quelque chose de (trop) compliqué pour moi… Enfin maintenant que je connais les capacités d'un script shell, je vais me potasser la doc du Siteduzero
Merci pour votre aide !
Dernière modification par FelixP (Le 02/04/2013, à 21:02)
Envoyé depuis mon navigateur libre sous mon os libre.
Manjaro (basé Arch) + Cinnamon, et Firefox-Nightly 44.0 !
Voyez mes astuces ici : http://doc.ubuntu-fr.org/utilisateurs/felixp
Hors ligne
#15 Le 02/04/2013, à 22:17
- xavier4811
Re : [Résolu !] Mon premier script \o/ HELP !
La variable $CLE est déjà dans ton script, c'est juste pour ça que je l'ai reprise mais c'est pas obligatoire.
Je n'affiche rien ou seulement la sortie de la commande suivante si j'utilise un pipe.
$ printf "%s\n" /dev/sda?
/dev/sda1
/dev/sda2
/dev/sda3
$ CLE="/dev/sda"
$ printf "%s\n" $CLE
/dev/sda
$ CLE="$CLE?"
$ printf "%s\n" $CLE
/dev/sda1
/dev/sda2
/dev/sda3
$ printf "%s\n" /dev/sda? | xargs file -b
block special
block special
block special
$ printf "%s\n" $CLE | xargs file -b
block special
block special
block special
[, [[, (( ou let, a toi de voir la syntaxe qui te convient le mieux, je ne connais pas assez pour expliquer les différences.
Je me sers de celle qui me donne le résultat voulu sans trop chercher.
En général [[ me semble plus souple d'utilisation.
Dernière modification par xavier4811 (Le 02/04/2013, à 22:17)
Hors ligne
#16 Le 02/04/2013, à 22:24
- FelixP
Re : [Résolu !] Mon premier script \o/ HELP !
D'accord, je comprends
à quoi correspond le paramètre "file -b" de xargs ?
Envoyé depuis mon navigateur libre sous mon os libre.
Manjaro (basé Arch) + Cinnamon, et Firefox-Nightly 44.0 !
Voyez mes astuces ici : http://doc.ubuntu-fr.org/utilisateurs/felixp
Hors ligne
#17 Le 02/04/2013, à 22:53
- xavier4811
Re : [Résolu !] Mon premier script \o/ HELP !
xargs exécute la commande file avec l'option -b, --brief pour chacun des paramètres passés par le pipe
Hors ligne
#18 Le 02/04/2013, à 23:05
- FelixP
Re : [Résolu !] Mon premier script \o/ HELP !
Compris ! Alors si je veux tester si mon fichier est bien une iso, je fais
TYPE="setuid setgid sticky # ISO 9660 CD-ROM filesystem data 'Iso installable ' (bootable)"
if [file -b = $TYPE]; then
echo "ok"
fi
J'ai un doute sur le type…
Envoyé depuis mon navigateur libre sous mon os libre.
Manjaro (basé Arch) + Cinnamon, et Firefox-Nightly 44.0 !
Voyez mes astuces ici : http://doc.ubuntu-fr.org/utilisateurs/felixp
Hors ligne
#19 Le 02/04/2013, à 23:45
- xavier4811
Re : [Résolu !] Mon premier script \o/ HELP !
# file -b fichier
TYPE="# ISO 9660 CD-ROM"
if [[ $(file -b Oracle-boot-x86_64.iso) = $TYPE* ]]; then echo "ISO"; else echo "autre chose"; fi
ISO
if [[ $(file -b test.txt) = $TYPE* ]]; then echo "ISO"; else echo "autre chose"; fi
autre chose
tant que la commande n'est pas dangereuse, faut essayer, et si elle est dangereuse, tu remplace par echo ou autre chose.
Hors ligne
#20 Le 03/04/2013, à 10:08
- FelixP
Re : [Résolu !] Mon premier script \o/ HELP !
Okay, compris
Bon, maintenant que j'ai pu finir ce script (je le mettrai à jour ici ce soir), je vais me pencher sur les tutos sur les scripts shell
Merci beaucoup à vous !
Félix
Envoyé depuis mon navigateur libre sous mon os libre.
Manjaro (basé Arch) + Cinnamon, et Firefox-Nightly 44.0 !
Voyez mes astuces ici : http://doc.ubuntu-fr.org/utilisateurs/felixp
Hors ligne