« Test de la bande passante Open WRT » : différence entre les versions

De knowledge
Aller à la navigation Aller à la recherche
Page créée avec « Il existe un programme en C et en ligne de commande qui fait très bien le travail mais... sur mes micro routeurs j'ai pas la place de builder du C! Il faut donc procéder à une cross compilation sur une autre machine. Dans ce exemple ce sera un PC sous Windows avec WSL2. == Audience == Utilisateurs OpenWrt 18.06.x sur GL-Inet GL-AR150 (SoC AR9331, target ar71xx/generic, arch mips_24kc) souhaitant: # Compiler en cross sous WSL2 (hote x86_64). # Installer le... »
 
 
Ligne 58 : Ligne 58 :


Reference generique sur feeds/packages du projet OpenWrt (contexte buildroot/SDK): (ref turn15search16)
Reference generique sur feeds/packages du projet OpenWrt (contexte buildroot/SDK): (ref turn15search16)
Accessoirement on peut utiliser ce SDK pour [[Cross compiler son propre code en C pour GLInet|cross compiler son propre code en C]] pour notre petit routeur.


== Partie B - Installer le binaire sur le routeur ==
== Partie B - Installer le binaire sur le routeur ==

Dernière version du 6 mars 2026 à 22:49

Il existe un programme en C et en ligne de commande qui fait très bien le travail mais... sur mes micro routeurs j'ai pas la place de builder du C!

Il faut donc procéder à une cross compilation sur une autre machine.

Dans ce exemple ce sera un PC sous Windows avec WSL2.

Audience

Utilisateurs OpenWrt 18.06.x sur GL-Inet GL-AR150 (SoC AR9331, target ar71xx/generic, arch mips_24kc) souhaitant:

  1. Compiler en cross sous WSL2 (hote x86_64).
  2. Installer le binaire sur le routeur.
  3. Corriger wget pour qu il supporte HTTPS (eviter les erreurs "SSL support not available").

Notes et limites

  • Le SDK OpenWrt 18.06 pour ar71xx/generic fournit des outils hote pour x86_64. Il faut donc compiler sur un hote x86_64 (WSL2 convient). Tenter la compilation sur Raspberry Pi (ARM) provoquera un "Exec format error" sur les utilitaires hote du SDK. Cette contrainte est inherente aux toolchains SDK precompiles par OpenWrt (voir docs et discussions generiques sur paquets et SDK OpenWrt). OpenWrt packages feed (contexte SDK/feeds) (ref turn15search16)
  • Sur OpenWrt, les acces HTTPS des utilitaires en ligne de commande necessitent a la fois: (a) un backend TLS (libustream-... ou un client avec TLS integre), (b) un store de CA (ca-bundle/ca-certificates), (c) et parfois un client qui sait reellement faire du TLS (wget-ssl ou curl). (refs: ca-bundle pkgdata et fils de discussion OpenWrt) (ref turn15search13 turn15search11)

Prerequis cote routeur

Routeur cible:

  • OpenWrt 18.06.x, ar71xx/generic, mips_24kc.
  • Espace libre dans /overlay > 1 MB.

Verifier: opkg print-architecture cat /etc/openwrt_release

Exemple attendu: DISTRIB_RELEASE='18.06.1' DISTRIB_TARGET='ar71xx/generic' DISTRIB_ARCH='mips_24kc'

Partie A - Mettre en place le SDK OpenWrt 18.06 sur WSL2 (x86_64)

  1. Installer les dependances build sur WSL2 (Ubuntu/Debian) sudo apt update sudo apt install -y build-essential git python3 unzip libncurses5-dev gawk gettext libssl-dev xsltproc rsync
  2. Telecharger et extraire le SDK 18.06.1 ar71xx/generic (hote x86_64) mkdir -p ~/openwrt-sdk && cd ~/openwrt-sdk wget https://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/generic/openwrt-sdk-18.06.1-ar71xx-generic_gcc-7.3.0_musl.Linux-x86_64.tar.xz tar xf openwrt-sdk-18.06.1-ar71xx-generic_gcc-7.3.0_musl.Linux-x86_64.tar.xz cd openwrt-sdk-18.06.1-ar71xx-generic_gcc-7.3.0_musl.Linux-x86_64
  3. Ajouter votre paquet (exemple: speedtest-cli-c, client speedtest en C) mkdir -p package/speedtest-cli-c cat > package/speedtest-cli-c/Makefile << 'EOF' include $(TOPDIR)/rules.mk

PKG_NAME:=speedtest-cli-c PKG_VERSION:=1.0 PKG_RELEASE:=2

PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/GlideX/speedtest-cli.git PKG_SOURCE_VERSION:=master

PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk

define Package/speedtest-cli-c SECTION:=utils CATEGORY:=Utilities TITLE:=Speedtest CLI (C client) URL:=https://github.com/GlideX/speedtest-cli endef

define Package/speedtest-cli-c/description Minimal speedtest.net client in C for OpenWrt. endef

define Build/Prepare $(call Build/Prepare/Default) rm -rf $(PKG_BUILD_DIR) git clone $(PKG_SOURCE_URL) $(PKG_BUILD_DIR) ( cd $(PKG_BUILD_DIR); git checkout $(PKG_SOURCE_VERSION) ) endef

define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) CC="$(TARGET_CC)" STRIP="$(TARGET_STRIP)" endef

define Package/speedtest-cli-c/install $(INSTALL_DIR) $(1)/usr/bin # binaire genere a la racine ou parfois dans src/, adapter si besoin: $(INSTALL_BIN) $(PKG_BUILD_DIR)/speedtest-cli $(1)/usr/bin/speedtest # alternative (decommenter si le binaire est dans src/): # $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/speedtest-cli $(1)/usr/bin/speedtest endef

$(eval $(call BuildPackage,speedtest-cli-c)) EOF

  1. (Optionnel) make menuconfig pour cocher le paquet make menuconfig Utilities -> speedtest-cli-c <m></m>
  2. Compiler uniquement le paquet make package/speedtest-cli-c/clean V=s make package/speedtest-cli-c/compile V=s
  3. Recuperer l IPK genere (ou le binaire nu) Trouver l IPK: ls bin/packages/mips_24kc/base/ | grep speedtest Chemin attendu: bin/packages/mips_24kc/base/speedtest-cli-c_*_mips_24kc.ipk

Reference generique sur feeds/packages du projet OpenWrt (contexte buildroot/SDK): (ref turn15search16)

Accessoirement on peut utiliser ce SDK pour cross compiler son propre code en C pour notre petit routeur.

Partie B - Installer le binaire sur le routeur

Option 1 - Installer l IPK

ROUTER="192.168.8.1" # IP du routeur à adapter
scp bin/packages/mips_24kc/base/speedtest-cli-c_mips_24kc.ipk root@${ROUTER}:/tmp/
ssh root@${ROUTER}
# et sur le routeur
opkg install /tmp/speedtest-cli-c_mips_24kc.ipk

Option 2 - Copier le binaire nu (je suis pas fan de celle ci)

scp build_dir/*/speedtest-cli-c/speedtest-cli root@ROUTEUR:/usr/bin/speedtest 
ssh root@ROUTEUR 'chmod +x /usr/bin/speedtest'

Test rapide: ssh root@ROUTEUR 'speedtest -s' Note: si l outil doit telecharger la liste de serveurs via HTTPS, voir Partie C.

Partie C - Activer HTTPS pour wget sur OpenWrt 18.06

Problematique

  • Par defaut, beaucoup d images OpenWrt utilisent soit:
    • BusyBox wget (sans HTTPS), ou
    • /bin/wget -> uclient-fetch (sans HTTPS).
  • Installer uniquement ca-bundle/ca-certificates/libustream ne suffit pas, car wget BusyBox/uclient-fetch ne sait pas parler TLS. (refs: ca-bundle et discussions OpenWrt sur wget/opkg et TLS) (ref turn15search13 turn15search11)

Etapes recommandees

Installer les certificats et une lib TLS (utile pour curl/opkg/wget-ssl)

opkg update opkg install ca-bundle ca-certificates libustream-mbedtls

(refs: pkgdata ca-bundle, discussions TLS/ustream) (ref turn15search13 turn15search11) Installer un client avec HTTPS reel: wget-ssl (ou curl)

opkg install wget-ssl

Verifier qui est appele quand on tape "wget" type wget ls -l /bin/wget ls -l /usr/bin/wget

Cas frequent a corriger: /bin/wget -> uclient-fetch (KO pour HTTPS) /usr/bin/wget -> wget-ssl (OK pour HTTPS) Fix: faire pointer /bin/wget vers wget-ssl rm /bin/wget ln -s /usr/bin/wget-ssl /bin/wget ln -s /usr/bin/wget-ssl /usr/bin/wget

Verification: wget --version # doit montrer un wget avec SSL, pas BusyBox wget -qO- https://www.speedtest.net/speedtest-servers-static.php | head

  • Si vous voyez du XML, HTTPS fonctionne.
  • Si vous voyez "429 Too Many Requests", c est un rate limit temporaire impose par speedtest.net; attendre quelques minutes et limiter la frequence des requetes. (info sur l usage du fichier servers-static et l acquisition via HTTP(S) par des outils tiers) (ref turn15search24)

Important:

  • Les messages d erreur "SSL support not available, please install one of the libustream-.* [ssl|tls] packages as well as the ca-bundle and ca-certificates" signifient tres souvent que le binaire appele est BusyBox wget ou uclient-fetch, pas wget-ssl. Installer wget-ssl et repointer /bin/wget corrige le probleme. (ref turn15search11 turn15search15)