[Bash] Test chaîne vide ou non

Vérification qu’une variable est non vide en Bash.

if [[ -n "$PARAMETERS_FILE" ]]; then
  METADATA="${METADATA},parameters_file=${PARAMETERS_FILE}"
fi

En d’autres termes, si la variable PARAMETERS_FILE n’est pas vide, on la concatène dans METADATA. Pour vérifier qu’une variable est vide, utiliser -z.

Soit au final :

  • -z : retourne vrai si la taille de la chaîne vaut zéro.
  • -n : retourne vrai si la taille de la chaîne n’est pas zéro.

Source : Shellcheck – SC2236 : Use -n instead of ! -z

Connexion fibre – Remplacer la livebox

En passant d’un accès adsl chez OVH, à un accès fibre chez Sosh, je me suis donc retrouvé avec une livebox sur les bras pour la connexion au réseau. N’étant pas fan de l’interface et disposant déjà d’un routeur entièrement configuré et responsable de la gestion de l’ensemble de mon LAN, j’ai donc rapidement cherché à remplacer la livebox par mon routeur tournant sous Advanced Tomato.

Pour la configuration, je me suis basé sur les deux liens ci-dessous. Le premier sur le forum lafibre.info, réunit toutes les informations nécessaires à la configuration d’un routeur sous Advanced Tomato sur le réseau d’Orange. Le deuxième complète avantageusement le premier lien, en donnant un exemple détaillé de configuration et de nombreuses informations sur le contexte de connexion à la fibre d’Orange.

Génération de l’identifiant de connexion hexadécimal

L’identifiant de la connexion orange est de la forme fti/xxxx, la partie qui nous intéresse est celle qui suit le préfixe fti/, et qu’il faut convertir en hexadécimal pour l’ajouter dans la configuration de l’option 90. Le code JavaScript suivant permet de générer la chaîne nécessaire:

function strToHex(str) {
  let result = '';
  for (let i = 0; i < str.length; i++) {
    result += str.charCodeAt(i).toString(16);
  }
  return result;
}
console.log(strToHex(xxxx));
Mise en place des options 77 et 90

Dans l’interface du routeur sous Advanced Tomato, dans la partie Administration > Scripts, onglet Init, j’ajoute le code suivant en remplaçant les xxxxxx par la chaîne hexadécimale générée précédemment :

cp -R /sbin/ /tmp/sbin
rm /tmp/sbin/udhcpc
echo 'exec busybox udhcpc -O 0x4d -O 0x5a -x 0x4d:2b46535644534c5f6c697665626f782e496e7465726e65742e736f66746174686f6d652e4c697665626f7833 -x 0x5a:00000000000000000000001a0900000558010341010d6674692fxxxxxx "$@"' > /tmp/sbin/udhcpc
chmod +x /tmp/sbin/udhcpc
mount --bind /tmp/sbin/ /sbin
Priorité et classement du trafic

Pour la suite, on ajoute de la priorité au trafic, cette fois dans l’onglet firewall :

### Version 16 20181010
### https://lafibre.info/remplacer-livebox/tuto-remplacer-la-livebox-par-un-routeur-dd-wrt-internet-tv/

### Priorite / CoS pour Internet

# File 0 (par defaut) pour le DHCP (raw-socket), file 1 pour le reste du trafic
vconfig set_egress_map vlan832 0 6
vconfig set_egress_map vlan832 1 0

### On classe le trafic Internet dans les bonnes files

# Tout le trafic priorite 1 (CoS 0)
iptables -t mangle -A POSTROUTING -j CLASSIFY --set-class 0000:0001

# Client DHCP non raw-socket (pas le cas de udhcpc) mais sert aussi pour le renew
iptables -t mangle -A POSTROUTING -o vlan832 -p udp --dport 67 -j CLASSIFY --set-class 0000:0000
Configuration du VLAN 832

