%
image/svg+xml

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

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

Cet article contient 2312 mots.
Source brute de l'article :
Commit version : 86d265c

Description

Danger

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.

Si le procédé vous intéresse plus que le faire par CLI, lisez la note en question : Flash depuis LuCI


Le procédé suivant explique pas-à-pas la mise à niveau tout en mode CLI, tout en préservant la configuration utilisateur…

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

Le script `opkgscript.sh` permet de sauvegarder la liste des paquets
installés en sus de la base.

⇒ Récupèrons le depuis [opkgscript.sh](https://raw.githubusercontent.com/richb-hanover/OpenWrtScripts/master/opkgscript.sh) :

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

<!--

Astuce
--> ⇒ Donnons les droits d'exécution nécessaire : `:# chmod 0700 opkgscript.sh` <!--
Astuce
--> ⇒ Sauvegardons la liste des paquets installés - *pour pouvoir restaurer après la mise à niveau système* : ```sh :# ./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="24.10.5"` ⇒ pour le routeur **OpenWRT One** : `:# curl -O https://downloads.openwrt.org/releases/"${v}"/targets/mediatek/filogic/{openwrt-"${v}"-mediatek-filogic-openwrt_one-squashfs-sysupgrade.itb,sha256sums}` ⇒ pour le routeur **Ubiquiti EdgeRouter X** : `:# curl -O https://downloads.openwrt.org/releases/"${v}"/targets/ramips/mt7621/{openwrt-"${v}"-ramips-mt7621-ubnt_edgerouter-x-squashfs-sysupgrade.bin,sha256sums}` ⇒ pour le **Xiaomi Mi Router AX3000T** : `:# curl -O https://downloads.openwrt.org/releases/"${v}"/targets/mediatek/filogic/{openwrt-"${v}"-mediatek-filogic-xiaomi_mi-router-ax3000t-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}` #### Vérification du téléchargement Puis, nous vérifions la somme de contrôle afin de nous assurer du firmware : ```sh :$ sha256sum -c sha256sums 2> /dev/null | grep OK ``` ⇒ Résultat correct pour le routeur **OpenWRT One** : \ `openwrt-24.10.4-mediatek-filogic-openwrt_one-squashfs-sysupgrade.itb: OK`
Danger
### Sauvegarde configuration L'étape suivante est de vérifier la configuration de la sauvegarde : ```sh :# 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 : ```sh :# sysupgrade -b /tmp/backup-${HOSTNAME}-$(date +%F).tar.gz ```
Info
--- Puis, il faut récupèrer cette sauvegarde : `:$ scp root@openwrt:/tmp/backup*.tar.gz $(pwd)` *('openwrt' est l'adresse IP de votre routeur…)*
Info
--- ### Mise à Niveau Système Passons à la mise à niveau système, tel que, par exemple : `:# sysupgrade -v openwrt-"${v}"-*-sysupgrade.bin` ou \ `:# sysupgrade -v openwrt-"${v}"-*-sysupgrade.itb` selon le modèle de routeur. ⇒ Exemple, pour le routeur **OpenWRT One** : ```ash :# sysupgrade -v openwrt-"$v"-mediatek-filogic-openwrt_one-squashfs-sysupgrade.itb (date) upgrade: Saving config files... etc/config/attendedsysupgrade etc/config/dhcp etc/config/dropbear etc/config/firewall etc/config/https-dns-proxy etc/config/luci etc/config/network etc/config/opkg.installed etc/config/rpcd etc/config/system etc/config/ubihealthd etc/config/ubootenv etc/config/uhttpd etc/config/unbound etc/config/wifi_schedule etc/config/wireless etc/crontabs/root etc/dropbear/authorized_keys etc/dropbear/dropbear_ed25519_host_key etc/dropbear/dropbear_rsa_host_key etc/fw_env.config etc/group etc/hosts etc/inittab etc/luci-uploads/.placeholder etc/nftables.d/10-custom-filter-chains.nft etc/nftables.d/README etc/opkg/keys/8a11255d14aef6c8 etc/opkg/keys/d310c6f2833e97f7 etc/passwd etc/profile etc/profile.d/busybox-history-file.sh etc/rc.local etc/shadow etc/shells etc/shinit etc/sysctl.conf etc/sysupgrade.conf etc/uhttpd.crt etc/uhttpd.key etc/unbound/unbound.conf etc/unbound/unbound_ext.conf root/opkgscript.sh (date) upgrade: Commencing upgrade. Closing all shell sessions. ``` Normalement votre session SSH va se fermer et le routeur démarrer ! ---
Info
#### Vérification nouvelle version À partir du moment où vous pourrez vous connecter à nouveau à votre routeur, vous retrouverez l'information relative à votre nouvelle version : - depuis LuCI, aller vers "Status" > "Overview", celui-ci sera affiché dans la section "System", face à l'information "Firmware version" - en SSH, dans la bannière de connexion affichant ce nouveau numéro de version, comme ci-dessous : ```ash BusyBox v1.36.1 (2025-12-17 21:08:22 UTC) built-in shell (ash) _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M ----------------------------------------------------- OpenWrt 24.10.5, r29087-d9c5716d1d ----------------------------------------------------- ``` --- ### Mise à Niveau "tiers"
Attention
⇒ Effectuons la mise à niveau des paquets tiers : `:# opkg update && opkg list-upgradable` Normalement suite à la mise à niveau, il ne devrait pas y en avoir. S'il y en a, exécutez la commande suivante : ```sh :# for name in `opkg list-upgradable | awk '{print $1}'`; do opkg upgrade "${name}"; done ``` ### Restauration profil utilisateur Pour restaurer le 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" : ```sh :# ./opkgscript.sh -v install ``` Pour finir, mieux vaut redémarrer ! --- ## 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 (Internet Protocol v6) , OpenVPN, ou tout service accessible depuis le menu "Services". --- Voilà… Normalement, tout devrait fonctionner correctement en suivant ce processus de mise à niveau. ## Notes Retrouvez ci-dessous différentes notes d'informations utiles, seulement dans certains contextes. ### Flash depuis LuCI Depuis le menu "System" > "Backup / Flash firmware" de l'interface web LuCI : 1/ Il est utile d'aller à l'onglet 'Configuration' pour modifier la liste des fichiers personnalisés à sauvegarder aussi… \ Si les fichiers et autres répertoires relatifs à l'installation de binaires tiers ne sont pas écrits ici, rien ne sera sauvegardé ! 2/ Faites une sauvegarde de votre configuration d'OpenWRT depuis l'onglet 'Actions', section 'Backup'. 3/ Lors du processus pour flasher une nouvelle image de mise à niveau : ⇒ Pensez à utiliser les options : - la case à cocher **KEEP SETTINGS AND RETAIN THE CURRENT CONFIGURATION**, à minima - la case à cocher **INCLUDE IN BACKUP A LIST OF CURRENT INSTALLED PACKAGES AT /ETC/BACKUP/INSTALLED_PACKAGES.TXT**, qui inclut une liste des paquets supplémentaires installés par vos soins. Si ces cases ne sont pas cochées, vous perdrez toute votre configuration lié à OpenWRT. De même les binaires tiers seront dans tous les cas à réinstaller, voire à reconfigurer. Gardez à l'esprit QUE des changements induits par les mises à niveau vers une version majeure peuvent poser des soucis lors de la migration. Il peut y avoir des changements critiques. ### À-propos de SSH v9.0 et supérieure Si votre client SSH est de version ≥ 9.0 : À partir de la version 9.0 de SSH, le comportement de `scp` a changé. \ Dans l'état, la commande ci-dessus échouera avec le message d'erreur suivant : ``` scp router:/tmp/backup-***-2022-04-21.tar.gz . ash: /usr/libexec/sftp-server: not found scp: Connection closed ``` Dans les faits, Dropbear ne peut plus discuter avec… Ajoutez l'option `-O` à la commande `scp`, tel que : `:$ scp -O root@openwrt:/tmp/backup*.tar.gz $(pwd)` *(cela rétablit l'ancien comportement SFTP de scp)* Une autre astuce est d'installer le serveur OpenSSH en lieu et place de Dropbear . ### Libération mémoire Cette section est surtout utile si le système de fichier `/tmp` n'est pas assez grand pour enregistrer l'image d'OpenWRT. Les actions ci-dessous vont permettre de libérer temporairement de l'espace dans la RAM. 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. Prenons un exemple pour mieux comprendre : ⇒ la taille du binaire d'upgrade de la version ci-dessus : ```ash :$ ll -h (…) -rw-rw-r-- 1 root root 6.7M Sep 10 13:53 openwrt-22.03.0-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-sysupgrade.bin (…) ``` elle est donc de 6.7 Mo. ⇒ L'espace disponible dans `/tmp` : ```ash :# df -h Filesystem Size Used Available Use% Mounted on /dev/root 3.8M 3.8M 0 100% /rom tmpfs 59.7M 540.0K 59.1M 1% /tmp /dev/ubi0_1 97.2M 7.8M 84.7M 8% /overlay overlayfs:/overlay 97.2M 7.8M 84.7M 8% / tmpfs 512.0K 0 512.0K 0% /dev ``` Dans le contexte du Xiaomi Redmi AC2100, à ce jour, l'espace disponible est de 59.1 Mo, ce qui est largement suffisant pour récupèrer l'image de mise à niveau et la gérer. ⇒ De même, l'espace libérée de mémoire : ```ash :# free -m total used free shared buff/cache available Mem: 122220 40532 61400 540 20288 46700 Swap: 0 0 0 ``` Dans ce contexte, l'espace libre en mémoire est de d'environ 60 Mo. Là, encore, il y a assez d'espace pour gérer l'image de mise à niveau. --- **Si** ainsi, dans votre contexte, l'espace totale disponible, soit celle de la mémoire plus celle en `/tmp` n'est pas assez grande, il est possible d'essayer ce qui suit - supprimer 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, puis **redémarrez absolument OpenWRT** avant de faire la mise à niveau. --- ### À-propos de l'identification de l'hôte à distance par SSH Lors de la nouvelle connexion par SSH, il est normalement possible que vous ayez le droit au message d'erreur suivant : ```sh @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ 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
### À-propos de la Migration vers ≥ 21.02.0
Attention
Vous avez choisi de migrer vers la version 21.02.0-*** depuis 19.07.***, 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 ! --- ### resolv.conf À ce moment de l'étape, il est possible que vous ne puissiez plus communiquer avec l'extérieur, car le fichier `/etc/resolv.conf` est toujours configuré pour la résolution de noms en interne, tel que : ```cfg :# cat /etc/resolv.conf search huc.home nameserver 127.0.0.1 nameserver ::1 ``` Dans ce cas, éditez le fichier pour ajouter un serveur DNS à interroger, tel que ceux de la FDN : `80.67.169.12`, et `2001:910:800::12`. Par exemple : ```sh :# sed -i -e 's/127.0.0.1/80.67.169.12/;s/::1/2001:910:800::12/' /etc/resolv.conf ``` Bien sûr, modifiez à votre convenance ! <!-- Exemple : 8.8.8.8 ! # Cx de Google ! sed -i -e 's/127.0.0.1/8.8.8.8/;s/::1//' /etc/resolv.conf sed -i -e 's/80.67.169.12/8.8.8.8/;s/2001:910:800::12//' /etc/resolv.conf --> ## 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… - [Upgrading OpenWrt firmware using LuCI and CLI](https://openwrt.org/docs/guide-user/installation/generic.sysupgrade) - [Upgrading OpenWrt firmware using LuCI](https://openwrt.org/docs/guide-quick-start/sysupgrade.luci) - [Upgrading OpenWrt firmware using CLI](https://openwrt.org/docs/guide-user/installation/sysupgrade.cli) ---