(modifié le 9 mars 2025 à 12:52)

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...

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter