Forum Linux.debian/ubuntu source dans fichier interfaces

Posté par (page perso) . Licence CC by-sa
Tags : aucun
2
24
mai
2016

Bonjour,

j'ai un raspberry avec un raspbian jessie, nginx, dnsmasq dont voici le fichier /etc/network/interfaces :

auto lo
iface lo inet loopback

allow-hotplug eth0
auto eth0
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet static
address 10.132.1.1
netmask 255.255.255.0
network 10.132.1.0
broadcast 10.132.1.255

up iptables-restore < /etc/iptables.ipv4.nat

les choses fonctionnent alors tel que je le souhaite…

J'aimerai dissocier la config en différents fichiers (pour permettre les modif via un script php et une IHM web)

je fais alors un fichier interfaces avec :

auto lo
iface lo inet loopback

source interfaces.d/*.cfg

up iptables-restore < /etc/iptables.ipv4.nat

et deux fichiers interfaces.d/eth0.cfg et interfaces.d/wlan0.cfg

allow-hotplug eth0
auto eth0
iface eth0 inet dhcp

et

allow-hotplug wlan0
iface wlan0 inet static
address 10.132.1.1
netmask 255.255.255.0
network 10.132.1.0
broadcast 10.132.1.255

Et là rien ne va plus : au boot il n'y a plus de réseau fonctionnel (ni filaire ni wifi)

Comme c'est un RPI sans écran, je n'y ai plus accès ce qui n'aide pas pour débugger…

Quelqu'un à une idée ?
Merci

  • # Source

    Posté par . Évalué à 4.

    Ton fichier de configuration interfaces n'est pas un script bash, donc l'instruction source n'est pas exécutée ni même comprise.
    Tu aurais du faire ton essai sur une seule interface. Et je n'ai pas d'idée pour remédier à la situation.

    • [^] # Re: Source

      Posté par (page perso) . Évalué à 1. Dernière modification le 26/05/16 à 14:10.

      bonsoir,

      source est pourtant documenté dans le man interfaces :

             Lines beginning with "source" are used to include stanzas  from  other
             files,  so  configuration  can  be  split  into  many  files. The word
             "source" is followed by the path of file to be  sourced.  Shell  wild‐
             cards can be used.  (See wordexp(3) for details.)
      
      
             Similarly, "source-directory" keyword is used to source multiple files
             at once, without specifying them individually or  using  shell  globs.
             Additionally,  when "source-directory" is used, names of the files are
             checked to match the following regular  expression:  ^[a-zA-Z0-9_-]+$.
             In  other  words,  the names must consist entirely of ASCII upper- and
             lower-case letters, ASCII digits, ASCII underscores, and ASCII  minus-
             hyphens. In the directory path, shell wildcards may be used as well.
      
      
             When  sourcing  files or directories, if a path doesn't have a leading
             slash, it's considered relative to the directory containing  the  file
             in  which  the keyword is placed. In the example above, if the file is
             located at /etc/network/interfaces, paths to the  included  files  are
             understood to be under /etc/network.

      J'ai essayé avec source et source-directory, chemin complet et relatif : nada !

      • [^] # Re: Source

        Posté par (page perso) . Évalué à 2.

        Je suis une brêle en regexp mais

        ^[a-zA-Z0-9_-]+$

        (le point semble être une fin de phrase) ne semble pas coller avec eth0.cfg et wlan0.cfg ou je me trompe ? Je vais redémarrer mon RPi pour tester

        • [^] # Re: Source

          Posté par (page perso) . Évalué à 1.

          pas bon… ce n'est pas ça :-(

          • [^] # Re: Source

            Posté par . Évalué à 3. Dernière modification le 26/05/16 à 13:40.

            Ou pas que ça.

            Si tu veux trouver un nom de fichier tel que "eth0.cfg", la regex ^[a-zA-Z0-9_-]+$ ne marchera pas. Elle ne trouvera rien:

            • '' implique que l'expression doit commencer la ligne (mince, le 1er ' qui précède ^ ne s'affiche pas… je ne sais pas pourquoi.)
            • '$' implique que l'expression doit finir la ligne
            • [a-zA-Z0-9_- ]+ indique que l'expression doit être composée d'au moins un de ces caractères, et uniquement de ces caractères.

            Hors, il n'y à pas de '.' dans la liste des caractères, donc ta regex s'arrêtera ou commencera au niveau du '.', et donc ne commencera ni ne finira la ligne. Du coup, ça match pas.
            Peut-être que retirer le '.cfg' permettrait que le système trouve ton fichier.

            • [^] # Re: Source

              Posté par (page perso) . Évalué à 1.

              justement, le test effectué consistait à renommer les fichier eth0.cfg et wlan0.cfg en eth0 et wlan0

              Et ça ne marche pas mieux…

              • [^] # Re: Source

                Posté par . Évalué à 2.

                L'italique sur le que n'est pas très visible, c'est vrai. J'aurai du utiliser le gras.
                Il n'est pas impossible que tu aies plusieurs problèmes.

                Sinon, je me demandais, pourquoi ne pas utiliser plutôt un script à coup de ifconfig?
                Ça me semble plus simple à générer, et, pendant le développement, tu peux utiliser un cron pour te faire retomber sur le /etc/network/interfaces si tu n'arrives à rien ping.

              • [^] # Re: Source

                Posté par . Évalué à 2.

                D'ailleurs, il fait quoi le script iptables? Et tu peux aussi enlever le "auto etho0" ça fait doublon avec le "allow-hotplug".

          • [^] # Re: Source

            Posté par . Évalué à 2.

            The word "source" is followed by the path of file to be sourced. Shell ** wildcards** can be used.

            en gros tu as le droit de faire

            source /etc/maconfig/eth0.cfg
            source /etc/toto/titi
            source /etc/autreconfig/*.conf
            source /etc/autreconfig/eth?.cfg

            mais tu ne peux pas faire de regex, uniquement des wildcards.

            • [^] # Re: Source

              Posté par . Évalué à 2.

              Mais si on a le droit de faire cette notation avec la directive source, quelle est l'intérêt alors de la directive source-directory ?

              • [^] # Re: Source

                Posté par . Évalué à 3.

                ca faut demander aux developpeurs

                mais on peut imaginer que le source-directory soit recursif, et serait capable de prendre tous les fichiers de tous les dossiers.
                pour avoir par exemple

                /etc/mynetwork/lan/eth0.cfg
                /etc/mynetwork/lan/eth1.cfg
                /etc/mynetwork/lan/eth2.cfg
                /etc/mynetwork/vpn/vpnA.cfg
                /etc/mynetwork/vpn/vpnB.cfg

                /etc/mynetwork/vpn/vpnN.cfg
                /etc/mynetwork/autredossier/autrefichier.cfg

                il suffirait alors de faire source-directory /etc/mynetwork

      • [^] # Re: Source

        Posté par . Évalué à 2.

        Ok, je ne savais pas. J'aurais appris quelque chose.

  • # pistes

    Posté par . Évalué à 4.

    Comme c'est un RPI sans écran, je n'y ai plus accès ce qui n'aide pas pour débugger…
    Quelqu'un à une idée ?

    sortir la carte et la monter sur une autre machine pour modifier le fichier, et remettre la carte dans le PI.

    à defaut de pouvoir modifier le fichier /etc/network/interfaces pour faire cela,
    tu peux executer un script, qui va lire les divers fichiers, et creer un /etc/network/interfaces AVANT que le service ne se lance.

    • [^] # Re: pistes

      Posté par (page perso) . Évalué à 1.

      Le raspberry étant monocarte, il n'est pas possible de démonter quoi que ce soit.

      Quand je plante la conf réseau, je en peut que sortir la sdcard, la monter sur mon portable et modifier les fichiers directement… pas pratique du tout :-(

      • [^] # Re: pistes

        Posté par . Évalué à 3.

        Le raspberry étant monocarte, il n'est pas possible de démonter quoi que ce soit.

        je parlais evidemment de sortir la carte (SD) qui contient l'OS

        et c'est ce que tu as traduit en disant :

        Quand je plante la conf réseau, je en peut que sortir la sdcard, la monter sur mon portable et modifier les fichiers directement… pas pratique du tout :-(

        oui, mais en meme temps ca te permet quand meme de corriger ton erreur, et de ne pas avoir à te servir du RPI comme presse papier.

        • [^] # Re: pistes

          Posté par (page perso) . Évalué à 1.

          je parlais evidemment de sortir la carte (SD) qui contient l'OS

          oups… j'ai fait mumuse avec une carte réseau PCI aujourd'hui, d'où ma confusion…

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.