Dans la partie Basic Settings > Network, partie WAN Settings, sélectionner DHCP.
Dans la partie Advanced Settings > VLAN, ajouter un VLAN supplémentaire, portant le VID 832. Pour ce VLAN, compléter les colonnes de la façon suivante :

  • WAN Port : Yes
  • Tagged : On (Colonne après WAN Port)
  • Bridge: WAN

Le reste de colonnes restent vides pour le VLAN 832. En cas de doute, se référer à l’image présente sur la page du forum lafibre.info dont le lien figure plus haut.

Conclusion

Une fois cette configuration mise en place, il ne reste plus qu’à redémarrer le routeur, et à croiser les doigts en espérant ne pas avoir fait d’erreurs de recopiage. Dans le cas contraire, il faudrait passer au débug de la configuration, ce qui est une autre paire de manche. Dernier point, s’il m’arrive de perdre la connexion, suite à un changement de configuration, ou plus généralement, après un changement de câblage ayant laisser le router déconnecté de l’ONT plusieurs minutes, je retrouve une connexion fonctionnelle en forçant le renouvellement de la connexion dans l’interface Status > Overview, encart WAN, bouton Renew.

A terme, il n’est pas impossible que je procède au changement de mon routeur R7000. En effet, Advanced Tomato ayant beau être fantastique à utiliser, celui-ci, basé sur Tomato Shibby, n’est plus mis à jour. Il faudrait que j’étudie plus en détails les implications, ou plutôt la vulnérabilité actuelle du composant aux failles de sécurité découvertes ses derniers mois. Quelques internautes semblent utiliser un routeur MikroTik en remplacement de leur livebox avec succès, c’est une piste à creuser, d’autant plus que ce n’est pas la première fois que j’entends parler de cette marque.

SPA112 et ligne VoIP OVH

En début d’année 2018, je m’attelais à l’amélioration de mon réseau LAN, en cherchant à en maîtriser le plus de composants possibles. À l’époque, j’étais chez OVH pour ma connexion au réseau internet, et je disposais à ce titre, d’une ligne téléphonique. Afin de pouvoir me passer du modem OVH, j’avais donc commandé un petit boîtier Cisco SPA112, afin de pouvoir brancher mon téléphone et d’être en mesure de passer et de recevoir des appels. Voici quelques notes prises au moment de la mise en place et que je publie ici pour référence.

Sur le SPA112, le couple login/mot de passe par défaut est admin/admin. Avant même de m’attaquer à la configuration de la ligne, j’avais commencé par mettre à jour le firmware. Celui-ci est à récupérer directement sur le site de Cisco, je note d’ailleurs qu’une nouvelle version du firmware a été publié en avril de cette année. Dans mes souvenirs, le processus de mise à jour ne présente aucune difficulté, dans l’onglet dédié, il suffit de sélectionner le zip sur son disque, puis de valider pour démarrer la mise à jour. Évidemment, dans l’idéal, on prendra quelques minutes pour vérifier la somme de contrôle du fichier récupéré.

Pour ce qui est de la configuration de la ligne, je me suis inspiré de la page Cisco SPA112 du wiki VoIP.ms qui fournit une documentation très complète sur le boîtier. Toujours en fouillant dans ma mémoire, je crois me souvenir d’avoir effectué la configuration via la page « Quick Setup », et n’avoir eu qu’à remplir les champs proxy, display name, user id et password avec les informations de ma ligne OVH. Il ne me semble pas avoir eu besoin de mettre en place une configuration particulière pour le dial plan. Voici donc un extrait de ma configuration:

  • Proxy: sip3.ovh.fr
  • Display Name: 0033900000000
  • User ID: 0033900000000
  • Password: <mot de passe>
  • Dial Plan: (*xx|[3469]11|0|00|[2-9]xxxxxx|1xxx[2-9]xxxxxxS0|xxxxxxxxxxxx.)

