mercredi 7 janvier 2026

A worker was found in a dead state

Nouvelle joie de MacOS... Oui je sais, j'ai qu'à installer Linux. Mais non.

Je bossais tranquillement sur un playbook Ansible ce matin quand, tout à coup, le drame !

[ERROR]: A worker was found in a dead state

Mais que vais-je faire ? Comment vais-je survivre ? Quel avenir vais-je laisser à mes enfants ?
Et bien figure-toi, encore une fois : ça n'arrive pas sur Linux et c'est visiblement récurrent sur MacOS. Mais on aune solution !

Il suffit de lancer son playbook avec la variable d'environnement OBJC_DISABLE_INITIALIZE_FORK_SAFETY à yes :

OBJC_DISABLE_INITIALIZE_FORK_SAFETY=yes ansible-playbook ...

En gros, si j'ai bien compris (rien de sûr), c'est dû à l'utilisation de la méthode python fork() qui permet de créer un nouveau processus. Sauf que sur MacOS, si la bibliothèque utilisée n'est pas "fork-safe", alors l'OS t'envoie balader avec un plantage ou un deadlock.

Voilà, enjoy, même si c'est pas optimal.

lundi 27 mai 2024

Une seconde vie pour le vieux MacBook Air

Comme toute machine vieillissante, mon MacBook Air début 2015 est devenu inutilisable au fil du temps.

Le matériel fonctionne pourtant correctement et comme toujours j'ai du mal à me dire qu'il faut que je le jette. J'ai donc décidé d'essayer de lui donner une seconde vie avec une distribution Linux (Manjaro ici) et un environnement léger, i3wm.

Regardons comment faire.


On récupère l’image iso depuis le site voulu :

$ cd ~/Downloads
$ wget https://download.manjaro.org/i3/23.0.1/manjaro-i3-23.0.1-230921-linux65.iso

On liste les disques présents pour identifier la clé usb concernée, ainsi que son identifiant :

$ diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.3 GB   disk0
   1:             Apple_APFS_ISC Container disk1         524.3 MB   disk0s1
   2:                 Apple_APFS Container disk3         494.4 GB   disk0s2
   3:        Apple_APFS_Recovery Container disk2         5.4 GB     disk0s3

/dev/disk3 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +494.4 GB   disk3
                                 Physical Store disk0s2
   1:                APFS Volume Macintosh HD            13.5 GB    disk3s1
   2:              APFS Snapshot com.apple.os.update-... 13.5 GB    disk3s1s1
   3:                APFS Volume Preboot                 12.3 GB    disk3s2
   4:                APFS Volume Recovery                1.9 GB     disk3s3
   5:                APFS Volume Data                    405.8 GB   disk3s5
   6:                APFS Volume VM                      4.3 GB     disk3s6

/dev/disk5 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                                                   *8.0 GB     disk5

Une fois identifiée, on efface la clé usb. Dans mon cas, il s'agit de disk5.

$ diskutil secureErase 1 disk5
Started erase on disk5
Finished erase on disk5

L'option secureErase permet, comme son nom l'indique, d'effacer le disque en utilisant une méthode sécurisée avec un niveau qui peut être défini. Ici, 1 signifie qu'il y aura une passe unique d'écriture de données aléatoires.

On crée ensuite l'image au format .dmg qui ira sur la clé USB :

$ hdiutil convert ~/Downloads/manjaro-i3-23.0.1-230921-linux65.iso -format UDRW -o ~/Downloads/manjaro-i3
Lecture de Master Boot Record (MBR : 0)…
Lecture de MANJARO_I3_2301                  (Apple_ISO : 1)…
.....................................................................................................................................
Lecture de  (Type EF : 2)…
.....................................................................................................................................
Temps écoulé :  3.926s
Vitesse : 870.3 Mo/s
Compression : 0.0%
created: /Users/xakan/Downloads/manjaro-i3.dmg

Notez que l'extension de l'image de sortie n'est pas définie dans le nom du fichier à générer.

Dans notre cas, UDRW signifie qu'on veut une image UDIF avec la possibilité de lire/écrire. UDIF signifiant Apple Mac OS X Universal Disk Image Format.

On démonte ensuite la clé :

$ diskutil unmountDisk /dev/disk5
Unmount of all volumes on disk5 was successful

Enfin, on copie le .dmg sur la clé avec la commande dd.

$ sudo dd if=/Users/xakan/Downloads/manjaro-i3.dmg of=/dev/disk5 bs=1m
Password:
3416+1 records in
3416+1 records out
3582824448 bytes transferred in 970.109954 secs (3693215 bytes/sec)

Alors oui, l'écriture a été très longue, mais c'est pas le sujet, la clé est très vieille !

Maintenant, on redémarre en restant appuyé sur Alt et le tour est joué.

lundi 28 août 2023

Désinstaller Node.js sur MacOS

Pour un projet personnel, j'ai dû installer Node.js. Mais j'ai eu la mauvaise idée de l'installer à partir du fichier .pkg fourni sur le site de Node.js.


Ce fichier .pkg ne propose aucune option de désinstallation, et l'application de se retrouve pas dans le dossier Applications qui permet de procéder à une désinstallation par glisser/déposer dans la corbeille.

Ainsi, j'ai dû creuser un peu pour pouvoir désinstaller correctement Node.js et npm. Voici les étapes à suivre :

$ sudo npm uninstall npm -g
$ sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.*
$ sudo rm -rf /usr/local/include/node /Users/$USER/.npm
$ sudo rm /usr/local/bin/node
$ sudo rm /usr/local/share/man/man1/node.1
$ sudo rm /usr/local/lib/dtrace/node.d

Ceci permet ensuite de l'installer avec Homebrew, le gestionnaire de paquets pour MacOS que je déteste :

$ brew install node