OpenWRT : Gérer correctement le processus de mise à niveau (sysupgrade)

Article publié, le et modifié le
7 minutes de lecture

Cet article contient 1331 mots.
Source brute de l'article :

Description

OpenWRT a un outil pour faire la mise à niveau d’une version à une autre nommé sysupgrade. Il est possible de l’invoquer depuis l’interface web d’administration Luci, depuis le menu “Système” > “Flash firmware”.

Le principal ennui - et cela peut en être un - est que par défaut, l’usage de sysupgrade va supprimer toute trace de configuration personnalisée… à moins de prendre quelques précautions bien utiles, avant !

Le procédé suivant explique pas-à-pas la mise à niveau tout en mode CLI !
(c’est plus rapide, et normalement fonctionnel)

Nous verrons aussi quelques informations concernant la migration vers les versions ≥ 21.02.0-***.

Procédé

La première chose à laquelle nous veillons est d’installer l’outil curl, car par défaut le binaire wget nativement installé ne supporte pas TLS.

# opkg install curl

opkgscript.sh

Ensuite, nous récupèrons ce script fort utile opkgscript.sh :

$ curl -O https://raw.githubusercontent.com/richb-hanover/OpenWrtScripts/master/opkgscript.sh

Astuce

Et, nous donnons les droits d’exécution nécessaire :
# chmod 0700 opkgscript.sh

Astuce

2/ on sauvegarde la liste des paquets installés - pour pouvoir restaurer après la mise à niveau système :

# ./opkgscript.sh -v write

Le script écrit la liste dans un fichier /etc/config/opkg.installed.

Téléchargement firmware

Depuis le répertoire /tmp, récupèrons la nouvelle version du firmware :

  • e.g. pour la version actuelle :
$ v="21.02.3"

⇒ pour le routeur Ubiquiti EdgeRouter X :

$ curl -O https://downloads.openwrt.org/releases/"${v}"/targets/ramips/mt7621/{openwrt-"${v}"-ramips-mt7621-ubnt-erx-squashfs-sysupgrade.bin,sha256sums}

⇒ pour le Xiaomi Redmi Router AC2100 :

$ curl -O https://downloads.openwrt.org/releases/"${v}"/targets/ramips/mt7621/{openwrt-"${v}"-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-sysupgrade.bin,sha256sums}

Puis, nous vérifions la somme de contrôle afin de nous assurer du firmware :
$ sha256sum -c sha256sums 2> /dev/null | grep OK

⇒ Résultat correct pour le routeur Xiaomi Redmi Router AC2100 :
openwrt-21.02.3-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-sysupgrade.bin: OK

Danger

Sauvegarde configuration

L’étape suivante est de vérifier la configuration de la sauvegarde :

# sysupgrade -l

Si nécessaire, il faut éditer le fichier pour ajouter certains répertoires/fichiers, ainsi dans le cas où un utilisateur a été ajouté correctement au groupe `sudo` , il faudra ajouter ce qui suit dans le fichier /etc/sysupgrade.conf :

  • /etc/sudoers
  • /etc/sudoers.d/

Vérifions à nouveau - et sauvegardons la configuration :

# sysupgrade -b /tmp/backup-${HOSTNAME}-$(date +%F).tar.gz

Astuce

Puis, il faut récupèrer cette sauvegarde :
$ scp root@openwrt:/tmp/backup*.tar.gz $(pwd)
(où ‘openwrt’ est l’adresse IP de votre routeur…)

Info

Ultimes vérifications

Par acquis de conscience, assurons-nous de l’espace mémoire et disque avec les commandes free et df, voire cat /proc/meminfo ; le but est de vérifier que la taille de RAM libre est plus importante que la taille de l’image téléchargée. Si c’est le cas, nous pouvons continuer le processus, sinon, nous avons un sérieux problème et il faut en discuter sur le forum d’OpenWRT.


Puis supprimons ce qui devient désormais inutile :

  • les fichiers de listes des paquets :
    # rm -r /tmp/opkg-lists/
  • les caches suivants :
    # sync && echo 3 > /proc/sys/vm/drop_caches
  • Et si nécessaire, suppression des pilotes wifi suivants :
    # rm /etc/modules.d/*{80211,ath9k,b43}*
  • Pour finir, vérifiez qu’il n’y ait aucun lien symbolique dans le répertoire /etc/modules.d, si c’est le cas, détruisez-les, ce qui libérera de la RAM au prochain démarrage.

Mise à Niveau Système

Enfin, passons à la mise à niveau système, tel que :

