Les bornes d’accès sans fil HPE Aruba AP-215 sont par défaut gérées par un contrôleur dédié. Il est cependant possible de les passer en mode “Aruba Instant” afin de pouvoir se passer de contrôleur.
Pour passer dans ce mode, on va devoir flasher l’OS de la borne.
Prérequis
Pouvoir alimenter la borne AP-215, soit via un connexion POE si votre switch le supporte, soit via un bloc d’alimentation dédié (12V / 1,5A).
Un câble de console USB -> RJ45 (RS232), ou USB -> DB9 -> RJ45
Récupérer la dernière version d’Aruba Instant AOS compatible avec la borne (8.6.0.25). Nécessite un compte support.
Mise en place d’un serveur TFTP
On crée un serveur TFTP sur notre réseau (par exemple tftpd-hpa sous Linux ou avec Open TFTP Server sous Windows), et on place à la racine le fichier ArubaInstant_Centaurus_8.6.0.25_90367.
Sous Linux il suffit d’installer le package tftpd-hpa et de placer le fichier ArubaInstant_Centaurus_8.6.0.25_90367 sous /srv/tftp/.
Flashage de la borne
On connecte tout d’abord le câble console au port “CONSOLE” de la borne et on ouvre une connexion série (par exemple avec screen ou gtkterm sous Linux sur le port /dev/ttyUSB0, ou avec Putty sous Windows sur le port COM adéquat). On peut ensuite connecter la borne au réseau (et l’alimenter).
Exemple avec screen (quitter avec CTRL-a k):
sudo screen /dev/ttyUSB0 9600
On doit voir défiler les logs de démarrage sur la connexion série.
Lorsque la borne affiche Hit <Enter> to stop autoboot:, taper sur la touche Entrée pour obtenir un prompt (apboot>).
On doit tout d’abord définir le code pays pour la borne. Si on souhaite définir le pays FR (France) pour la borne ayant le numéro de série CK1234567, on génère le code SHA1 pour la chaîne FR-CK1234567, soit 68b66c2f96c0ffa7fc67dda5152c68da41a5914b.
apboot> proginv system ccode CCODE-FR-68b66c2f96c0ffa7fc67dda5152c68da41a5914b
apboot> invent -w
On indique à la borne de récupérer une IP via DHCP et on note son adresse (ici 192.168.0.20).
apboot> dhcp
...
DHCP IP address: 192.168.0.20
...
On indique l’adresse IP de la machine sur laquelle est lancé le service TFTP (ici 192.168.0.10).
apboot> setenv serverip 192.168.0.10
On peut ensuite lancer la mise à jour de l’OS sur la partition 0 (la partition 1 peut contenir une autre version de l’OS).
apboot> upgrade os 0 ArubaInstant_Centaurus_8.6.0.25_90367
eth0: link up, speed 100 Mb/s, full duplex
Using eth0 device
TFTP from server 192.168.0.10; our IP address is 192.168.0.20
Filename 'ArubaInstant_Centaurus_8.6.0.25_90367'.
...
Copying to flash...
Writing 9....8....7....6....5....4....3....2....1....done
Verifying flash... 14603004 bytes were the same
Upgrade successful.
On force le boot sur la partition 0.
apboot> setenv os_partition 0
On peut ensuite sauvegarder la configuration et rebooter la borne.
Se connecter à https://192.168.0.20 (l’IP de votre borne ; il faudra sans doute accepter le certificat auto-signé).
Les identifiants de connexion par défaut sont :
identifiant : admin
mot de passe : numéro de série de la borne
L’interface vous proposera immédiatement de choisir un nouveau mot de passe, et vous aurez accès à la configuration de votre borne.
Ajout de bornes supplémentaires
Si on flash une autre borne et qu’on la connecte au même réseau, elle va hériter automatiquement de la configuration de la première borne et étendre le réseau wifi existant.
La résolution du Rubik’s cube 3x3x3 est relativement simple. Elle nécessite seulement la mémorisation de quelques algorithmes (séquences de mouvements). Je vous présente ici la méthode nécessitant d’apprendre le moins d’algorithmes. Ce n’est certainement pas la plus rapide mais elle vous permettra de résoudre le Rubik’s cube en moins de 3 minutes.
Introduction
Pour comprendre cette méthode, je dois tout d’abord vous présenter la terminologie utilisée.
Pièces centrales : Il s’agit des pièces situées au centre de chaque face.
Bordures : Ce sont les pièces situées au milieu de chaque arrête du cube. Elles sont composées de deux couleurs.
Coins : Ce sont les pièces situées aux sommets du cube. Elles sont composées de trois couleurs.
J’utiliserai la notation “Singmaster” (créée par David Singmaster) pour décrire chaque mouvement à réaliser. A chaque face correspond une lettre :
F (Front) : la face du cube qui est face à vous
B (Back) : la face du cube qui est à l’arrière
U (Up) : la face supérieure
D (Down) : la face inférieure
L (Left) : la face de gauche
R (Right) : la face de droite
Lorsqu’on effectuera une suite de mouvements, il faudra bien veiller à conserver l’orientation globale du cube.
Quand une apostrophe (‘) suit une lettre, celà signifie que la rotation doit être éffectuée dans le sens inverse des aiguilles d’une montre. Par exemple, L signifie qu’il faut faire tourner la face de gauche dans le sens des aiguilles d’une montre, L’ indique la rotation inverse. Attention, il est facile de se tromper de sens, surtout quand on débute.
Etape 1 : La croix blanche sur le dessus
Cette étape ne devrait pas vous poser trop de problème. Il est surtout important que chaque bordure de la croix ait la couleur correspondant à la pièce centrale de chaque face.
Etape 2 : La face blanche et le premier étage
La encore, cette face peut être résolue avec des mouvements simples que je ne présenterai pas en détail.
Etape 3 : On retourne le cube
Etape 4 : Résolution du deuxième étage
Nous devons à présent apprendre nos premiers algorithmes. Le premier nous permettra de basculer la bordure de l’étage supérieur de 90° vers la gauche (sur le second étage, donc), le second nous permettra de faire de même vers la droite. On va donc tourner la face supérieur du cube pour être dans l’un des deux cas suivants.
Bascule vers la gauche
Algorithme : U’ L’ U L U F U’ F’
Bascule vers la droite
Algorithme : U R U’ R’ U’ F’ U F
Autres cas
S’il n’y a plus de bordure disponible sur l’étage supérieur, on peut utiliser un des deux algorithmes pour remplacer une bordure mal placée du second étage.
Etape 5 : Obtenir la croix jaune sur la face supérieure
Cas du “crochet jaune”
Si vous avez un “crochet jaune” (trois cases jaunes entourant un coin) sur la face du dessus, et éventuellement des cases jaunes supplémentaires, placez le au fond à gauche et appliquez l’algorithme suivant.
Algorithme : F U R U’ R’ F’
Cas de la “barre jaune”
Si vous avez une “barre jaune” (trois cases jaunes alignées, dont le centre) sur la face du dessus, et éventuellement des cases jaunes supplémentaires, placez la à l’horizontale et appliquez l’algorithme suivant.
Algorithme : F R U R’ U’ F’
Autres cas
Si vous n’êtes dans aucun de ces deux cas, appliquez un des deux algorithmes et répétez cette étape.
Etape 6 : Terminer la face jaune
A cette étape, un seul algorithme est nécessaire (le “Sune”), mais nous allons orienter la face supérieure en fonction du motif que forment ses cases jaunes. On devra répéter cette étape autant que nécessaire (parfois 5 ou 6 fois dans les pire cas !).
Algorithme “Sune” : R U R’ U R U U R’
Cas du “poisson jaune”
Orientez la face supérieur de manière à ce que le “poisson jaune” pointe vers le coin inférieur gauche. Si vous avez une case jaune face à vous, sur le côté droit du dernier étage, la face jaune devrait être résolue après l’exécution du “corner flipper”. Sinon, orientez la face supérieure pour avoir une case jaune face à vous, sur le côté gauche ou droit du dernier étage et exécute l’algorithme. Répétez ensuite l’étape 6.
Cas de la “croix jaune”
Si vous n’avez qu’une croix jaune sur la face supérieure, orientez cette dernière de manière à avoir une case jaune face à vous, sur le côté droit du dernier étage. Répétez ensuite l’étape 6.
Etape 7 : Placer les boins coins
Si vous avez de la chance, les coins sont bien placés et vous pouvez passer à l’étape 8. Sinon, essayez de trouver une face du dernier étage ayant deux coins de la même couleur, et placez-là à l’arrière. S’il n’y en a pas, exécutez l’algorithme suivant et répétez cette étape.
Algorithme “corner switch” : R’ F R’ B B R F’ R’ B B R R
Etape 8 : Finir la dernière face
La dernière étape consiste à placer correctement le bordures du dernier étage. Si vous avez déjà une face terminée, vous n’êtes plus qu’à un algorithme de la résolution. Sinon, appliquez une des deux algorithmes suivants, et répétez cette étape.
Les deux algorithmes nous permettent de permuter les trois bordures des faces gauche, avant et droite. L’un permet de les faire tourner dans le sens des aiguilles d’une montre, et l’autre en sens inverse. Notez qu’appliquer deux fois de suite le même algorithme revient au même qu’appliquer l’autre. On peut ainsi éviter d’apprendre les deux.
Rotation anti-horaire
Algorithme : R U’ R U R U R U’ R’ U’ R R
Rotation horaire
Algorithme : R R U R U R’ U’ R’ U’ R’ U R’
Etape 9 : Admirez votre oeuvre, améliorez-vous, et reprenez une vie normale !
Conclusion
Mémoriser les algorithmes peut sembler difficile. Le meilleur moyen d’y parvenir et d’inventer des moyens mnemotechniques, basés sur les mouvements à effectuer, ou sur la notation Singmaster.
Il est aussi possible de décomposer les algorithmes en groupes d’opérations. Voici quelques enchaînements fréquents, et leur appelation commune :
“Sexy move” : R U R’ U’
“Inverse Sexy move” : U R U’ R’
“Left Sexy move” : L’ U’ L U
“Inverse Left Sexy move”: U’ L’ U L
A l’étape 4, on peut ainsi placer le cube de trois-quarts (et considérer qu’il n’y a plus de face “avant”) et appliquer ces algorithmes :
Bascule vers la gauche : “Inverse Left Sexy move” + “Inverse Sexy move”
Bascule vers la droite : “Inverse Sexy move” + “Inverse Left Sexy move”
A l’étape 2, l’algorithme du “crocket jaune” devient : F + “Inverse Sexy move” + F’
Celui de la barre horizontale devient : F + “Sexy move” + F’
Si vous connaissez d’autres moyen mnémotechniques, n’hésitez pas à les partager en commentaires !
Annexes
Les cubes 3D de cet article ont été générés grâce à AnimCubeJS
Le NAS Ve-Hotech VHS4 LS est un NAS 4 baies. Il tourne sous une version modifiée d’Ubuntu 10.04 (obsolète depuis le 9 mai 2013), et n’offre qu’un accès limité au système à l’utilisateur (gestion via une interface web, pas d’accès SSH).
La société Ve-Hotech a été mise en liquidation judiciaire le 04/09/2019, ne proposant de fait plus aucune mise à jour.
Du fait de l’obsolescence de leur système on les trouve à très bas prix sur les sites de petites annonces, malgré leur hardware encore tout à fait adapté à un NAS. Mon objectif était donc de parvenir à installer une distribution Linux récente.
Probléme : le VHS4 a toute l’apparence d’une boîte noire car il n’est pas (de base) possible d’y brancher un écran pour accéder au BIOS et tenter de démarrer sur un autre disque. D’ailleurs, parlons du disque système d’origine du VHS4. Une inspection rapide de la carte mère ne permet pas de l’identifier. Pas de carte SD ou périphérique interne, pas de DOM (Disk on Module)… Une énigme.
On trouve cependant sur la carte mère un connecteur 14 broches (13 en réalité, une est absente) nommé JVGA.
En recherchant les références de cette dernière (MSI MS-S0031), j’ai trouvé le mode d’emploi correspondant, indiquant le brochage de ce connecteur.
Me voilà donc parti pour tenter de réaliser un adaptateur maison.
JVGA1 pin 1 -> VGA pin 1
JVGA1 pin 3 -> VGA pin 2
JVGA1 pin 5 -> VGA pin 3
JVGA1 pin 11 -> VGA pin 13
JVGA1 pin 12 -> VGA pin 14
La connexion de tous les pins Ground (2, 4, 6, 7 et 9 côté JVGA1 et 5, 6, 7, 8, 10) permet d’avoir une image avec moins d’interférences. Les autres connexions sont optionnelles.
Heureusement j’avais pas mal de composants qui trainaient, notamment un PCB disposant d’un port VGA male. J’ai aussi pu utiliser un vieux connecteur IDE 44 broches male (ceux qui se branchent sur les anciens disques IDE 2’5) qui, une fois coupé, s’avère s’insérer parfaitement sur le connecteur JVGA1 de la carte mère.
On peut sans doute trouver ce type de connecteur dans toute bonne boutique d’électronique (rechercher embase, 14 voies, 2 rangs, pas de 2mm…).
Restait à faire les soudures, essayer de ne pas se planter dans les correspondances… et trouver un moniteur disposant d’un port VGA.
Au bout de plusieurs heures à essayer de trouver les bonnes correspondances, à souder, désouder, tester… une image apparaît enfin à l’écran. Les couleurs sont mauvaises à cause de mon vieil écran qui est en train de rendre l’âme, mon montage est atroce… mais peu importe, c’est utilisable et je peux accéder au BIOS en tapant sur la touche Del au démarrage.
Je découvre ainsi qu’il y a bien, quelque part dans le boîtier, un disque USB 4 Go hébergeant l’OS du NAS. Peu importe, je modifie l’ordre de priorité des disques de demarrage et décide de démarrer sur une clé USB branchée sur un des ports à l’arrière de boîtier. Bonne surprise, celà fonctionne parfaitement sur la dernière Debian stable en date (12.4). A des fins de recherche, j’en profite pour faire un dump du disque système d’origine pour l’étudier utltérieurement.
J’installe donc l’ISO d’installation de la dernière version d’OpenMediaVault sur ma clé, je fouille dans mes tiroirs pour trouver une autre clé USB, la plus petite possible (en dimensions), qui va devenir de nouveau disque système du NAS, branchée en permanence à l’arrière du boîtier. Je préfère ne pas altérer la partition de 4 Go d’origine du NAS, mais c’est un choix personnel, pour pouvoir éventuellement remettre le NAS dans son état (obsolète) d’origine.
Suite à mon article précédent
concernant la virtualisation KVM/QEMU avec GPU en passtrough, j’ai utilisé pendant plusieurs mois cette
solution sans problème particulier.
Un limitation demeurait cependant pour quelques utilisations très spécifiques, et notamment la MAO (musique
assistée par ordinateur). Je dispose en effet d’une carte son USB externe qui, une fois partagée avec une VM,
induisait des latences la rendant inutilisable.
Il était donc nécessaire de procéder de la même façon qu’avec la carte graphique, en dédiant un controlleur USB
à ma VM. J’ai donc acheté une carte PCI offrant 5 ports USB 3.0 (Inateck KTU3FR-5O2I) pour la dédier à ma VM.
Tout ne s’est malheureusement pas passé comme prévu car en ajoutant l’identifiant de ma carte dans
/etc/modprobe.d/vfio.conf puis en la rattachant à ma VM via le partage d’hôte PCI, ma VM refusait tout
simplement de booter (“No boot device”).
J’ai trouvé sur un forum un témoignage similaire.
Conformément à la réponse donnée qui indique que certaines cartes PCI peuvent poser problème en passthrough, j’ai
changé de méthode et décidé de dédier un contrôleur USB de ma carte mère à ma VM, et d’utiliser ma carte USB 3.0 PCI
pour l’hôte. Et là, plus aucun problème.
Ma carte son externe fonctionne désormais à merveille dans ma VM, sans aucune latence. Je dispose par ailleurs
ne nombreux autres ports USB directement reliés à ma VM si le besoin s’en faisait sentir.
Attention : cette commande exécute un script externe. Il est impératif de vérifier
son contenu avant toute exécution. Il n’est pas nécessaire de l’exécuter en root.
Retrieving speedtest.net configuration...
Testing from <fai> (<ip>)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Vialis (Colmar) [321.69 km]: 27.345 ms
Testing download speed................................................................................
Download: 900.21 Mbit/s
Testing upload speed......................................................................................................
Upload: 172.34 Mbit/s
La virtualisation c’est bien beau, mais les performance graphiques des VM sont
souvent très limitées, et ne permettent pas certains usages. Dans mon cas, je
suis 95% du temps sous Linux, mais il m’arrive parfois de devoir rebooter sous Windows
pour quelques tâches très précises : traitement de photos sous Lightroom, création
musicale (mon vieux Line6 TonePort KB37 n’est pas supporté sous Linux), et jeu - bien
que la situation s’est grandement améliorée de ce côté là sous Linux ces
dernières années -.
Concernant le traitement de photos et le jeu, une carte graphique est indispensable
pour obtenir des performances correctes. C’est pour cette raison que je préfèrais
rebooter sous Windows plutôt que de passer par une VM.
Une solution existe cependant : le PCI passthrough. Il permet de dédier un
périphérique PCI (dans notre cas une carte graphique) à une VM, avec des
performances quasiment intactes.
Prérequis
Deux cartes graphiques (ou une carte + celle intégrée à votre CPU), préférablement
de deux marques différentes (NVidia et AMD par exemple)
Beaucoup d’espace disque (Windows prend vite ses aises) voire idéalement un SSD dédié
Pas mal de RAM (32 Go dans mon cas)
Un CPU supportant la virtualisation processeur et chipset (chez Intel, il s’agit des
technologies VT-x et VT-d)
Deux moniteurs
Mon matériel
Carte mère Asus H97-Plus
CPU Intel i7 4790k
RAM 32 Go
GPU 1 : Nvidia K620 (que je souhaite dédier à l’hôte)
GPU 2 : AMD Radeon RX480 (que je souhaite dédier à la VM)
SSD 256 Go dédié à la VM
Mise en place
Configuration BIOS
Dans mon cas, les deux options à
activer se trouvent sous :
Après reboot, le script suivant doit afficher pas mal de choses :
#!/bin/bashshopt-s nullglob
for g in /sys/kernel/iommu_groups/*;do
echo"IOMMU Group ${g##*/}:"for d in$g/devices/*;do
echo-e"\t$(lspci -nns${d##*/})"done;done;
Dans mon cas je répère les deux lignes suivantes, correspondant au GPU que je
souhaite dédier à ma VM (et l’interface audio associée):
Il faut noter les deux identifiants indiqués (dans mon cas 1002:67df et 1002:aaf0)
Bloquer le chargement du GPU à dédier à notre VM
Dans mon cas, je ne souhaite pas charger les modules correspondant à mon AMD Radeon,
je vais donc blacklister le module amdgpu (vous devrez peut-être blacklister le
module radeon si c’est celui que vous utilisez, cf. lsmod).
Je crée donc le fichier /etc/modprobe.d/blacklist-amdgpu.conf contenant :
blacklist amdgpu
J’active aussi le VFIO (Virtual Function I/O) passthrough en créant le fichier
/etc/modprobe.d/vfio.conf contenant :
options vfio-pci ids=1002:67df,1002:aaf0
Les identifiants sont bien évidemment à adapter.
Dernière mise à jour de grub et recontruction de l’initramfs pour prendre en
compte ces changements :
sudo update-grub
sudo update-initramfs -u
reboot
Après reboot, cette commande devrait afficher quelques lignes :
dmesg | grep vfio-pci
Création d’une VM Windows
J’utilise pour celà l’outil graphique virt-manager. Je ne rentrerai pas dans les
détails de la création, mais le plus important est d’ajouter à notre VM deux hôtes
PCI correspondant à la carte graphique (et son interface audio) que l’on souhaite
dédier à la VM.
On n’oublie pas de brancher un écran sur notre carte graphique en passthrough,
et on lance l’installation de Windows, puis des drivers graphiques de notre carte.
Partage souris clavier entre hôte et VM
On installe logiciel Barrier sur l’hôte et la VM (serveur côté hôte, client côté
VM). On pourra ainsi passer la souris d’un écran à l’autre même lorsque les deux
écrans ne sont pas connecté au même OS. Barrier permet aussi d’effectuer des
copier-coller entre le OS.
TIP : la touche “scroll-lock” (ou “verrou défil.”) du clavier permet de
verrouiller la souris à l’écran actuel. Celà permet par exemple de jouer
à des FPS sans que la souris ne quitte malencontreusement l’écran du jeu en
cours de partie. Dans ce contexte, il est aussi nécessaire d’activer l’option
“mouvements de souris relatif” côté serveur Barrier pour ne pas être limité dans
ses mouvements de souris (sinon on a parfois l’impression de “buter” sur
les bords de l’écran en déplaçant la souris).
Bonus
Je tenais à conserver le dual-screen sous Linux, mais à pouvoir dédier un de
mes écrans à la VM Windows lorsque je le souhaitais. Il est possible de brancher
un des écrans aux deux cartes puis de changer la source d’entrée au niveau de
l’écran, mais celà peut nécessiter un peu de développement côté Linux pour qu’il
désactive un des écrans lorsque l’on passe sur notre VM Windows, et n’est pas
forcément très érgonomique en fonction de l’écran.
J’ai opté pour une solution beaucoup plus simple : un switch HDMI (ça vaut dans
les 10€). De cette manière, lorsque je switch l’entrée connectée au GPU dédié à Windows,
mon GPU Linux détecte une déconnection physique d’un l’écran et adapte automatiquement son
affichage (même chose à la reconnexion).
Quelques photos
Horizon Zero Dawn sous Windows à gauche, Linux à droite
Apex Legends sous Windows à gauche, Linux à droite
Il est parfois nécessaire d’avoir à sa disposition une ancienne version de Firefox
pour pouvoir administrer certains équipements dont l’interface web n’a pas pu être
mise à jour (plus de support par exemple).
Dans mon cas, j’avais besoin d’un Firefox <= 63.0.
mkdir ~/Documents/mon-vieux-Firefox
cd ~/Documents/mon-vieux-Firefox
wget https://gist.githubusercontent.com/rubo77/b999c1bc6d10ab802536/raw/ef97fe0b919507186a969908f4393a99e518766c/download-mozilla-portable.sh
A ce stade, je vous invite fortement a vérifier le contenu du script download-mozilla-portable.sh
que vous venez de télécharger. Executer un script inconnu téléchargé sur internet
n’est pas du tout une bonne idée.
Le deuxième argument de ce script permet de préciser la version de Firefox que l’on
souhaite récupérer.
sh download-mozilla-portable.sh firefox 63.0
On obtient un exécutable de Firefox 63.0 sous ~/Documents/mon-vieux-Firefox/firefox-portable-63.0/firefox-portable.
Pour éviter qu’il se mette à jour automatiquement, ma technique un peu crade
consiste à le lancer une première fois, et à le quitter immédiatement (afin qu’il
ait le temps de créer un profil utilisateur, mais pas de se mettre à jour).
On édite ensuite le fichier ~/Documents/mon-vieux-Firefox/firefox-portable-63.0/data/prefs.js pour y rajouter la ligne suivante :
Il est parfois utile de permettre à un système Windows virtualisé d’accéder à la
webcam du Linux hôte (Ubuntu dans notre cas). Pour participer à une visioconférence
Skype Entreprise, par exemple.
Dans un premier temps, il faut s’assurer que l’utilisateur courant sur la machine
hôte fait bien partie du groupe vboxusers. Si ce n’est pas le cas :
adduser login_utilisateur vboxusers
Il peut-être nécessaire de redémarrer pour s’assurer que cette modification est
bien prise en compte.
Il faut ensuite installer le pack d’extension VirtualBox :
apt-get install virtualbox-ext-pack
On active ensuite cette extension via l’interface de VirtualBox, dans le menu
Fichier > Paramètres > Extensions. On ajoute l’extension qui se trouve sous
/usr/share/virtualbox-ext-pack.
Ensuite, au niveau des paramètre de notre machine virtuelle Windows, il faut
se rendre dans la section USB et activer le Contrôleur USB 2.0 (EHCI). Si la
webcam est branchée sur un port USB 3.0, sélectionner Contrôleur 3.0 (xHCI).
En cliquant sur le bouton +, une liste des périphériques USB branchés à la machine
hôte devrait apparaître. Il suffit de sélectionner celui correspondant à la webcam
et le tour est joué.
Si la webcam est bien détectée par Windows mais qu’aucune image n’est visible,
vérifier que la bonne version du contrôleur USB est sélectionnée.
L’installation d’un jeu Linux via un installer téléchargé sur
GOG peut parfois donner lieu à une erreur :
Erreur fatale: la création du fichier a échoué
Cela vient du fait que les installers de GOG Linux utilisent par défaut le
dossier /tmp pour décompresser les fichiers du jeu, même si l’espace dans ce
dossier est insuffisant.
Le contournement consiste a indiquer un dossier temporaire alternatif :
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/mon-domaine.fr.conf
-------------------------------------------------------------------------------
Cert is due for renewal, auto-renewing...
Renewing an existing certificate
Performing the following challenges:
Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA.
Attempting to renew cert from /etc/letsencrypt/renewal/mon-domaine.fr.conf produced an unexpected error: Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA.. Skipping.
L’idée peut faire sourire, mais quand on y réfléchit bien, elle n’est pas si absurde que ça.
Il s’agirait bien évidemment d’une évolution à long terme, peut-être de l’ordre d’une dizaine
d’années.
Commençons par regarder la répartition des revenus de Microsoft.
On constate en tout premier lieu que 28% des revenus sont générés par Office. En seconde
position à 22% sont regroupés Windows Server et Microsoft Azure. Je n’ai pas réussi à obtenir de chiffres plus
détaillés de ce côté là, mais je soupçonne Azure de représenter la majeure partie de cette catégorie de revenus. On sait
par ailleurs que l’OS le plus hébergé sur Azure est Linux.
Aujourd’hui, même la division XBox rapporte plus à Microsoft que Windows. Ont-ils encore intérêt à assumer la
totalité du développement d’un OS pour ces 9% de revenus ? Après tout,
ils ont déjà franchi le pas pour leur navigateur web Edge en adoptant Chromium.
Qui l’aurait cru il y a encore peu (moins de dix ans), quand Internet Explorer était encore le navigateur le plus utilisé ?
En parallèle, on constate depuis ces dernières années de nombreux signes d’ouverture de Windows vers Linux, et
plus largement vers le logiciel libre.
Citons, en vrac :
On constate aussi que Microsoft pousse très fortement les versions Cloud de ses outils (Office365), effaçant petit à petit
la dépendance à Windows. Et c’est bien normal, Windows n’est plus l’OS majoritaire. Certes il le reste sur les ordinateurs personnels
(même si MacOS X a pris une part du gâteau), mais la bataille a déjà été perdue au profit de Linux sur les serveurs, et face à Android/iOS sur
les devices mobiles qui, ne l’oublions pas, représentent aujourd’hui plus de la moitié du trafic web mondial. On pourrait même voir cette incitation à passer à “Office cloud” comme une manière d’assurer les revenus liés à Office dans l’éventualité d’un changement d’architecture de Windows.
En parallèle, on constate que Windows n’a plus le vent en poupe auprès de développeurs,
tant au niveau des plate-formes de développement, que des OS cibles. Ne plus attirer de développeurs, ce n’est généralement pas bon
signe sur le long terme.
Bref, Microsoft a-t-il encore intérêt à redoubler d’efforts pour maintenir Windows à flot face à la concurrence, alors que son
cœur de métier est désormais dans le cloud ? Est-il temps d’intégrer le noyau Linux dans Windows pour permettre
de porter en douceur les outils sur cette nouvelle architecture, petit à petit ? Serait-ce déjà en cours ?
Dans l’esprit du challenge du challenge du logo de l’ANSSI, un anonyme a lancé le 2 octobre sur Reddit et BitcoinTalk une invitation à relever un challenge : trouver la clé privée cachée dans une image donnant accès à un wallet contenant 310 BTC. L’auteur a déjà apporté la preuve cryptographique qu’ils étaient en sa possession en signant l’url du challenge avec la clé privée du wallet.
Je ne me fais pas de faux espoirs, il y a des gens bien plus compétents que moi qui emporteront le prix. Cependant, la résolution de l’énigme reste un défi passionnant. J’indiquerai donc sur cette page l’état de mes recherches. N’hésitez pas à partager les vôtres dans les commentaires. Si vous souhaitez que l’on planche à plusieurs, n’hésitez pas non plus ; on pourrait par exemple se retrouver sur un canal IRC dédié. Bonne chance à tous !
La première étape consiste à repérer une date cachée dans l’image.
“OCT 2 2018” nous donne en format propre (= pas américain) : “20181002”.
Nous prenons ensuite les caractères de cette chaîne 1 par 1 (en répétant la chaîne au besoin) et les soustrayons aux caractères du tableau initial (en hexadécimal). En cas de valeur négative, on repart de la valeur maximum (F en hexadécimal) et on soustrait le reste.
Si ce n’est pas clair, imaginez un cadenas à code en hexadécimal (donc des molettes à 16 positions). si vous devez soustraire 4 d’une molette qui se trouve sur 2, vous allez passer de 2 à 1, de 1 à 0, de 0 à F, et enfin de F à E. On peut faire ce calcul en convertissant en décimal et utilisant notre cher modulo : 2 - 4 = -2 et -2 mod 16 = 14 (E en hexadécimal).
Le nombre de crans pour chaque molette correspond à ce qu’indique chaque caractère correspondant dans la clé “20181002” : descendre la première molette de 2, la deuxième de 0, la troisième de 1…
On constate ainsi que la première ligne nous donne une série de “310” qui nous suggère que nous sommes sur la bonne piste. Toutes les autres valeurs du tableau donnent des chiffres (une fois la conversion hexadécimal vers décimal effectuée) inférieurs à 2048. Ces valeurs correspondent à un codage possible en BIP-0039 (liste de mots parmi 2048 possibilités).
La formule utilisée dans chaque cellule du tableau C (attention les yeux) :
Le PNG d’origine présente des zones légèrement transparentes invisibles à l’œil nu (opacité de 253 sur 255). Voici comment les mettre en évidence avec Gimp :
Le QRcode amène vers une page du site où l’on peut tenter de valider la hash sha256 d’un fichier. La ligne correspond quant à elle à du binaire :
Si l’on fait un décodage base64, la chaîne obtenue débute par “Salted”. C’est visiblement un fichier de 256 octets chiffré via OpenSSL. Reste à trouver l’algorithme de chiffrement et la clé.
On appellera ce fichier alpha.enc.
Extraction du LSB du canal rouge
LSB : Least Significant Bit (bit de poids faible)
On comparant tout les couches visibles de l’image d’origine, on constate des différences dans la couche rouge, notamment sur la ligne 310.
En extrayant l’inverse du dernier bit de la valeur de chaque pixel de la ligne 310 du canal rouge, on obtient le code binaire suivant :
$ openssl enc -aes-256-cbc-md md5 -base64-d-a-k"02L3F95847"-in red-lsb.enc -out red-lsb.dec
$ cat red-lsb.dec
Bitcoin Challenge ..... 310 BTC
https://bitcoinchallenge.codes/
---
You're either very very close, or working in the wrong direction :)
Here you go : Z465/
---
La concaténation de toutes ces données nous permet d’obtenir un hash sha256 qui est accepté sur la page d’enregistrement sur laquelle pointait le QRcode :
Une trame de fond est détectable sur l’ensemble de l’image. On peut la mettre en évidence via une solarisation (appliquer un courbe de colorimétrique en triangle).
Cette trame est constituée de tuiles de 128x120 pixels. Afin de l’isoler, j’ai extrait des zones sur fond blanc de l’image (principalement en haut à droite du tableau). A coups de copiers-collers et de déplacements au pixel, on obtient :
Ensuite, j’ai constitué une image à partir de ce motif (dans Gimp, filtre “Tile”) légèrement supérieure à la taille de l’image de départ. Je l’ai ensuite placée en couche en mode extraction de grain et l’ai calée au pixel près sur l’image de départ. Une normalisation plus tard, on obtient une image débarrassée du motif :
En mode fusion de grain, on peut aussi récupérer la texture exacte ayant été appliquée sur l’image d’origine.
Appliquée à une image random, cela donne.
Cela n’a abouti à rien concernant le challenge, mais c’est un skill toujours bon à prendre.
La couche rouge
On a déjà prouvé que la ligne 310 de la couche rouge contenait un fichier encodé sur le dernier bit de données.
Cette image est issue de la comparaison des couches rouge et vert.
Légende :
rouge : la valeur du canal rouge est 1 bit inférieure à celle du canal vert
vert : la valeur du canal rouge est 1 bit supérieure à celle du canal vert
gris : valeur du canal rouge égale à celle du canal vert
noir : valeur du canal rouge égale à celle du canal vert, et la valeur du canal vert est à zéro
blanc : valeur du canal rouge égale à celle du canal vert, et la valeur du canal vert est à 255 (maximum)
On remarque ici que la valeur du canal rouge varie en +1 et -1 bits par rapport au canal vert. C’est très symptomatique d’une information stockée sur le LSB d’un canal. En effet, le remplacement arbitraire du dernier bit provoque une modification de la valeur décimale comprise entre -1 et 1. En creusant un peu plus, on peut constater que ce remplacement n’est arbitraire : certaines valeurs passant par exemple de 11011111 à 11100000, alors qu’il aurait été plus simple de mettre 11011110).
En analysant en détail, on remarque trois cas :
passage du lsb de 0 à 1 : +1
passage du lsb de 1 à 0 (si l’octet de départ différent de 11111111) : +1
passage du lsb de 1 à 0 (si l’octet de départ vaut 11111111) : -1
Quand on regarde le tableau du bas de l’image, on constate aussi des différences entre les canaux rouge et vert, mais d’une forme très différente :
Nous n’avons que des variations de -1 bit pour le canal rouge. Si une information est stockée ici, elle ne l’est pas de la même manière que pour la ligne 310. Le fait qu’il n’y ait pas de variation de +1 par rapport au canal de référence pourrait laisser penser qu’un LSB à 0 n’a jamais été remplacé par un 1 (+1), mais ce n’est pas le cas. On trouve des altérations du type : 10010000 -> 10001111 (qui correspond bien à -1).
On constate aussi que les variations sont beaucoup moins régulières. Ces variations ponctuelles cherchent-elles à mettre en évidence des valeurs particulières sur les pixels du canal de référence ?
Le vidéoprojecteur Hitachi ED-A101 est un système datant de 2008. Il offre une portée ultra courte permettant un affichage d’une diagonale de 150 cm sur un écran situé à une quarantaine de centimètres. Il a été massivement utilisé vers la fin des années 2000, notamment dans des universités européennes.
Ce modèle présente une faille de conception qui a causé la panne de bon nombre d’appareils avant même la fin de vie de la lampe qu’il contient (estimée entre 3000 et 4000 heures). Celle-ci se trouve au niveau du système de motorisation du clapet d’ouverture et de fermeture du miroir.
Au niveau de ce clapet, une roue en plastique sensée entraîner l’axe métallique transversal solidaire du miroir s’use prématurément.
(source photo: vendeur ebay radadragon)
(source photo: vendeur ebay radadragon)
Hitachi a partiellement reconnu le vice de conception en permettant aux personnes concernées par le problème d’obtenir un moteur de rechange pendant 5 ans après la date d’achat (la garantie initiale était de 3 ans). D’après mes recherches, le bloc moteur de remplacement était identique à celui d’origine, donc voué à tomber à nouveau en panne.
De ce fait, des milliers de vidéoprojecteurs de ce modèle (et d’autres de la marque équipés du même dispositif d’ouverture) ont été mis à la benne. Des milliers de vidéoprojecteurs vendus initialement autours de 2500 dollars jetés en raison de la défaillance d’une petite roue en plastique de moins d’1 centimètre de diamètre…
Mais en quoi la panne du mécanisme d’ouverture rend-elle le projecteur inutilisable ? Après tout, la trappe pourrait parfaitement être ouverte manuellement. C’est là que l’affaire se corse. Le vidéoprojecteur se met en erreur dès qu’il détecte un problème d’ouverture du miroir, et ce mécanisme est quant à lui extrêmement abouti. Un interrupteur de position va détecter quand le miroir est en début et en fin de course. De plus, le vidéoprojecteur va analyser la charge du moteur pour déterminer que le miroir est en fin de course ; il va détecter quand ça “force” (sans doute une des sources du problème d’usure). Difficile donc de faire croire au vidéoprojecteur que le mécanisme d’ouverture du miroir est fonctionnel en l’ouvrant à la main.
Du fait de la popularité de ce modèle lors de sa commercialisation, beaucoup de personnes se sont penchées sur le sujet. On peut ainsi trouver :
Le service ActiveSync d’Office365 présente une faille permettant de vérifier la validité des adresses mail d’un domaine (si l’adresse mail est utilisée en tant qu’identifiant). Les retours HTTP sont en effet différents en fonction de l’existence ou non d’un identifiant spécifique.
Prévenu par l’auteur fin juin 2017, Microsoft n’a pas jugé ce problème suffisamment critique pour prévoir un correctif.
L’url ActiveSync d’Office365 (https://outlook.office365.com/Microsoft-Server-ActiveSync) ne semble par ailleurs pas être protégée par un système de throttling permettant d’éviter les requêtes trop nombreuses sur une période donnée, ce qui laisse la porte ouverte à une exploitation massive.
Installation d’un noeud lightning mainnet bitcoind (au lieu de btcd) + lnd 0.4-beta sous Ubuntu 16.04.3 server
Pour n’oublier aucune étape, je suis parti d’une machine virtuelle avec une installation vierge et à jour de la distribution. Rien d’autre n’a été installé hormis les groupes logiciels :
standard system utilities
OpenSSH server
Bitcoind
Installation
sudo apt-add-repository ppa:bitcoin/bitcoin
# appyer sur entrée pour accepter l'avertissementsudo apt-get update
sudo apt-get install bitcoind
git clone https://github.com/lightningnetwork/lnd $GOPATH/src/github.com/lightningnetwork/lnd
cd$GOPATH/src/github.com/lightningnetwork/lnd
dep ensure
go install. ./cmd/...
La méthode la plus souple pour mettre à jour une infra Zimbra consiste généralement à installer de nouveaux stores sous la nouvelle version, et à migrer progressivement les boîtes mail vers ces nouveau stores. Dans mon cas d’usage, cette méthode à permis de migrer un peu plus de 12000 comptes de stores en version 8.6.0 GA vers la version 8.7.11 GA, en période de production, sans qu’aucun utilisateur ne s’en rende compte.
Comment procéder une fois que les stores d’origine sont vides ?
Dans cet exemple, nous allons supprimer un store nommé zstoreX, sur le domaine domaine.tld.
Préalable
S’assurer que le store n’est pas dans le “pool de serveurs” d’une des COS existantes.
Vérifier qu’il n’y a plus aucun compte sur le store via une recherche : ‘‘(zimbraMailHost=zstoreX.domaine.tld)’’
Vérifier qu’il n’y a plus de sauvegardes utiles sur le store concerné (on a donc laissé le store vide actif le temps que toutes les sessions de sauvegarde en rétention soient vides).
Suppression des références à zstoreX
On va vérifier, sur chaque serveur de l’infra, s’il y a des reférences à zstoreX dans les configurations locales :
Config locale
zmlocalconfig | grep zstoreX
Config serveur
zmprov gs $(zmhostname) | grep zstoreX
On regarde ensuite dans la configuration du domaine :
Config domaine
zmprov gd domaine.tld | grep zstoreX
Ensuite on regarde dans la config globale :
zmprov gacf | grep zstoreX
On découvre normalement que les attributs concernés sont :
zimbraReverseProxyAvailableLookupTargets
zimbraReverseProxyUpstreamLoginServers
Celà va evidemment varier selon l’infra.
Notons que zmprov gs remonte les attributs serveurs et ceux hérité de la config globale, mais on va quand meme s’assurer de supprimer une éventuelle config locale de ces attributs, sur toutes les machines de l’infra :
zmprov ms `zmhostname`-zimbraReverseProxyAvailableLookupTargets zstoreX.domaine.tld
zmprov ms `zmhostname`-zimbraReverseProxyUpstreamLoginServers zstoreX.domaine.tld
Ensuite on modifie la config globale, uniquement sur un serveur :
Sur zstoreX, récupérer la liste des services activés :
zmprov gs `zmhostname` zimbraServiceEnabled
et les désactiver (adapter cette liste au retour de la commande précédente) :
zmprov ms `zmhostname`-zimbraServiceEnabled service
zmprov ms `zmhostname`-zimbraServiceEnabled zimbra
zmprov ms `zmhostname`-zimbraServiceEnabled zimbraAdmin
zmprov ms `zmhostname`-zimbraServiceEnabled zimlet
zmprov ms `zmhostname`-zimbraServiceEnabled mailbox
zmprov ms `zmhostname`-zimbraServiceEnabled convertd
zmprov ms `zmhostname`-zimbraServiceEnabled stats
zmprov ms `zmhostname`-zimbraServiceEnabled spell
Suppression du store
A lancer sur un serveur de l’infra :
zmprov deleteServer zstoreX.domaine.tld
La commande retournera une erreur si le store n’est pas totalement vide.
Il devrait avoir disparu de tous les stores/serveurs quand on effectue un :
Cutycapt est un outil basé sur Qt qui permet d’effectuer des captures d’écran de sites web. Par défaut il capture l’intégralité de la page mais on peut facilement cropper et redimensionner l’image générée pour obtenir une vignette de prévisualisation d’un site web.
while read a
do
cutycapt --url=http://$a--out=$a.png
convert -resize 240 -crop 240x180+0+0 $a.png $a.png
done < url-list.txt
Installation d’un nœud lightning bitcoind (au lieu de btcd) + lnd sous Ubuntu 16.04.3 server
Pour n’oublier aucune étape, je suis parti d’une machine virtuelle avec une installation vierge et à jour de la distribution. Rien d’autre n’a été installé hormis les groupes logiciels :
standard system utilities
OpenSSH server
Bitcoind
Installation
sudo apt-add-repository ppa:bitcoin/bitcoin
# appyer sur entrée pour accepter l'avertissementsudo apt-get update
sudo apt-get install bitcoind
Une fois n’est pas coutume, une petite astuce Windows pour pouvoir créer dans
la barre de lancement rapide un raccourci qui lance l’économiseur d’écran
(un écran noir). Un simple mouvement de souris permettra de sortir de ce mode.
Ce besoin m’a été communiqué par une orthophoniste qui souhaitait pouvoir
éteindre temporairement son écran (déporté) lorsqu’il n’était pas nécessaire,
pour ne pas déconcentrer ses patients.
Le fichier permettant de lancer l’économiseur d’écran est :
C:\Windows\System32\scrnsave.scr
Petite subtilité cependant : Windows n’accepte pas que l’on place un
raccourci vers un fichier .scr dans la barre de lancement rapide.
On choisit donc de créer un nouveau raccourci sur le bureau, et
d’indiquer la cible :
Installation d’un nœud lightning bitcoind (au lieu de btcd) + lnd sous Ubuntu 16.04.3 server
17/01/2018 : Le support bitcoind ayant été intégré à la branche MASTER de lnd, cette doc n’est plus à jour. Une nouvelle version est disponible ici.
Pour n’oublier aucune étape, je suis parti d’une machine virtuelle avec une installation vierge et à jour de la distribution. Rien d’autre n’a été installé hormis les groupes logiciels :
standard system utilities
OpenSSH server
Bitcoind
Installation
sudo apt-add-repository ppa:bitcoin/bitcoin
# appyer sur entrée pour accepter l'avertissementsudo apt-get update
sudo apt-get install bitcoind
Cette procédure a été réalisée sur un Raspberry Pi 1 Modele B+
tournant sous Raspian stretch lite.
Ce Raspberry est doté d’un CPU mono-cœur cadencé à 700 MHz, et de 512 Mo de RAM.
Il s’agit plus ici de s’amuser que d’obtenir un nœud Lightning fonctionnel ;
nous sommes aux limites de ce que peut supporter un machine aussi modeste.
La blockchain a été au préalable téléchargée depuis une autre machine, puis mise à
disposition du Raspberry via un partage NFS.
Prérequis
Augmentation de la swap à 1 Go via /etc/dphys-swapfile :
CONF_SWAPSIZE=1000
Prise en compte du changement :
sudo /etc/init.d/dphys-swapfile restart
Allocation de mémoire GPU au minimum via /boot/config.txt :
Durant mes multiples essais, j’ai obtenu à plusieurs reprises une erreur
out of memory à ce moment précis. L’augmentation de la swap (détaillée
en début d’article) a corrigé le problème. Avec un Pi doté d’un Go de RAM,
il n’y a sans doute pas de problème.
Si on relance lnd par la suite, il faudra déverrouiller le wallet via :
lncli unlock
Génération d’une adresse Bitcoin
lncli newaddress np2wkh
Bien noter cette adresse car elle ne sera pas affichée ultérieurement.
Tmux est un multiplexeur de terminaux ; il permet d’afficher plusieurs terminaux virtuels
dans un seul terminal. Tmux peut par ailleurs être détaché d’une session pour fonctionner
en arrière-plan (à la manière de screen).
Quelques commandes à connaître
Commande
Action
tmux
lancer tmux
CTRL-b d
se détacher de tmux
tmux -a
se rattacher un tmux détaché
CTRL-b “
diviser un terminal horizontalement
CTRL-b %
diviser un terminal verticalement
CTRL-b flèche
changer de fenêtre (dans la direction indiquée)
CTRL-b c
créér un nouvel onglet
CTRL-b p
aller à l’onglet précédent (previous)
CTRL-b n
aller à l’onglet suivant (next)
CTRL-b ‘
aller à un onglet en fonction de son numéro
CTRL-b ,
nommer un onglet
CTRL-b x
fermer une fenêtre
CTRL-b z
Zoom sur le terminal actif (et en sortir)
CTRL-b espace
changer la disposition des fenêtres (essayer plusieurs fois de suite)
CTRL-b page-haut
remonter dans l’historique de la fenêtre
CTRL-b page-bas
descendre dans l’historique de la fenêtre
CTRL-b !
déplacer le terminal actif dans un nouvel onglet
Echap
sortir du défilement de l’historique
Astuce perso
Je rajoute dans mon fichier ~/.tmux.conf la configuration suivante :
unbind s
bind s set-g synchronize-panes
Ainsi, il me suffit de taper CTRL-b s pour activer la saisie simultanée dans toutes les fenêtres affichées.
On peut ensuite la désactiver en retapant CTRL-b s
Mise en cache des identifiants de connexion a GitHub (par exemple) dans le cas d’une connexion via un couple identifiant / mot de passe (et non par clé SSH)
git config --global credential.helper cache
Par défaut, le mot de passe est mis en cache pendant 15 minutes. Pour augmenter ce délai à une heure :
Le système de fichier exFAT a l’avantage de fonctionner correctement sur tous
les OS, sans trop de bricolage. Sous Linux, il sera notamment bien moins gourmand
en CPU que NTFS, et il acceptera aussi parfaitement les fichier de plus de 4 Go.
Installer les outils exfat
sudo apt-get install exfat-fuse
Créer la partition avec fdisk, et choisir le type de partition 11 (Microsoft basic
data)
fdisk /dev/sdN
Formater la partition et lui attribuer une étiquette (label), ici “NomDuDisque” :
Cette procédure a été effectuée sur un Linux Ubuntu Server 16.04.3 LTS. Prévoir assez d’espace disque pour héberger un full node Bitcoin testnet (le 27/12/2017, la blockchain prenait 15,3 Go).
Il s’agit globalement d’une traduction très épurée de cette documentation.
Prérequis
Installation de Go et git :
sudo apt-get install golang-1.9 git
Mise à jour du PATH (potentiellement à rajouter dans ~/.bashrc):