Auteur Sujet: Construire son image personnalisée  (Lu 1226 fois)

0 Membres et 1 Invité sur ce sujet

ppn_sd

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 176
  • FLG (28190)
Construire son image personnalisée
« Réponse #12 le: 14 juin 2024 à 11:19:00 »
@ppn_sd :

Le fichier /etc/board.json apporte les données pour générer l'image du micrologiciel. Tandis que la méthode avancée par @rooot change les fichiers de configuration ad hoc.
Le script config_generate parse le fichier board.json et lance les commandes uci avec les paramètres trouvés. Il n'y a pas de différence, in fine. Ou alors j'ai loupé une subtilité ?

Les paramètres afférents dans /etc/board.json peuvent être intégrés de manière logique lors de la génération de l'image (à ce moment seulement). Ce sont des fichiers composant l'image de base (inclus par défaut). La configuration peut être générée automatiquement au premier amorçage du système grâce au script Shell /bin/config_generate.
Les fichiers dans uci-default sont également intégrés dans l'image.

Je ne vois pas le problème d'utiliser board.json mais je ne saisis pas les avantages que tu essaies de souligner.

Ce n'est pas équivalent car on peut potentiellement adapter systématiquement le processus à différents FAI de façon quasi transparente pour l'utilisateur.
Tu es toujours plus ou moins lié à des noms de board ou d'interfaces selon le matériel.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #13 le: 14 juin 2024 à 11:29:15 »
@ppn_sd :

Il faut reconstituer la structure de donnée lorsqu'on initialise la configuration avec uci-defaults. Ce qui n'est pas vraiment prévu.
En accédant aux données dans /bin/config_generate on peut changer ou adapter la structure de la configuration dans le code.

Cela fonctionne sur le même principe que la sélection du board. Des fichiers spécifiques sont incorporés dans l'image. Par
exemple, /etc/board.d/03_box serait une instanciation de configuration définie pour un FAI.

trekker92

  • Abonné Free adsl
  • *
  • Messages: 1 054
Construire son image personnalisée
« Réponse #14 le: 14 juin 2024 à 14:25:56 »
personnellement l'unique (et gros) avantage de construire une image perso est d'y ajouter wiregard et zerotier pour les routeurs en 8/4M ram/flash.
sinon, ca tient pas :D

(et évidemment, une compilo par appareil)

ppn_sd

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 176
  • FLG (28190)
Construire son image personnalisée
« Réponse #15 le: 14 juin 2024 à 15:12:13 »
Idem pour de vieux AP où j'en suis à quelques Ko près. Même pas opkg d'installé.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #16 le: 15 juin 2024 à 09:50:14 »
L'intérêt à construire son image n'est pas toujours aussi pertinent. Tout dépend de la difficulté à configurer son routeur.

Je m'aperçois qu'il aurait aussi fallu changer l'interface pour intégrer véritablement mes scripts dans OpenWrt. Sinon,
cela reviendrait à ce que chaque utilisateur adapte lui-même le script /bin/config_generate. De base, pour que
cela soit opérationnel il faudrait seulement intégrer du code complémentaire dans /bin/config_generate.

Ce serait possible mais ce n'est pas sûr que cela convienne au projet OpenWrt. Cela aurait évité de devoir étudier la
configuration de chaque FAI pour pouvoir se connecter. Mais je ne suis pas certain que ce soit une bonne idée que
tout le monde ait accès aussi facilement : ce serait un peu comme conduire sans permis.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #17 le: 16 juin 2024 à 08:34:33 »
J'ai complété la première étape [1]. Le code reste lisible car il est relativement simple. Par contre, ce n'est pas tellement propre. Il faudrait que je le rende plus homogène et vérifier
ses propriétés (générique, fiable, extensible). C'est pas encore bon. Et je ne sais pas si je le publierais.


[1] Intégrer les paramètres de connexion FAI dans le fichier /etc/board.json.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #18 le: 16 juin 2024 à 12:46:09 »
Je n'ai pas absolument abouti, lors de la deuxième étape, mais le résultat est probant [1]. Durant ce test, je n'ai eu à ajouter qu'une seule fonction dans /etc/config_generate.
On peut spécifier des options qui ne sont potentiellement pas définies très simplement. uci ne les ajoutera pas car la valeur associée sera inexistante (ou vide). Cette caractéristique
permet de produire du code générique (qui n'est pas spécifique à un FAI mais correspondant aux options DHCP ; c'est-à-dire sans avoir à analyser les options disponibles).


[1] Intégrer automatiquement les options DHCP(v6) dans le fichier /etc/config/network.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #19 le: 17 juin 2024 à 11:48:56 »
J'ai écrit plusieurs lignes pour implémenter le VLAN sur l'interface WAN. Mais cela n'a pas fonctionné, et surtout, il y a une fonction qui existait déjà auparavant.
(Faire fausse route.)

Je croyais à tord que la fonction generate_bridge_vlan faisait référence aux commutateurs ne supportant pas l'architecture DSA. Tout est nouveau. Je
croyais que je devais définir un VLAN logiciel sur l'interface WAN. J'ai lu sur le Wiki OpenWrt que les nouveaux commutateurs étaient contrôlé par un pilote
DSA bien que le commutateur ne soit associé qu'à un seul contrôleur Ethernet. Sur le BPI-R3, le port wan (eth0) est placé dans le pont br-wan avec le port
SFP (eth1). Dans le tutoriel Orange de @ubune sur OpenWrt, on définit un VLAN logiciel mais sur une seule interface laquelle n'est pas de type bridge (pont).


Hyperliens

Is there a VLAN-capable hardware switch integrated in your device?
Multiple networks using VLANs

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #20 le: 17 juin 2024 à 14:06:18 »
J'obtiens la configuration suivante. Pour ce faire, j'ai activé le paramètre vlan. La fonction ucidef_set_bridge_device m'a parue nécessaire. C'est l'unique fonction dans la bibliothèque « uci-defaults.sh » qui
crée l'entrée « bridge » dans le fichier /etc/board.json. Cette entrée permet d'activer l'invocation de la fonction generate_bridge_vlan du script /bin/config_generate.

config device 'switch0'
        option name 'switch0'
        option type 'bridge'

config bridge-vlan 'lan_vlan'
        option device 'switch0'
        option vlan '1'
        option ports 'lan1 lan2 lan3 lan4 sfp2'

config interface 'lan'
        option device 'switch0.1'
        option proto 'static'
        option ipaddr '192.168.1.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

config bridge-vlan 'wan_vlan'
       option device 'switch0'
       option vlan '832'
       option ports 'eth1 wan'

config device
        option name 'switch0.832'
        option macaddr '11:22:33:44:55:66'

config interface 'wan'
        option device 'switch0.832'
        option proto 'dhcp'

config interface 'wan6'
        option device 'switch0.832'
        option proto 'dhcpv6'

Le VLAN 832 (FAI Orange) est bien défini sur l'interface WAN (wan et wan6). Tristement, je n'arrive pas à spécifier la CoS comme pour une interface L2 de type « vlan 802.1q ». Je suis un peu perdu.

[14:30] J'ai trouvé un lien sur le sujet dans le forum OpenWrt mais cela ne m'aide pas beaucoup.
« Modifié: 17 juin 2024 à 14:30:46 par basilix »

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #21 le: 17 juin 2024 à 17:44:50 »
C'est compliqué !

Il semblerait que le paramètre bridge (/etc/board.d/03_box) produise un effet de bord avec le paramètre macaddr (/etc/board.d/02_network). Les deux ne sont apparemment pas compatibles.

Code: (/etc/config/network) [Sélectionner]
config device
        option name 'switch0.832'
        option macaddr '11:22:33:44:55:66'

Ci-dessus, on peut s'apercevoir qu'un nouveau périphérique réseau Ethernet a été créé.

Code: (/bin/config_generate) [Sélectionner]
[ -n "$bridge" ] && {                                 
        [ -z "$ports" ] && ports="$device"             
        if [ -z "$vlan" ]; then                       
                bridge_vlan_id=$((bridge_vlan_id + 1))
                vlan=$bridge_vlan_id                   
        fi                                             
        generate_bridge_vlan $1 $bridge "$ports" $vlan
        device=$bridge.$vlan                           
        type=""                                       
}                                                     

if [ -n "$macaddr" ]; then                               
        uci -q batch <<-EOF                               
                add network device                       
                set network.@device[-1].name='$device'   
                set network.@device[-1].macaddr='$macaddr'
        EOF                                               
fi                                                       

En y regardant de plus près, on peut s'apercevoir que c'est l'assignation de la valeur $bridge.vlan à la variable device qui produit un bogue. L'idée est d'obtenir
notre VLAN $vlan en créant automatiquement le périphérique Ethernet virtuel « 802.1q » lorsqu'on spécifie un nom d'interface composé d'un point suivi d'un nombre.
Le problème étant que ce nom switch.832 ne désigne plus implicitement le VLAN 832 car il a été repris auparavant pour créer un périphérique Ethernet virtuel
usuel (sans VLAN).

Code: (/etc/config/network) [Sélectionner]
config interface 'wan'
        option device 'switch0.832'
        option proto 'dhcp'


Citation de: OpenWrt Wiki
An equivalent configuration in implicit notation is shown below. Note that the device sections are missing and the VLAN ID and parent interface is derived from the ifname option value in dot-notation.

config interface 'lan'
option type 'bridge'
option ifname 'eth0.106'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
 
config interface 'wan'
option ifname 'eth0.204'
option proto 'dhcp'

Source : https://openwrt.org/docs/guide-user/network/vlan/switch_configuration#creating_driver-level_vlans

Note : ifname semble avoir été déprécié et remplacé par device.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #22 le: 17 juin 2024 à 19:10:29 »
Je constate que cela modifie la configuration initiale.

Avant, c'était comme si il y avait deux ponts séparés : br-wan et br-lan. Maintenant, cela donne deux ponts bridge-vlan mais sur le même commutateur virtuel switch0 (type « pont »).

Qu'est-ce que cela change ? Est-ce important ?

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #23 le: 17 juin 2024 à 19:44:30 »
Le sujet est exposé dans la documentation de OpenWrt. Apparamment, l'auteur a un doute à ce propos : « This item needs careful vetting... ».

J'ai aussi trouvé une réponse sur le forum OpenWrt.

Citation de: LGA1150 (forum OpenWrt)
Les "réseaux pontés multiples" peuvent transmettre des trames marquées VLAN telles quelles (le filtrage VLAN est désactivé), alors que les "réseaux VLAN multiples sur un seul pont" ne le peuvent pas.

Source : https://forum.openwrt.org/t/dsa-multiple-bridges-vs-multiple-vlans-on-a-single-bridge/111331