A ce stade, les propriétaires d’un accès internet OVH s’étonneront peut-être du fait que je disposais des informations de connexions à la ligne téléphonique incluse dans mon abonnement. En effet, il faut savoir qu’OVH ne fournit pas ces informations dans le cadre de l’offre d’abonnement internet. Le seul moyen d’avoir ces informations via OVH, consiste à demander l’envoi contre caution d’un SPA112 déjà configuré, ou de s’abonner spécifiquement à une offre de ligne téléphonique sur IP.

Une autre solution, celle que j’ai choisi, consiste à ruser pour obtenir le mot de passe de la ligne. D’après ce que j’avais pu lire sur les forums OVH, il faut savoir que cette manière de faire vient avec quelques limitations d’usage comparée à une véritable solution VoIP. En effet, OVH vérifie que cette ligne n’est utilisée qu’à partir de votre réseau domestique. Il n’est à priori pas possible d’utiliser sa ligne depuis une application Android en étant connecté au réseau 4G. Les utilisateurs ayant tentés l’opération, ont vu les informations de connexion de leur ligne VoIP être réinitialisées, les obligeant ainsi à refaire la procédure de récupération des identifiants de connexion. En revanche, il est tout à fait possible d’utiliser la ligne depuis une application Android, avec son téléphone connecté à son réseau local. Du point de vue d’OVH, l’appel est passé depuis l’IP associée à la connexion internet et cela ne pose donc aucun problème. Si vous disposez donc d’un VPN vous permettant de vous connecter à votre réseau local, il devient alors possible d’utiliser la ligne téléphonique depuis l’extérieur, comme par exemple, depuis un pays étranger dans lequel vous n’auriez pas de réseau, mais simplement un accès à internet non restreint.

Passons maintenant à l’exposition succincte et non détaillée du processus de récupération des identifiants de connexion. À partir d’un modem OVH configuré et disposant de la ligne téléphonique activée et fonctionnelle, on commence par configurer un service dyndns pointant vers un nom de domaine en notre possession et sur lequel on fait tourner un petit bout de code ayant pour seul rôle de logger les informations provenant des requêtes entrantes. Une fois le service configuré, on sauvegarde la configuration du modem dans un fichier via la page prévue dans l’interface. Dans le fichier de configuration, on cherche la ligne correspondant aux identifiants de la ligne VoIP et on récupère le hash du mot de passe associé. On remplace ensuite le hash du mot de passe associé à la configuration de notre service dyndns par le hash du mot de passe de la ligne VoIP récupéré à l’étape précédente. Une fois le fichier modifié de cette manière, on procède à la restauration de la configuration du modem à partir du fichier que l’on vient de modifier. Une fois la nouvelle configuration en place, le modem va faire un appel vers notre service dydns pour l’informer de la configuration IP actuelle et utilisera dans la requête les informations d’authentification, à savoir, le mot de passe de la ligne VoIP. Il ne reste plus qu’à aller consulter les logs du service dyndns que nous avons mis en place pour y découvrir le mot de passe VoIP en clair. Une fois en possession de cette information, on peut alors configurer une application Android ou un SPA112 pour se connecter à la ligne téléphonique.

Sur ce point, je trouve dommage qu’OVH ne fournisse pas directement les informations de connexion, même en précisant par exemple, que la ligne téléphonique n’est utilisable que depuis l’adresse IP associée à la connexion internet fournie. Au passage, je remercie toutes les personnes qui ont échangé autour du processus à suivre et dont les discussions, posts après posts m’ont permis de reconstituer une solution fonctionnelle, et de profiter de la ligne téléphonique au sein de mon LAN comme je l’entendais.

Réinitialisation du jeton cryptographique Gnuk

Après avoir réalisé quelques tests du jeton cryptographique fraîchement créé à partir d’un ST-Linkv2 et de Gnuk, j’ai cherché à nettoyer les clefs stockées sur ce jeton de test. Mes recherches m’ont guidé vers le dossier tool du dépôt gnuk, qui contient plusieurs scripts permettant de réaliser divers opérations sur le jeton. L’instruction factory-reset ne fonctionnant pas sur les jetons Gnuk, je me suis tourné vers le script gnuk_remove_keys_libusb.py. Script qui nécessite d’arrêter gpg-connect-agent avant d’être exécuté. Je n’ai au final pas pu valider son fonctionnement, pour la raison que vous découvrirez au paragraphe suivant.