# sysupgrade -v openwrt-"${v}"-*-sysupgrade.bin

⇒ Exemple, pour le routeur Ubiquiti EdgeRouter X :
# sysupgrade -v openwrt-"${v}"-ramips-mt7621-ubnt-erx-squashfs-sysupgrade.bin

Code : ash

Saving config files...
etc/config/dhcp
etc/config/dhcp-opkg
etc/config/dropbear
etc/config/firewall
etc/config/firewall-opkg
etc/config/https-dns-proxy
etc/config/https-dns-proxy-opkg
etc/config/luci
etc/config/luci-opkg
etc/config/network
etc/config/ntpclient
etc/config/opkg.installed
etc/config/rpcd
etc/config/system
etc/config/ucitrack
etc/config/ucitrack-opkg
etc/config/uhttpd
etc/dropbear/authorized_keys
etc/dropbear/dropbear_rsa_host_key
etc/group
etc/hosts
etc/inittab
etc/luci-uploads/.placeholder
etc/opkg/keys/0b26f36ae0f4106d
etc/opkg/keys/1035ac73cc4e59e3
etc/opkg/keys/5151f69420c3f508
etc/opkg/keys/72a57f2191b211e0
etc/opkg/keys/792d9d9b39f180dc
etc/opkg/keys/9ef4694208102c43
etc/opkg/keys/b2d571e0880ff617
etc/opkg/keys/b5043e70f9a75cde
etc/opkg/keys/c10b9afab19ee428
etc/opkg/keys/dace9d4df16896bf
etc/opkg/keys/dd6de0d06bbd3d85
etc/opkg/keys/f94b9dd6febac963
etc/passwd
etc/profile
etc/profile.d/opkg.sh
etc/rc.local
etc/shadow
etc/shells
etc/sysctl.conf
etc/uhttpd.crt
etc/uhttpd.key
etc/uhttpd.key
etc/uhttpd.crt
Commencing upgrade. Closing all shell sessions.

Normalement votre session SSH va se fermer et le routeur démarrer !


Lors de la nouvelle connexion par SSH, il est normalement possible que vous ayez le droit au message d’erreur suivant :

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:0atP7BnQQ98EVJciOCBDYAUD245lKm2tbau8BgWMpQ0.
Please contact your system administrator.
Add correct host key in /home/you/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/you/.ssh/known_hosts:93
  remove with:
  ssh-keygen -f "/home/you/.ssh/known_hosts" -R "192.168.xyz.1"
ED25519 host key for 192.168.xyz.1 has changed and you have requested strict checking.
Host key verification failed.

Ne paniquez pas, c’est normal !
Ayant changé de version de système d’exploitation, l’identification de l’hôte a changé aussi.
Appliquez la commande ssh-keygen, telle que donnée, dans votre cas, pour supprimer l’ancienne identification d’hôte. Puis retentez votre connexion.

Attention

Migration 21.02.0-***

Attention

Vous avez choisi de migrer vers la version 21.02.0-***, c’est bien !

Mais avant de faire toute autre action, connectez-vous à l’interface web, puis sur le menu “Interfaces” ; il va vous être proposé de faire une migration de la configuration, faites-la !

Puis, redémarrez !

Mise à Niveau “tiers”

Attention

# opkg update && opkg list-upgradable

Normalement suite à la mise à niveau, il ne devrait pas y en avoir beaucoup.

S’il y en a, exécutez la commande suivante :

# for name in `opkg list-upgradable | awk '{print $1}'`; do opkg upgrade "${name}"; done

Restauration profil utilisateur

On répète les étapes d’installation de l’outil curl, puis du script opkgscript.sh. Et une fois installé et les droits d’exécution attribués, on l’exécute pour qu’il complète l’installation du “profil utilisateur” :

# ./opkgscript.sh -v install

Pour finir, mieux vaut redémarrer !

Info

Ultimes Vérifications

Ensuite, vérifier la configuration de votre routeur :

  • que vos différentes interfaces réseaux soient toujours présentes et opérationnelles.
  • que votre configuration “firewall” soit correcte ; vérifiez dans les différents onglets votre configuration.
  • que les différents services, que vous auriez précédement installés, soient toujours opérationnels, tel qu’un tunnel IPv6, OpenVPN, ou tout service accessible depuis le menu “Services”.

Voilà…

Normalement, tout devrait fonctionner correctement en suivant correctement ce processus de mise à niveau.

Documentations

Comme vous pourrez le lire dans la documentation du wiki OpenWRT, il y a d’autres méthodes ; celle que je vous propose me semble la plus pertinente…