Bonsoir
Je galère depuis une journée et j'ai le pingouin à plat.
Je débute avec une SUSE 10.1
J'essaye de faire marcher automatiquement au démarrage une carte WIFI.
Pour ça j'ai besoin de lancer en root 2 commandes:
depmod -a
modprobe ndiswrapper
Le problème c'est que dans un script je n'arrive pas à ce qu'à l'exécution le PWD soit pris automatiquement. Voila mon script ( bon d'accord c'est sûrement pas beau !)
Sachant que nom de fichier est un fichier contenant le PWD terminé par RC
#!/bin/sh
su root
plus petit que nomfichier
/sbin/depmod -a
/sbin/modprobe ndiswrapper
su hi
exit
Lancé dans une console il demande le mot de passe
Comment faire marcher la redirection ?
J'ai essayé le sudo le /etc/inittab.....trop compliqué pour moi
Help
Merci
# Expect est ton ami
Posté par khan . Évalué à 0.
J'ai eu a faire le meme genre de chose et je m'en suis sorti en utilisant expect. Il te faudra aussi TCL, car expect est une "surcouche".
http://expect.nist.gov/
Si tu as besoin d'aide, je peux te donner des bout d'exemples car y'en a pas trop sur le net.
K.
[^] # Re: Expect est ton ami
Posté par torino6 . Évalué à 1.
Je vais essayer d'exploiter et je ferai partager mes résultats.
N'empèche que faire marcher une carte wifi sous linux c'est pas encore évident
et c'est pourtant basique.
Donc je m'accroche.
[^] # Re: Expect est ton ami
Posté par torino6 . Évalué à 1.
j'ai chargé TCL 8.4.13 et je l'ai installé
ensuite expect-5.43 mais la ça ne se passe pas bien: à la fin du ./configure il me jette avec :
checking for Tcl private headers... checking for tclInt.h... no
configure: error: Can't find Tcl private headers
J'ai réfléchi un peu et j'ai recompilé TCL avec l'option -- enable-shared
mais je récupère la meme erreur.
J'ai pourtant suivi scrupuleusement les read me & autre install.
Any idea ?
# sudo et inittab
Posté par left . Évalué à 1.
pour sudo, la syntaxe du fichier de conf est peu simple à trouver (google devrait pourtant être ton ami ;), je te l'accorde, mais pour le script au démarrage, c'est très simple:
1/ tu écris ton scrit (sans la commande su)
2/ tu mets ce script dans le repertoire /etc/init.d (avec les droits d'exec, bien sûr)
3/ dans le fichier /etc/inittab, tu regadres dans quel runlevel tu es (ex: id:3:initdefaut: indique que tu es en runleven 3)
4/ dans le repertoire /etc/rcX.d (où X=runlevel), tu crées un lien symbilique vers ton script de init.d en préfixant le nom par S99. Si ton script s'appel monwifi et que tu es en runlevel 5, alors le repertoire /etc/rc5.d doit donc contenir un lien symbolique qui s'appel S99monwifi et qui pointe vers /etc/init.d/monwifi
pour info, le SXX qui débute le nom du lien a la signification suivante:
S: start
XX: permet de définir l'ordre de démarrage des scripts pour ce runlevel
[^] # Re: sudo et inittab
Posté par torino6 . Évalué à 1.
Donc j'ai essayé une demie journée les manip que tu indiques avant de poster car google est effectivement mon ami....
Mais quand un expert comme toi écris que la syntaxe du fichier de conf est peu simple à trouver , c'est peu dire....
Linux c'est très beau, à condition d'y etre tombé depuis longtemps.
Pour l'instant je gallère.
Donc je reviendrai à Sudo & inittab si les pistes plus simples échouent.
Merci.
# Fait simple
Posté par spotty . Évalué à 1.
/sbin/depmod -a
/sbin/modprobe ndiswrapper
su hi
exit
Puis
chown root ton_script
chmod 755 to_script
chmod u+s to_script
En lançant le script, il aura les droits root et ne demandera plus le mot de passe.
[^] # Re: Fait simple
Posté par peck (site web personnel) . Évalué à 2.
[^] # Re: Fait simple
Posté par torino6 . Évalué à 1.
hi@Ins80Suse101:~> sh essai.sh
FATAL: Could not open /lib/modules/2.6.16.13-4-smp/modules.dep.temp for writing: Permission denied
J'ai cherché partout ce modules.dep.temp pour modifier ses autorisations mais il est introuvable.
Dommage.
Quoi d'autre à essayer ?
[^] # Re: Fait simple
Posté par torino6 . Évalué à 1.
J'avais mis mon script dans les taches à lancer au lancement:
sous suse 10.1 gnome bureau/centre de controle/Système/sessions/Programmes au démarrage.
Tant que je n'ai pas touché à certaines propriéts de mon script, ça ne lançait pas le wifi mais àa ne bloquait pas le lancement de ma session.
Maintenant je reviens en boucle sur le login.
Marrant non ?
Puis je rappeler que ma question initiale était:
Password dans un script, c'est tellement plus simple si c'est possible !
[^] # Re: Fait simple
Posté par spotty . Évalué à 2.
tape visudo et ajoute
ton_login ALL=NOPASSWD:/path/tonscript
puis fait
sudo /path/tonscript
Il aura les droits root pas besoin de mot de passe
# Ou est le problème ?
Posté par peck (site web personnel) . Évalué à 3.
Au passage a quoi peuvent bien te servir "su hi" et "exit" en dernieres lignes du script ?
Simplifie en :
#!/bin/sh
/sbin/depmod -a
/sbin/modprobe ndiswrapper
[^] # Re: Ou est le problème ?
Posté par torino6 . Évalué à 1.
exit parceque j'ai trouvé ça dans des exemples et j'ai recopié bêtement, mais ça ne fait pas de dégats
su hi parceque je voulais revenir à mon compte d'utilisateur normal en fin de script et quitter le root.
Bon maintenant une question: comment place t'on un shell en script d'ini ?
Merci
[^] # Re: Ou est le problème ?
Posté par peck (site web personnel) . Évalué à 2.
Il ne sert a rien de revenir a ton compte en sortie de script car à la find de l'exécution d'un processus il meurt complement et son etat est perdu. Sachant que ce script sera probablement lancé par un autre script on se retrouvera dans le script parent dans l'état dans lequel il était avant le lancement quelles que soient les commandes que tu fais dans le script fils.
Pour mettre un script en init il faut le placer dans /etc/init.d (/etc/rc.d/init.d dans certaines distrib), le rendre exécutable puis faire les liens qui vont bien dans /etc/rc*.d
Les liens qui vont bien sont fait avec la commande update-rc.d sous debian.
Pour une autre distrib, ou pour plus d'explication, au boot tout le contenu du répertoire rcX.d est axécuté dans l'ordre alphabétique. X etant une valeur définie dans /etc/inittab il vaut 2 pour debian, 5 pour d'autres et peut etre changé au besoin.
Pour savoir ce qu'il doit faire des tout ca il y a une convention de nommage du lien.
Ex : S05test -> lancer le lien apres les No 04 avec pour parametre start
Ex : K20test -> lancer le lien apres les No 19 avec pour parametre stop
[^] # Re: Ou est le problème ?
Posté par peck (site web personnel) . Évalué à 2.
Tout ceci est a faire en root
Tu n'es pas sensé ajouter les liens a un seul /etc/rcX.d mais a tous ou presque.
S,1 -> mode récupération -> ptet pas de start du script
0 -> arret de l'ordi -> pas de start du script
2,3,4,5 -> modes courants -> tu les veux au moins la
6 -> reboot de l'ordi -> pas de start du script
[^] # Re: Ou est le problème ?
Posté par torino6 . Évalué à 1.
mais c'est beaucoup trop compliqué pour moi.
La version suse 10.1 n'utilise pas forcément les memes conventions donc c'est la galère.
C'est quand meme vachement compliqué pour un débutant.
Je jette l'éponge sur cette piste.
Ce serait tellement plus simple si a l'intérieur du script on pouvait se loguer automatiquement en root pour éxécuter duex commandes !!
Pourquoi faire simple quand on peut faire compliqué !
[^] # Re: Ou est le problème ?
Posté par torino6 . Évalué à 1.
Ca peut peut etre intéresser d'autres débutants et même d'autres..
le script lancewifi
#!/bin/bash
depmod -a
modeprobe ndiswrapper
exit
le copier en root dans /etc/init.d/lancewifi
(et non pas en /etc/rc.d/init.d propre à Suse10.1 ?)
faire
chmod +x /etc/init.d/lancewifi
chkconfig --add lancewifi
c'est tout et ça démarre à tous les coups
......simple isn't it ?
[^] # Re: Ou est le problème ?
Posté par peck (site web personnel) . Évalué à 2.
Ensuite le exit est toujours inutile :)
Enfin, si /etc/rc.d/init.d existe alors /etc/init.d est un lien vers lui, donc c'est la même chose.
[^] # Re: Ou est le problème ?
Posté par NeoX . Évalué à 1.
ici : http://linuxfr.org/forums/9/17272.html
ou encore là : https://linuxfr.org/forums/9/17275.html
(2e reponse, avec un pas à pas tres clair de la part de left )
à la difference pret que le
chkconfig --add tonscript
- remplace les points 3/4
- n'est pas standard pour tous les linux
alors que la solution de left fonctionne avec toutes les distributions.
[^] # Re: Ou est le problème ?
Posté par peck (site web personnel) . Évalué à 2.
Reste a simplifier :
- pas de sudo on est deja en root
- inittab on s'en fout, il faut faire tous les runlevel
[^] # Re: Ou est le problème ?
Posté par NeoX . Évalué à 1.
par contre le inittab est utile, mais juste à titre informatif.
en effet c'est lui qui te dit dans quel runlevel mettre ton script.
sauf si tu le veux dans TOUS les runlevels.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.