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

0 Membres et 1 Invité sur ce sujet

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« le: 13 juin 2024 à 11:24:19 »
Je cherche à spécifier les paramètres par défaut du micrologiciel. Une réinitialisation produira une connexion Internet directement opérationnelle.
Et je crois que j'ai trouvé le bon moyen pour y parvenir.

La clé est d'intégrer les paramètres du FAI lors de la génération de l'image. Une solution semble être d'adapter le script /bin/configure_generate et
élaborer un script /etc/board.d/03_box dont le rôle est de sélectionner le FAI (similaire à /etc/board.d/02_network selon le modèle) pour ajouter
les nouveaux paramètres relatifs à la connexion FAI au fichier /etc/board.json.

En conséquence, configure_generate aura accès directement aux informations permettant de définir les choses de façon logique. Au vu du résultat,
se baser essentiellement sur uci-defaults pour y parvenir rendrait les choses inextricables.

ppn_sd

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 176
  • FLG (28190)
Construire son image personnalisée
« Réponse #1 le: 13 juin 2024 à 15:20:55 »
Bonjour Basilix,

Je crois comprendre que tu veux faire un partage d'expérience, pourrais-tu être plus précis sur la solution trouvée ? Un exemple de fichier ?

Au vu du résultat, se baser essentiellement sur uci-defaults pour y parvenir rendrait les choses inextricables.
Peux-tu préciser le caractère inextricable de la chose ?

basilix

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

Cela va me prendre un certain temps. Le principe est basique mais il faut voir si cela s'ajuste convenablement en terme d'espacement.

C'est inextricable avec uci-defaults car on ne peut pas extraire facilement les informations dans la configuration. Les valeurs sont
enregistrées sous forme de variables d'environnement. Les fichiers /etc/config/.. sont interprétés comme des scripts par le Shell.

config interface 'lan'
        option device 'br-lan'


config et option sont en fait interprétées comme des fonctions par le Shell.

CONFIG_lan_TYPE='interface'
CONFIG_lan_device='br-lan'


C'est de cette manière que les fonctions Shell config_foreach et config_get accèdent aux informations. Ce n'est pas vraiment
exploitable avec uci-defaults. On ne peut pas non plus parcourir simplement différents niveaux de la configuration avec uci.
Dans l'ensemble, c'est dur d'agir sur la structure de donnée que représente la configuration avec des structures de contrôle classique.

C'est la raison probable pour laquelle les données sont analysées dans le format JSON par l'intermédiaire de l'interface Shell
jshn.sh dans les scripts de configuration du micrologiciel.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #3 le: 13 juin 2024 à 18:30:03 »
On code en dur les paramètres FAI avec des fonctions Shell, dans le fichier /etc/board.json. On re-calque ensuite les paramètres de ce fichier lors du processus de configuration du micrologiciel.
Les appels de fonctions Shell ainsi que le processus de configuration du micrologiciel devraient offrir une abstraction suffisante en exploitant la structure existante. On intègre les informations comme
des données transmises aux fonctions. Les fonctions ne font ensuite que refléter le processus de configuration du micrologiciel.

dr191

  • Abonné Free fibre
  • *
  • Messages: 52
Construire son image personnalisée
« Réponse #4 le: 13 juin 2024 à 19:50:53 »
Salut,

Pas sur de bien comprendre le besoin.
Vous parlez de image-builder pour construire l'image ?

Pour ma part, je me limite à une image avec les bon paquets + l'addresse du lan et du router.
Ca se paramètre dans files\etc\uci-defaults du dossier image builder.
Donc, la plupart du temps, upgrade avec conservation des paramètres.
Et en cas de cata ou de transfert sur un autre autre réseau, remise à zero avec donc un fonctionnel limité mais simple. Et rechargement de la config spécifique, depuis le backup de config sauvegardée séparément.

Intégrer toute la config dans l'image est séduisant, mais c'est casse gueule. Si marche pas, vous aurez bcp plus de mal à reprendre la main sur le routeur.





basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #5 le: 13 juin 2024 à 20:36:52 »
On peut transférer ses fichiers de configuration avec le constructeur d'image (a.k.a. Image Builder). L'inconvénient c'est qu'on charge toute sa configuration en bloc sans aucune modularité.
L'avantage d'intégrer les paramètres sous formes de données dans du code structuré est la granularité et la compacité. Vu que les données sont intégrées nativement au code on peut en
faire partiellement abstraction (on formalise en quelque sorte un modèle). Mais cela est plutôt pertinent quand la configuration du routeur est complexe à réaliser pour l'administrateur. Je
pense qu'on peut ainsi ajouter et retirer des composants au cours d'expérimentations simplement sans tout casser et rendre les choses plus accessibles. Par contre, il faut sûrement se
maintenir à niveau (être en phase) avec le développement de OpenWrt pour garantir que cela fonctionne. Je cherche à élaborer quelque chose de simple mais efficace et complexifier
la configuration de mon routeur progressivement (faire des tests d'intégration de fonctionnalités).

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #6 le: 13 juin 2024 à 20:48:45 »
Actuellement, la quantité de données à intégrer ne me paraît pas démesurée. J'ai juste ajouté box et livebox manuellement au fichier /etc/board.json pour me représenter les choses.

{
        "model": {
                "id": "bananapi,bpi-r3",
        "name": "Bananapi BPI-R3",
        },
"box": {
"id": "livebox,livebox_5",
"name": "Livebox 5",
"macaddr": "00:11:22:33:44:55",
},
        "network": {
                "lan": {
                        "ports": [
                                "lan1",
                                "lan2",
                                "lan3",
                                "lan4",
                                "sfp2",
                                "wan"
                        ],
                        "protocol": "static"
                },
                "wan": {
                        "device": "eth1",
                        "protocol": "dhcp",
                        "macaddr": "00:11:22:33:44:55",
                }
        },
"livebox": {
"ipv4": {
"clientid": "01001122334455",
"reqopts": "1 3 6 15 28 51 58 59 90 119 120 125",
"vendorid": "FSVDSL_livebox.Internet.softathome.Livebox5",
"90": "<authentication>",
},
"ipv6": {
"clientid": "00030001001122334455",
"reqopts": "11 17 23 24",
    "11": "<authentication>",
"userclass": "FSVDSL_livebox.Internet.softathome.Livebox5",
"vendorclass": "arcadyan",
},
"vlan": {
"vid": "832",
"cos": "6:6",
}
}
        "system": {
                "compat_version": "1.2"
        },
        "wlan": {
                "phy0": {
                        "path": "platform/soc/18000000.wifi",
                        "info": {
                                "antenna_rx": 15,
                                "antenna_tx": 15,
                                "bands": {
                                        "2G": {
                                                "ht": true,
                                                "he": true,
                                                "max_width": 40,
                                                "modes": [
                                                        "NOHT",
                                                        "HT20",
                                                        "HE20",
                                                        "HT40",
                                                        "HE40"
                                                ]
                                        }
                                }
                        }
                },
                "phy1": {
                        "path": "platform/soc/18000000.wifi+1",
                        "info": {
                                "antenna_rx": 15,
                                "antenna_tx": 15,
                                "bands": {
                                        "5G": {
                                                "ht": true,
                                                "vht": true,
                                                "he": true,
                                                "max_width": 160,
                                                "modes": [
                                                        "NOHT",
                                                        "HT20",
                                                        "VHT20",
                                                        "HE20",
                                                        "HT40",
                                                        "VHT40",
                                                        "VHT80",
                                                        "HE80",
                                                        "VHT160",
                                                        "HE160"
                                                ]
                                        }
                                }
                        }
                }
        }
}


Idéalement, il faudrait créer un paquet logiciel OpenWrt correspondant à un FAI comme cela est fait pour chaque SBC (ordinateur monocarte).

rooot

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 1 981
  • 🔵🔵🔵🔵⚪⚪⚪⚪🔴🔴🔴🔴
Construire son image personnalisée
« Réponse #7 le: 13 juin 2024 à 21:35:15 »
On pourrait aussi faire un "uci show" pour exporter toute sa config, d'en récuperer ce qui nous interesse et de le coller sur le firmware selector. En faisant précéder chaque ligne par un "uci set"
https://firmware-selector.openwrt.org/?version=23.05.3&target=mediatek%2Ffilogic&id=bananapi_bpi-r3

Donc on mettrait ça dans la section : Script à exécuter au premier démarrage (uci-defaults)



un petit "uci show network" permetrait déjà de récupérer tout sa config réseau.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #8 le: 14 juin 2024 à 07:16:33 »
@rooot :

La méthode serait fastidieuse car elle est relative à une configuration. Il faudrait comparer les modifications à chaque reprise.
Le code dans uci-defaults serait fragmentaire et peu lisible (sous une forme incomplète ou hétéroclite).

Je préfère ma proposition car on peut intégrer un paquet et automatiser de façon transparente.

ppn_sd

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 176
  • FLG (28190)
Construire son image personnalisée
« Réponse #9 le: 14 juin 2024 à 09:46:26 »
Le fichier board.json est transformé en commandes uci à la fin.

Il faudrait comparer les modifications à chaque reprise.
Dans tous les cas, c'est pareil pour le board.json. Il faut bien le mettre à jour quelque part pour s'en servir à la prochaine mise à jour non ?

J'utilise un script pour mettre à jour openwrt et j'effectue un simple contrôle des sommes de fichiers entre /etc et files/etc pour voir si des modifications sont passées à l'as.


basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #10 le: 14 juin 2024 à 11:06:38 »
@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.
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.

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.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 257
Construire son image personnalisée
« Réponse #11 le: 14 juin 2024 à 11:12:27 »
Note : Le fichier /etc/board.json peut lui-même être généré automatiquement. C'est ce que je souhaite faire en élaborant entre autre les scripts
/etc/board.d/03_box et /lib/functions/box-defaults.sh.