Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/04/2013, à 22:16

FelixP

[Résolu !] Mon premier script \o/ HELP !

Salut à tous smile
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 tongue)    EDIT : Pour l'avancement, google a été mon (bref) ami, rsync -arv --progress résoud mon problème smile

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 ? smile

Dernière modification par FelixP (Le 07/04/2013, à 12: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, à 22:42

jacobus77

Re : [Résolu !] Mon premier script \o/ HELP !

1/ Eventuellement

read -p

?

Hors ligne

#3 Le 01/04/2013, à 22: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 smile

Dernière modification par FelixP (Le 01/04/2013, à 22: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, à 23: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, à 16: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, à 03: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, à 07:04

pingouinux

Re : [Résolu !] Mon premier script \o/ HELP !

Bonjour,

FelixP   #1 a écrit :
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, à 07: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, à 15: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, à 16: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, à 16: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 ? smile


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, à 19: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, à 19: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, à 19: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, à 21: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, à 21: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, à 22: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 big_smile

Merci pour votre aide ! wink

Dernière modification par FelixP (Le 02/04/2013, à 22: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, à 23: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, à 23:17)

Hors ligne

#16 Le 02/04/2013, à 23:24

FelixP

Re : [Résolu !] Mon premier script \o/ HELP !

D'accord, je comprends smile
à quoi correspond le paramètre "file -b" de xargs ? roll


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, à 23: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 03/04/2013, à 00: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 03/04/2013, à 00: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, à 11:08

FelixP

Re : [Résolu !] Mon premier script \o/ HELP !

Okay, compris smile
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 big_smile
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