Forum Linux.débutant password dans un script

Posté par  .
Étiquettes : aucune
0
13
juin
2006
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  . Évalué à 0.

    Koukou,
    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  . Évalué à 1.

      Merci pour le lien
      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  . Évalué à 1.

        Bon j'ai été bloqué assez vite:
        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  . Évalué à 1.

    sudo et inittab sont pourtant les bonnes solutions.
    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  . Évalué à 1.

      D'accord mais j'ai bien précisé que j'étais débutant en Linux.
      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  . Évalué à 1.

    #!/bin/sh
    /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  (site web personnel) . Évalué à 2.

      Attention bash vérifie le bit suid et t'empeche d'exécuter des scripts shell suid root
    • [^] # Re: Fait simple

      Posté par  . Évalué à 1.

      Bon ça allait dans le sens simple mais voila j'obtiens:
      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  . Évalué à 1.

      La c'est plutot catastrophique.
      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  . Évalué à 2.

      Bon plus simple

      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  (site web personnel) . Évalué à 3.

    A ce que je vois ton script est fait pour être exécuté dans les scripts d'init. Or miracle, les scriptsd'init sont exécutés en root, donc pas besoin de su -

    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  . Évalué à 1.

      Réponses du plus facile au plus compliqué pour moi:
      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  (site web personnel) . Évalué à 2.

        exit sert a sortir du script donc utile mais ailleurs :)

        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  (site web personnel) . Évalué à 2.

          Je me répond pour ajouter qq details.

          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  . Évalué à 1.

            Merci....infiniment
            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  . Évalué à 1.

              Bon alors c'était tout simple.... mais il fallait le trouver.
              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  (site web personnel) . Évalué à 2.

                Ok chkconfig sous suse, il y en a un par distrib, donc c'est pas toujours facile de savoir.

                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  . Évalué à 1.

                n'etait ce pas ce qui etait proposé
                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 )


                sudo et inittab sont pourtant les bonnes solutions.
                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:regard

                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



                à 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  (site web personnel) . Évalué à 2.

                  Tout a fait !
                  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  . Évalué à 1.

                    je suis d'accord sur l'inutilité du SUDO

                    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.