[Tomato] Réinjecter la configuration après un upgrade 🍅
A chaque mise à jour de firmware de Tomato le process est le même, il est conseillé de ne pas repartir de sa configuration, mais de tout reparamétrer à la main...
Je vous explique pourquoi et comment faire pour transposer votre configuration (nvram) après une mise à jour de firmware.
Déjà parce qu'on est des feignants, mais aussi parce que cela n'a rien de passionnant. Et que c'est important de rester sur une version récente pour des questions de sécurité.
Pourquoi est-ce déconseillé de ré-injecter votre config
Chaque version de firmware tomato vient avec une liste de paramètres possible, le tout étant stocké en nvram.
Cela peut poser plusieurs problèmes :
- paramètre qui n'existe plus (suppression)
- paramètre qui a changé de nom
- paramètre qui a changé de valeur possible
- introduction d'un nouveau paramètre
Dans le pire des cas le routeur ne démarrera pas, plantera ou aura un fonctionnement difficilement compréhensible.
Dans le meilleur des cas vous consommerez de l'espace précieux en nvram au fur et à mesure des versions de firmwares que vous installerez.
Plus vous sautez de versions lors de l'upgrade, plus le risque est important. Et le changelog ne donne pas plus d'information sur les attributs qui changent (malheureusement).
Rappel du processus de mise à jour
Admettons que je suis sur la version Tomato 2022.1 et que je veux migrer vers la version 2025.1.
Avant de faire une mise à jour du firmware de mon FreshTomato, je fais un backup :
- du fichier de configuration .cfg (cf tutoriel)
- du fichier de configuration nvram (format texte) nvram_v2021.1.txt
Ensuite je lance une réinitialisation complète de nvram, puis le routeur reboot.
Je définis une IP fixe sur ma machine (192.168.1.123/24) puis je me connecte sur http://192.168.1.1 avec l'identifiant "root" et le mot de passe "admin"
Puis je fais à nouveau un backup du fichier de configuration texte nvram (cf tutoriel) que je nomme :
nvram_v2022.1_vide.txt
C'est maintenant le moment de faire la mise à jour firmware de Tomato en v2025.1 à partir du fichier TRX sans oublier de cocher la case :
" Erase all data in NVRAM. Optional. This is performed between the firmware upload and the reboot."
Après quelques minutes le routeur revient à la vie, je me connecte sur http://192.168.1.1 avec l'identifiant "root" et le mot de passe "admin".
Puis je fais à nouveau un backup du fichier de configuration texte nvram (cf tutoriel) que je nomme nvram_v2025.1_vide.txt.
Nous disposons maintenant de 2 fichiers de configuration usine, une pour chaque version de firmware :
- nvram_v2021.1_vide.txt
- nvram_v2025.1_vide.txt
Comparer les versions
Maintenant que nous disposons de 2 fichiers de configuration usine, nous allons pouvoir comparer ces 2 fichiers.
Pour que ce soit plus pratique, je crée une version triée par ordre alphabétique en bash (ma préférence).
En bash (depuis WSL par exemple, ou directement depuis votre routeur Tomato) :
cat nvram_v2021.1_vide.txt | sort > nvram_v2021.1_vide_SORTED.txt cat nvram_v2025.1_vide.txt | sort > nvram_v2025.1_vide_SORTED.txt
Aussi possible en PowerShell :
gc nvram_v2021.1_vide.txt | Sort-Object | sc nvram_v2021.1_vide_SORTED.txt gc nvram_v2025.1_vide.txt | Sort-Object | sc nvram_v2025.1_vide_SORTED.txt
Je compare ces 2 fichiers triés dans WinMerge.
A noter que le tri est aussi possible directement dans WinMerge : Menu Plugins > appliquer un script > trier les lignes par ordre croissant (je conseille de travailler sur une copie pour garder les fichiers cd conf nvrame non triés).
Dès que je vois un paramètre qui a été supprimé dans le firmware plus récent, je le répercute dans mon fichier nvram_v2021.1.txt. Même chose pour les nouveaux paramètres, je les ajoute à la main. Je travaille toujours sur le fichier non trié pour modifier, les 2 fichiers triés sont là pour que la comparaison visuelle dans WinMerge soit plus facile.
Exemple ici avec la suppression du paramètre "log_ftp", que je supprime également dans ma configuration perso s'il était également présent.
Je dispose maintenant d'un nouveau fichier nvram tout beau tout propre, prêt à être injecté dans le routeur : nvram_2025.1.txt.
Script d'injection du nouveau fichier nvram
Je copie mon nouveau fichier nvram_2025.1.txt dans le /tmp du routeur via FTP (activez-le avant) ou directement avec vi en copier/coller.
Puis j'utilise ce code bash pour injecter la nouvelle configuration nvram :
#!/bin/sh input="/tmp/nvram_injected.txt" while IFS= read -r line do nvram set "$line" done < "$input"
Si tout s'est bien passé, on valide la nouvelle configuration :
nvram commit && reboot
Patientez plusieurs minutes jusqu'à ce que le routeur redémarre. Si ce n'est pas le cas c'est que vous avez flingué quelque chose.
Commandes utiles
Si vous avez quelques paramètres à retirer et ne souhaitez pas réinjecter toute la nvram, procédez ainsi :
nvram unset nom_du_parametre1 nvram unset nom_du_parametre2 nvram unset nom_du_parametre3 nvram commit && reboot
C'est un peu le même principe que chez Cisco, la configuration est lue au boot.
Conclusion
Et voilà ! Merci à ceux qui attendaient cet article depuis 2022 et qui se reconnaitront
De mon côté j'utilise un second routeur pour mes tests, cela me permet de voir s'il y a eu des changements importants d'une version de firmware à une autre, sans péter le vrai. Si vous suivez chaque version il y a peu de changement d'une version à une autre, mais ça vaut le coup de vérifier (regardez les changelog de FreshTomato).
Enfin : gardez toujours la nvram configuration usine de votre version de firmware actuelle, cela vous évitera de faire un reset configuration avant l'upgrade...
Vous n'aimez pas le RSS : abonnez-vous par email
Vous devriez me suivre sur Twitter : @xhark
Article original écrit par Mr Xhark publié sur Blogmotion le 09/03/2025 |
Pas de commentaire |
Attention : l'intégralité de ce billet est protégée par la licence Creative Commons