gpg-connect-agent "SCD KILLSCD" "SCD BYE" /bye
./tool/gnuk_remove_keys_libusb.py -p

Lors de mes premières tentatives, je n’avais pas utilisé le paramètre p de la commande et celle-ci utilisait donc le PIN par défaut à savoir 12345678 pour le PIN admin. Ayant changé ce dernier, j’ai très vite atteint la limite d’essai autorisé et ai rendu mon jeton inopérant. Il a donc fallu s’intéresser à la façon de réinstaller Gnuk sur un jeton bloqué.

Pour effectuer la reprogrammation, il faut connecter le jeton à notre ST-Link comme dans l’article précédent. Afin de déverrouiller le jeton, il est également nécessaire de connecter les pins 7 (NRST) et 8 (VSSA) du micro-contrôleur STM8F103. Une fois les deux pins connectés, avec la pointe de mesure d’un multimètre par exemple, il faut lancer openocd comme précédemment. Une fois le programme en cours de fonctionnement, sans erreur ni tentative permanente de reconnexion, on peut arrêter de maintenir la connexion entre les deux pins.

Pour repérer les deux pins concernés, voir le schéma ci-dessous.

Pins d’un STM32F103C8T6

L’opération n’étant pas des plus évidentes, j’ai dû effectuer plusieurs tentatives avant de pouvoir reprendre la main pour reprogrammer le micro-contrôleur. Par ailleurs, impossible de me reconnecter correctement aux pins du ST-Link, j’ai donc été obligé de sortir le fer à souder, d’autant plus que le STM32 est positionné de l’autre côté de la carte et donc impossible d’y accéder pour connecter les deux pins en utilisant le précédent système de connexion.

Le montage après reprogrammation et juste avant de retirer les fils soudés.

Pas de changement dans les instructions de programmation à part l’ajout du mass_erase pour supprimer tout le contenu de la mémoire.

halt
stm32f1x unlock 0
reset halt
stm32f1x mass_erase 0
flash write_bank 0 ./src/build/gnuk-vidpid.bin 0
stm32f1x lock 0
reset halt

Après reprogrammation, le jeton est à nouveau vierge de toutes informations et prêt à recevoir de nouvelles clés!

De l’idée à la réalisation d’un jeu de société

Que vous soyez parents ou enfants, jeune ou vieux si vous avez la fibre créatrice cette article est fait pour vous.

Il y a quelques jours j’ai fini le montage d’une vidéo. J’ai réalisé cette vidéo dans le but de partager ma passion pour la création. Je me suis fixé comme objectif de réaliser un jeu de société papier en utilisant le logiciel de dessin vectoriel Inkscape. Je ne sais pas si l’on peut appeler cette vidéo un tutoriel puisque je ne détail pas toutes les actions à réaliser. Je vous laisse juger par vous même.

La capture et l’édition de la vidéo m’a pris environ 5 heures. J’estime que le jeu que je présente dans la vidéo peut être réalisé en 2 ou 3 heures par un débutant. Ça peut être un bon moyen de passer du temps avec des enfants et faire une activité enrichissante tant pour eux que pour vous.

Créer son propre jeu de société, même si il est créé par ordinateur vous permettra

  • de découvrir le dessin vectoriel
  • d’avoir une activité artistique
  • de développer l’imagination
  • d’apprendre les réglages d’impression
  • de travailler manuellement la découpe et l’assemblage des pièces.

Je vous offre aussi la possibilité de passer directement à la découpe des pièces puis au jeu en vous donnant gratuitement et librement les images du jeu ou encore le fichier vectoriel pour ceux qui aimeraient le modifier

N’hésitez pas à vous abonner à la chaine Youtube et à y laisser un commentaire ou un pouce voir même une photo de votre propre jeu.