IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Raspberry Pi Discussion :

Problème de montage de disque via php


Sujet :

Raspberry Pi

  1. #1
    Membre actif
    Avatar de ChMuX
    Homme Profil pro
    SysOps DevOps AWS
    Inscrit en
    Mai 2012
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : SysOps DevOps AWS

    Informations forums :
    Inscription : Mai 2012
    Messages : 167
    Points : 260
    Points
    260
    Par défaut Problème de montage de disque via php
    Bonjour à tous,

    J'ai un soucis, pour explication j'ai un apache v2.4.38 avec php v7.3.14 sur mon Pi, j'ai créé une page simple avec 2 boutons ON/OFF.
    Quand je clique sur ON, ça lance une commande system qui via les GPIO ferme un relais afin d'envoyer le courant sur mon disque dur externe (relié à mon Pi en USB), attend 10s et monte le disque. Quand je clique sur OFF, ça démonte et coupe le relais.

    Le script php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
     
        system("gpio -g mode 4 out");
     
        if($_POST['executer'] == 'ON')
        {
            system("gpio -g write 4 1");
            system("sleep 10");
            system("pmount -t ntfs /dev/sda1 mondisque");
        }
        else
        {
            system("pumount mondisque");
            system("sleep 5");
            system("gpio -g write 4 0");
        }
     
        header('Location: index.php');
     
    ?>

    Au moment du ON, le relais s'active bien et mon disque s'allume. Par contre le montage ne se fait pas.
    Si je lance la même commande (pmount -t ntfs /dev/sda1 mondisque) depuis le shell du user www-data (user apache), aucun problème.

    Log messages sur le ON (je ne vois d'erreur):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Mar  6 15:04:23 raspberrypi kernel: [ 2361.840142] scsi 0:0:0:0: Direct-Access     Toshiba  StorE HDD        0000 PQ: 0 ANSI: 4
    Mar  6 15:04:23 raspberrypi kernel: [ 2361.841866] sd 0:0:0:0: [sda] 3907029168 512-byte logical blocks: (2.00 TB/1.82 TiB)
    Mar  6 15:04:23 raspberrypi kernel: [ 2361.848293] sd 0:0:0:0: [sda] Write Protect is off
    Mar  6 15:04:23 raspberrypi kernel: [ 2361.864901] sd 0:0:0:0: Attached scsi generic sg0 type 0
    Mar  6 15:04:23 raspberrypi kernel: [ 2361.909772]  sda: sda1
    Mar  6 15:04:23 raspberrypi kernel: [ 2361.925011] sd 0:0:0:0: [sda] Attached SCSI disk
    Mar  6 15:04:25 raspberrypi kernel: [ 2363.961300] fuse init (API version 7.27)
    Le df qui ne remonte pas mon disque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    root@raspberrypi:/var/www/html# df -h
    Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
    /dev/root           29G    1,5G   27G   6% /
    devtmpfs           841M       0  841M   0% /dev
    tmpfs              970M       0  970M   0% /dev/shm
    tmpfs              970M    9,4M  961M   1% /run
    tmpfs              5,0M    4,0K  5,0M   1% /run/lock
    tmpfs              970M       0  970M   0% /sys/fs/cgroup
    /dev/mmcblk0p1     253M     52M  201M  21% /boot
    tmpfs              194M       0  194M   0% /run/user/1000
    J'ai le process du mount en status Ss :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    root@raspberrypi:/var/www/html# ps -aux | grep mount | grep -v grep
    root      1004  0.0  0.0   3044  1692 ?        Ss   15:04   0:00 /sbin/mount.ntfs /dev/sda1 /media/mondisque -o rw,nosuid,nodev,noexec,uid=33,gid=33,umask=077,user
    Rien dans le mount non plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    root@raspberrypi:/var/www/html# cat /proc/mounts | egrep "sda|mondisque"

    Une idée je cale là...? (j'ai essayé via sudo idem)
    "Un pessimiste voit la difficulté dans chaque opportunité, un optimiste voit l'opportunité dans chaque difficulté."
    Winston Churchill

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Salut ChMuX.

    Citation Envoyé par ChMuX
    Quand je clique sur ON, ça lance une commande system qui via les GPIO ferme un relais afin d'envoyer le courant sur mon disque dur externe (relié à mon Pi en USB), attend 10s et monte le disque. Quand je clique sur OFF, ça démonte et coupe le relais.
    A votre place, j'aurai fait deux scripts BASH, dont l'un correspond à votre "on" et l'autre à votre "off".
    En PHP, on peut exécuter un script qui n'est pas du PHP, par la commande "shell_exec()".
    --> https://www.php.net/manual/fr/function.shell-exec.php

    Le problème est que l'on ne peut pas tester si le bouton "on/off" s'est exécuté correctement.
    Mais est-ce si important que cela ? A priori, non.

    Mais ce que vous pouvez faire, c'est laisser le système raspbian gérer le montage et le démontage de votre périphérique.
    Comment ? Par UDEV (userspace /dev) :
    --> https://fr.wikipedia.org/wiki/Udev

    Un exemple :
    --> https://raspberrypi.stackexchange.co...lready-running

    A vous de faire la recherche sur le net pour compléter vos connaissances sur udev.

    Sinon, la commande pour monter un périphérique est "mount" et non "pmount".

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Membre actif
    Avatar de ChMuX
    Homme Profil pro
    SysOps DevOps AWS
    Inscrit en
    Mai 2012
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : SysOps DevOps AWS

    Informations forums :
    Inscription : Mai 2012
    Messages : 167
    Points : 260
    Points
    260
    Par défaut
    Bonjour Artemus,

    Merci pour votre aide, je vais tenter via un script Bash lancé depuis php comme vous le préconisez !

    Pour le pmount, si ça existe, ça me permet de m'affranchir de sudo pour faire un mount depuis un autre user que root, il suffit en fait d'ajouter le user au group "plugdev" et le pmount passe

    Je reviens par ici quand j'aurai pu tester !
    "Un pessimiste voit la difficulté dans chaque opportunité, un optimiste voit l'opportunité dans chaque difficulté."
    Winston Churchill

  4. #4
    Membre actif
    Avatar de ChMuX
    Homme Profil pro
    SysOps DevOps AWS
    Inscrit en
    Mai 2012
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : SysOps DevOps AWS

    Informations forums :
    Inscription : Mai 2012
    Messages : 167
    Points : 260
    Points
    260
    Par défaut
    Bon j'ai pu test via lancement script bash, dans tous les sens, en rajoutant le setuid bit, même problème, process mount en Ss...
    Je cale là....
    "Un pessimiste voit la difficulté dans chaque opportunité, un optimiste voit l'opportunité dans chaque difficulté."
    Winston Churchill

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Salut ChMuX.

    La seule autre explication que je peux donner est un problème de droit.
    Le script bash doit être en ROOT:ROOT et être lancé soit depuis le compte root ou soit avec sudo devant.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  6. #6
    Membre actif
    Avatar de ChMuX
    Homme Profil pro
    SysOps DevOps AWS
    Inscrit en
    Mai 2012
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : SysOps DevOps AWS

    Informations forums :
    Inscription : Mai 2012
    Messages : 167
    Points : 260
    Points
    260
    Par défaut
    Déjà test, c'est non
    J'ai trouvé sur le net un mec qui a fait comme moi mais lui ça marche, la seule différence : j'ai php 7 lui php 5
    "Un pessimiste voit la difficulté dans chaque opportunité, un optimiste voit l'opportunité dans chaque difficulté."
    Winston Churchill

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Salut ChMuX.

    Désolé de ne pouvoir faire plus.
    Je ne travaille pas avec php mais avec bash et langage C.

    Pour le montage automatique de votre disque dur, je le fais à partir de UDEV, comme je l'ai indiqué dans mon premier message.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  8. #8
    Membre actif
    Avatar de ChMuX
    Homme Profil pro
    SysOps DevOps AWS
    Inscrit en
    Mai 2012
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : SysOps DevOps AWS

    Informations forums :
    Inscription : Mai 2012
    Messages : 167
    Points : 260
    Points
    260
    Par défaut
    Je vais me pencher là dessus, mais c'est vrai que je n'avais pas jeter un œil car je voulais effectuer le montage via mon script ...
    Merci pour votre aide
    "Un pessimiste voit la difficulté dans chaque opportunité, un optimiste voit l'opportunité dans chaque difficulté."
    Winston Churchill

  9. #9
    Membre actif
    Avatar de ChMuX
    Homme Profil pro
    SysOps DevOps AWS
    Inscrit en
    Mai 2012
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : SysOps DevOps AWS

    Informations forums :
    Inscription : Mai 2012
    Messages : 167
    Points : 260
    Points
    260
    Par défaut
    Pour info, j'ai résolu le problème en ouvrant une connexion ssh via php et exécuté la commande, bon ok c'est bien moisi mais ça marche ...
    Ci-dessous le code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
      system("gpio -g mode 4 out");
     
      if($_POST['executer'] == 'ON')
      {
        system("gpio -g write 4 1");
        system("sleep 10");
        $connection = ssh2_connect('192.168.1.17', 22);
        ssh2_auth_password($connection, 'pi', 'MONMOTDEPASSE');
        $stream = ssh2_exec($connection, 'pmount -t ntfs /dev/sda1 mondisque');
      }
      else
        {
          $connection = ssh2_connect('192.168.1.17', 22);
          ssh2_auth_password($connection, 'pi', 'MONMOTDEPASSE');
          $stream = ssh2_exec($connection, 'pumount mondisque');
          system("sleep 5");
          system("gpio -g write 4 0");
        }
     
      header('Location: index.php');
    ?>

    (vu que je passe par "pmount", ne pas oublier de rajouter le user (ici "pi" pour moi) au groupe "plugdev"
    "Un pessimiste voit la difficulté dans chaque opportunité, un optimiste voit l'opportunité dans chaque difficulté."
    Winston Churchill

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de montage de disque local sur Kali-Linux
    Par patricia_zer dans le forum Autres
    Réponses: 1
    Dernier message: 09/12/2016, 07h26
  2. [XML] Génération fichier XML pour RSS via PHP, problème lors de l'écriture
    Par gator dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 04/02/2012, 18h17
  3. Réponses: 7
    Dernier message: 23/06/2010, 23h52
  4. [MySQL] problème ajout donnée dans BDD via php
    Par Skeud007 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 29/05/2006, 23h41
  5. [ODBC] [DB2] Problème de connexion à une base de données sur un as400 via PHP sous Linux
    Par boo64 dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 19/04/2006, 09h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo