Aller au contenu

Migrer de Linux à macOS

Migration Linux vers MacOS

Cela fait maintenant plusieurs mois que j’ai dû troquer mon poste Linux contre un MacBook Air M1. Cette migration n’était pas un choix personnel, mais une nécessité imposée par mon employeur, qui a opté pour des machines macOS au détriment des traditionnels PC Intel. Le changement n’a pas été simple. Comme beaucoup d’utilisateurs Linux, je me suis retrouvé face à un système à la fois familier, grâce à ses racines Unix et profondément différent dans ses détails.

Dans ce billet, je partage mon expérience et les solutions que j’ai trouvées pour maîtriser les spécificités de macOS, en particulier pour ceux qui, comme moi, sont habitués à un environnement Linux. Mon objectif est de vous aider à faire cette transition de manière fluide et efficace, en exploitant au mieux les outils et les particularités de macOS.

Présentation de l’environnement macOS

macOS, en tant que système d’exploitation, repose sur une base Unix similaire à celle de Linux, ce qui offre un certain degré de familiarité pour ceux qui migrent depuis un environnement Linux. Cependant, il existe des différences notables qui nécessitent une adaptation.

Tout d’abord, l’architecture de macOS inclut des composants uniques comme launchd pour la gestion des services, remplaçant systemd que l’on trouve couramment sur Linux. Les utilisateurs venant de Windows devront s’habituer à un système basé sur Unix, où l’utilisation du Terminal joue un rôle central dans l’administration et la configuration du système.

Le shell par défaut, zsh, remplace bash depuis macOS Catalina, apportant des fonctionnalités supplémentaires tout en modifiant certains comportements par défaut. macOS propose également un ensemble de commandes Unix standard, mais avec des variations et des outils spécifiques qui peuvent différer de ceux de Linux. Il est également important de comprendre l’organisation des fichiers et des permissions, qui bien que similaire à Linux, présente des distinctions importantes, notamment dans la gestion des droits d’administrateur avec sudo.

Enfin, macOS utilise un système de gestion des applications et des packages différent, avec Homebrew servant de gestionnaire de packages principal, remplaçant les outils comme apt ou yum sur Linux. Cela permet d’installer facilement des applications et des outils de développement, mais nécessite une familiarisation avec ses commandes et ses options.

Le clavier du MacBook

Lorsque vous passez de Linux à macOS, l’un des premiers ajustements concerne le clavier. Les claviers macOS, en particulier les versions AZERTY utilisées par les francophones, présentent des différences notables par rapport aux claviers Linux classiques. Je vais détailler les touches spécifiques à macOS, les combinaisons pour taper des caractères spéciaux, et quelques raccourcis essentiels pour améliorer votre productivité.

Les touches principales

Sur un clavier macOS, les touches Command (⌘), Option (⌥) et Control (^) sont des éléments clés à comprendre.

  • Command (⌘) : équivalent de la touche Control sous Linux pour de nombreux raccourcis clavier. Par exemple, pour copier un texte, vous utilisez Command + C sur macOS au lieu de Control + C sur Linux.
  • Option (⌥) : permet d’accéder à des caractères spéciaux et agit comme un modificateur pour les raccourcis. Par exemple, Option + E permet d’ajouter un accent aigu sur une voyelle (é).
  • Control (^) : bien qu’elle soit moins utilisée dans les raccourcis courants, elle reste essentielle pour les commandes du Terminal, comme Control + C pour interrompre un processus en cours.

Accéder aux caractères spéciaux

Les caractères spéciaux, souvent utilisés en DevOps, comme le pipe |, le tilde ~, ou les crochets [ ], sont accessibles via des combinaisons de touches spécifiques sur macOS.

Voici quelques combinaisons courantes pour un clavier AZERTY :

  • Pipe (|) : Option + Shift + L
  • Tilde (~) : Option + N, puis espace
  • Crochets ([ ]) : Option + Shift + ( ou )
  • Accolades ({ }) : Option + ( ou )
  • Antislash (\) : Option + Shift + /

Ces combinaisons peuvent différer légèrement selon la configuration du clavier. Il est donc utile de les connaître pour éviter les interruptions de flux de travail.

Personnaliser le clavier et les raccourcis

macOS permet de personnaliser les raccourcis clavier pour les adapter à vos besoins spécifiques. Par exemple, vous pouvez créer un raccourci pour ouvrir le Terminal rapidement ou pour exécuter une commande spécifique fréquemment utilisée.

Pour ajouter ou modifier des raccourcis, allez dans Préférences Système > Clavier > Raccourcis. Vous pouvez également utiliser des applications tierces comme Karabiner-Elements pour un remapping plus avancé.

  1. Préférences Système > Clavier > Raccourcis > Services
  2. Ajouter un raccourci pour “Ouvrir le Terminal”

Le clavier virtuel

Si vous avez du mal à retrouver certains caractères, vous pouvez utiliser le clavier virtuel de macOS pour visualiser l’emplacement des caractères spéciaux. Pour l’activer, allez dans Préférences Système > Clavier > Afficher les visualiseurs de clavier et d’emoji dans la barre de menus.

En cliquant sur l’icône du clavier dans la barre de menus, vous pouvez afficher un clavier virtuel qui montre les caractères accessibles via différentes combinaisons de touches.

Le Terminal de macOS

Pour un utilisateur déjà familier avec les commandes Linux, le Terminal de macOS offre une expérience similaire, mais avec quelques particularités qu’il est important de connaître pour tirer pleinement parti de l’environnement macOS.

Les raccourcis clavier du Terminal

Le Terminal de macOS offre une série de raccourcis pour naviguer et manipuler les commandes plus efficacement. Voici quelques raccourcis que j’utilise régulièrement :

  • Déplacement du curseur :

    • Option + flèche gauche/droite : déplacer le curseur d’un mot à l’autre.
    • Control + a : aller au début de la ligne.
    • Control + e : aller à la fin de la ligne.
  • Effacer des caractères :

    • Control + U : effacer tout le texte avant le curseur.
    • Control + K : effacer tout le texte après le curseur.
  • Historique des commandes :

    • Control + R : rechercher dans l’historique des commandes.
    • et : parcourir l’historique des commandes.

Shell par défaut

Depuis macOS Catalina, le shell par défaut est zsh (Z Shell), contrairement à bash qui est souvent le shell par défaut sur la plupart des distributions Linux. Bien que zsh soit compatible avec de nombreuses commandes bash, il propose des fonctionnalités avancées comme la complétion automatique améliorée, la gestion des globbing étendue et un support intégré pour les plugins. Cependant, si vous préférez bash, il est toujours possible de revenir à celui-ci via Homebrew.

Terminal window
# Installer bash via Homebrew
brew install bash
# Changer le shell par défaut pour bash
chsh -s /usr/local/bin/bash

Commandes Unix avec des options différentes

Les commandes Unix standard fonctionnent en grande partie de la même manière sur macOS, mais certaines ont des options par défaut différentes. Par exemple, la commande ls sur macOS n’affiche pas les couleurs par défaut, comme elle le ferait sur certaines distributions Linux. Pour obtenir une sortie colorée, vous devez spécifier l’option -G ou créer un alias.

Terminal window
# Alias pour ls avec options colorées
alias ls='ls -G'

De même, la commande du (disk usage) produit des sorties en bloc de 512 octets par défaut, au lieu des kibioctets (1024 octets) souvent utilisés sous Linux. Pour afficher la taille des fichiers de manière plus lisible, utilisez l’option -h (human-readable).

Terminal window
# Affichage lisible de l'usage du disque
du -sh *

Commandes spécifiques à macOS

Bien que macOS soit basé sur Unix et partage de nombreuses commandes avec Linux, certaines commandes sur macOS ont des comportements, des options ou des alternatives spécifiques qu’il est nécessaire de connaître pour optimiser votre travail en Terminal. Dans ce chapitre, je vais me concentrer sur ces particularités pour vous aider à naviguer efficacement dans l’environnement macOS.

diskutil : Gestion des disques

Contrairement à Linux, où des outils comme fdisk, parted, ou lsblk sont utilisés pour gérer les disques et les partitions, macOS utilise la commande diskutil pour la gestion des disques. diskutil est un outil puissant permettant de gérer les disques physiques et logiques, les partitions et les volumes de manière intégrée à macOS.

Terminal window
# Lister tous les disques disponibles
diskutil list
# Formater un disque
diskutil eraseDisk HFS+ NomDuDisque /dev/disk2
# Monter ou démonter un volume
diskutil unmount /dev/disk2s1
diskutil mount /dev/disk2s1

networksetup : Gestion des réseaux

Bien que ifconfig soit disponible sur macOS, comme sur Linux, macOS inclut également la commande networksetup, qui fournit des fonctionnalités supplémentaires pour la gestion des réseaux. networksetup permet de configurer les interfaces réseau, gérer les réseaux Wi-Fi et configurer les proxys directement depuis le Terminal.

Terminal window
# Lister toutes les interfaces réseau disponibles
networksetup -listallhardwareports
# Configurer manuellement une adresse IP
networksetup -setmanual "Wi-Fi" 192.168.1.100 255.255.255.0 192.168.1.1
# Se connecter à un réseau Wi-Fi spécifique
networksetup -setairportnetwork en0 "NomDuRéseau" "MotDePasse"

say : Synthèse vocale

Une commande unique à macOS est say, qui utilise la synthèse vocale intégrée du système pour lire à haute voix du texte directement depuis le Terminal. Bien que cette commande ne soit pas essentielle pour les tâches DevOps, elle peut être utilisée de manière créative pour des notifications ou des alertes dans des scripts.

Terminal window
# Lire un texte à haute voix
say "Votre script est terminé"

Gestion des packages système avec installer

Sur macOS, l’installation de fichiers .pkg ou .dmg se fait généralement via une interface graphique. Cependant, pour automatiser les installations, vous pouvez utiliser la commande installer dans le Terminal. Cette commande permet d’installer des packages en ligne de commande, ce qui est utile pour le déploiement automatisé de logiciels.

Terminal window
# Installation d'un package .pkg
sudo installer -pkg /chemin/vers/package.pkg -target /

csrutil : Gestion du SIP (System Integrity Protection)

macOS inclut une fonctionnalité de sécurité appelée System Integrity Protection (SIP), qui limite les actions que l’utilisateur root peut effectuer sur certaines parties du système. La commande csrutil permet de vérifier et de désactiver ou réactiver SIP, mais elle ne peut être utilisée qu’à partir du mode de récupération.

Terminal window
# Vérifier l'état de SIP
csrutil status
# Désactiver SIP (nécessite de redémarrer en mode récupération)
csrutil disable

Gestion des utilisateurs et permissions

macOS gère les utilisateurs et les permissions de manière similaire à Linux, mais avec certaines spécificités. Par exemple, l’utilisation de sudo pour exécuter des commandes avec des privilèges administratifs est similaire, mais le fichier /etc/sudoers sur macOS est configuré de manière légèrement différente, avec des règles spécifiques pour le groupe admin. Les permissions par défaut sur les répertoires système peuvent également différer, ce qui peut affecter l’installation de logiciels ou l’accès à certains fichiers.

Terminal window
# Modifier le fichier sudoers sur macOS
sudo visudo

En outre, macOS utilise des attributs de fichiers spécifiques, tels que les extended attributes (ou xattr), qui permettent d’ajouter des métadonnées à des fichiers, comme la sécurité ou des propriétés spécifiques à macOS. La commande xattr vous permet de manipuler ces attributs.

Terminal window
# Lister les extended attributes d'un fichier
xattr -l fichier.txt

Homebrew

Homebrew est le gestionnaire de packages le plus populaire sur macOS, souvent comparé à apt sur Debian/Ubuntu ou yum sur CentOS. Il permet d’installer, de mettre à jour et de gérer des logiciels, des bibliothèques, et même des applications GUI directement depuis le Terminal. Son adoption est essentielle pour tout utilisateur de macOS souhaitant maintenir un environnement de développement flexible et à jour. Dans ce chapitre, je vais expliquer en détail comment installer et utiliser Homebrew pour gérer vos packages et applications sur macOS.

Installation de Homebrew

L’installation de Homebrew est simple et rapide. Vous pouvez l’installer en exécutant une seule commande dans le Terminal. Cette commande télécharge et configure automatiquement Homebrew sur votre système.

Terminal window
# Commande d'installation de Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Une fois l’installation terminée, il est recommandé de suivre les instructions affichées pour ajouter Homebrew à votre PATH. Cela permet d’accéder à la commande brew depuis n’importe quel répertoire dans le Terminal.

Terminal window
# Ajouter Homebrew au PATH
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

Recherche et exploration de packages

Homebrew dispose de milliers de packages et il est facile de rechercher ce dont vous avez besoin avec la commande brew search. Vous pouvez utiliser cette commande pour explorer les packages disponibles avant de les installer.

Terminal window
# Rechercher un package ou une application
brew search git
brew search --cask google-chrome

Pour obtenir plus d’informations sur un package spécifique, y compris les versions disponibles et les options d’installation, vous pouvez utiliser brew info.

Terminal window
# Obtenir des informations détaillées sur un package
brew info git

Installation des packages

Homebrew fonctionne en installant des formules (formulas) qui sont essentiellement des scripts Ruby décrivant comment installer un logiciel. Pour installer un package, il suffit d’utiliser la commande brew install suivie du nom du package souhaité.

Terminal window
# Installer un package, par exemple Git
brew install git

Homebrew installe les packages dans un répertoire dédié (/usr/local/Cellar pour les systèmes basés sur Intel ou /opt/homebrew/Cellar pour les systèmes Apple Silicon), puis crée des liens symboliques dans /usr/local/bin (ou /opt/homebrew/bin). Cela permet de maintenir le système macOS propre et facile à gérer, car tout ce qui est installé via Homebrew peut être facilement identifié et supprimé si nécessaire.

Gestion des dépendances

Une des forces de Homebrew est sa gestion automatique des dépendances. Lorsqu’un package nécessite d’autres logiciels pour fonctionner, Homebrew les installe automatiquement. Par exemple, si vous installez Node.js, Homebrew installera également toutes les bibliothèques nécessaires pour faire fonctionner Node.js correctement.

Terminal window
# Exemple d'installation avec dépendances
brew install node

Homebrew garde également une trace des dépendances installées, ce qui permet de les supprimer automatiquement lorsque vous désinstallez un package.

Terminal window
# Désinstaller un package et ses dépendances
brew uninstall --ignore-dependencies node
brew autoremove

Mise à jour des packages

Garder vos outils à jour est essentiel pour la sécurité et la compatibilité. Homebrew facilite la mise à jour des packages installés avec la commande brew upgrade.

Terminal window
# Mettre à jour tous les packages installés
brew upgrade

Avant de mettre à jour vos packages, vous pouvez d’abord mettre à jour Homebrew lui-même pour vous assurer que vous disposez de la dernière version des formules et des scripts d’installation.

Terminal window
# Mettre à jour Homebrew
brew update

Gestion des casks : Installation d’applications GUI

En plus des outils en ligne de commande, Homebrew prend également en charge l’installation d’applications graphiques via les casks. Les casks sont des formules spécialement conçues pour les applications GUI macOS, telles que Google Chrome, Visual Studio Code, ou Docker Desktop.

Terminal window
# Installer une application GUI, par exemple Visual Studio Code
brew install --cask visual-studio-code

Les casks sont installés dans le dossier /Applications, ce qui les rend accessibles comme n’importe quelle autre application macOS.

Terminal window
# Mettre à jour une application installée avec cask
brew upgrade --cask visual-studio-code
# Désinstaller une application installée avec cask
brew uninstall --cask visual-studio-code

Nettoyage et gestion de l’espace disque

Avec le temps, Homebrew peut accumuler des fichiers temporaires, des caches et des versions obsolètes de packages, ce qui peut prendre de la place sur votre disque. Heureusement, Homebrew inclut des outils pour nettoyer votre système et libérer de l’espace.

Terminal window
# Nettoyer les fichiers inutiles
brew cleanup

La commande brew cleanup supprime les anciennes versions des packages, les fichiers de cache et les téléchargements résiduels, libérant ainsi de l’espace disque.

Sécurité et Homebrew

Homebrew vérifie les signatures de hachage et utilise HTTPS pour garantir que les logiciels installés sont authentiques et n’ont pas été altérés. Cependant, il est toujours important de vérifier les sources des formules que vous installez, surtout si vous utilisez des dépôts tiers.

Terminal window
# Ajouter le dépôt tiers Outscale à Homebrew
brew tap outscale/tap

Gestion des versions d’outils DevOps avec asdf-vm

Lorsqu’on travaille dans un environnement DevOps, il est courant de devoir utiliser plusieurs versions d’un même outil ou langage de programmation selon les projets. Sur macOS, l’outil asdf-vm se révèle particulièrement utile pour gérer cette complexité. asdf-vm est un gestionnaire de versions universel qui vous permet d’installer et de gérer plusieurs versions d’outils et de langages, tels que Node.js, Python, Terraform, ou encore Ruby, sur une même machine.

Installation de asdf-vm

Pour installer asdf-vm sur macOS, vous pouvez utiliser Homebrew, qui simplifie l’installation et la gestion des dépendances nécessaires.

Terminal window
# Installer asdf-vm via Homebrew
brew install asdf

Une fois installé, vous devrez ajouter asdf à votre shell pour qu’il soit disponible dans vos sessions de Terminal. Ajoutez les lignes suivantes à votre fichier ~/.zshrc ou ~/.bash_profile selon le shell que vous utilisez :

Terminal window
# Ajouter asdf à votre shell
echo -e '\n. $(brew --prefix asdf)/libexec/asdf.sh' >> ~/.zshrc
source ~/.zshrc

Utilisation de asdf-vm pour gérer les versions

Avec asdf-vm, vous pouvez installer plusieurs versions d’un outil ou langage, les définir au niveau global ou local (pour un projet spécifique), et basculer facilement entre elles.

Installer un plugin

Pour commencer, vous devez installer des plugins pour les outils ou langages que vous souhaitez gérer. Chaque plugin gère les versions d’un outil spécifique.

Terminal window
# Installer un plugin pour Node.js
asdf plugin add nodejs
# Installer un plugin pour Python
asdf plugin add python

Installer une version spécifique d’un outil

Une fois le plugin installé, vous pouvez installer la version de l’outil ou du langage dont vous avez besoin.

Terminal window
# Installer une version spécifique de Node.js
asdf install nodejs 14.17.6
# Installer une version spécifique de Python
asdf install python 3.9.7

Définir une version globale ou locale

Après l’installation, vous pouvez définir la version par défaut (globale) pour tout le système, ou une version spécifique pour un projet (locale).

Terminal window
# Définir la version globale de Node.js
asdf global nodejs 14.17.6
# Définir une version locale de Python pour un projet
asdf local python 3.9.7

Cela vous permet de travailler sur différents projets avec des versions spécifiques des outils sans conflit.

Compléter asdf-vm avec direnv

Pour aller encore plus loin dans la gestion des environnements de développement, vous pouvez utiliser direnv en complément de asdf-vm. direnv permet de charger et décharger automatiquement les variables d’environnement lorsque vous entrez ou quittez un répertoire. Cette intégration est particulièrement puissante pour les projets DevOps où chaque projet peut nécessiter des configurations spécifiques.

J’ai écrit un billet de blog dédié à direnv qui explique en détail comment cet outil fonctionne et comment il peut s’intégrer avec asdf-vm pour créer des environnements de travail encore plus flexibles et adaptés à vos besoins DevOps.

Structure des fichiers et des répertoires

Bien que macOS partage une structure de fichiers semblable à celle de Linux, il y a quelques différences notables, notamment dans l’organisation des répertoires système. Par exemple, les applications sont principalement stockées dans le dossier /Applications, tandis que les bibliothèques sont souvent situées dans /Library au lieu de /usr/lib. Les utilisateurs Linux devront également se familiariser avec les répertoires spécifiques à macOS comme /System et /Volumes.

Structure des répertoires de macOS

La structure des répertoires de macOS, bien qu’elle partage des similarités avec les systèmes Linux en raison de ses racines Unix, possède ses propres spécificités et répertoires uniques. Comprendre cette structure est essentiel pour naviguer efficacement dans le système, gérer les fichiers et les applications et savoir où trouver ou placer les ressources nécessaires.

Voici une vue d’ensemble de la structure des répertoires sous macOS, représentée sous le format du component FileTree d’Astro Starlight :

  • Répertoire/
    • RépertoireApplications/
    • RépertoireLibrary/
    • RépertoireSystem/
    • RépertoireUsers/
    • RépertoireVolumes/
    • Répertoirebin/
    • Répertoiresbin/
    • Répertoireusr/
      • Répertoirebin/
      • Répertoirelib/
      • Répertoirelocal/
    • Répertoirevar/

/ (Racine)

À la racine du système de fichiers, macOS organise ses répertoires principaux. Contrairement à Linux, certains répertoires présents sous Linux, comme /etc, sont traités différemment sous macOS.

/Applications/

Le répertoire /Applications est spécifique à macOS. Il contient la plupart des applications installées, qu’elles soient natives à macOS ou installées par l’utilisateur. Contrairement à Linux où les applications peuvent être réparties dans différents répertoires (/bin, /usr/bin), macOS regroupe tout dans /Applications pour simplifier l’accès et la gestion des applications via le Finder.

  • Répertoire/
    • RépertoireApplications/
      • Safari.app
      • Terminal.app
      • Xcode.app
      • Visual Studio Code.app

Chaque application est en réalité un paquet (package) contenant tous les fichiers nécessaires à son exécution, tels que les ressources, les binaires, et les bibliothèques.

/Library/

Le répertoire /Library contient les fichiers de configuration, les bibliothèques et les ressources partagées par toutes les applications et tous les utilisateurs. C’est l’équivalent de /usr/lib et /etc sous Linux. On y trouve des éléments critiques pour le fonctionnement du système ainsi que des plugins et des extensions pour les applications.

  • Répertoire/
    • RépertoireLibrary/
      • Application Support/
      • RépertoireExtensions/
      • RépertoirePreferences/
      • RépertoireFonts/
  • Application Support/ : Contient les fichiers et dossiers nécessaires au fonctionnement des applications, souvent utilisés pour stocker les configurations des applications et des données utilisateur partagées.
  • Extensions/ : Contient les extensions du système, comme les pilotes matériels.
  • Preferences/ : Contient les fichiers de préférences des applications et du système.

/System/

/System est un répertoire protégé où macOS stocke les composants critiques du système d’exploitation. Contrairement à Linux où les binaires du système sont généralement répartis entre /bin et /sbin, macOS centralise beaucoup de ces éléments dans /System pour protéger l’intégrité du système à travers le System Integrity Protection (SIP).

  • Répertoire/
    • RépertoireSystem/
      • RépertoireLibrary/
      • RépertoireApplications/
      • RépertoireExtensions/
      • RépertoireVolumes/

Les répertoires sous /System ne devraient généralement pas être modifiés par l’utilisateur. Le System Integrity Protection (SIP), une fonctionnalité de sécurité de macOS, protège ces répertoires en interdisant toute modification même avec des privilèges root.

/Users/

Le répertoire /Users contient tous les répertoires utilisateur. Chaque utilisateur de macOS a son propre répertoire sous /Users, où sont stockés les fichiers personnels, les préférences spécifiques et les applications installées uniquement pour cet utilisateur.

  • Répertoire/
    • RépertoireUsers/
      • Répertoirejohndoe/
        • RépertoireDesktop/
        • RépertoireDocuments/
        • RépertoireDownloads/
        • RépertoireLibrary/
        • RépertoirePictures/
  • Desktop/, Documents/, Downloads/ : Répertoires communs pour les fichiers personnels.
  • Library/ : Un répertoire caché spécifique à l’utilisateur qui contient les fichiers de configuration et les ressources pour les applications installées par cet utilisateur uniquement.

/Volumes/

Le répertoire /Volumes est utilisé pour monter tous les volumes externes (comme les clés USB, les disques durs externes, ou les volumes réseau). Chaque périphérique monté est représenté par un répertoire sous /Volumes.

  • Répertoire/
    • RépertoireVolumes/
      • Macintosh HD/
      • RépertoireMyExternalDrive/

Lorsqu’un périphérique de stockage est connecté, il est monté automatiquement sous /Volumes, ce qui permet un accès facile à ses fichiers via le Finder ou le Terminal.

/bin/ et /sbin/

Ces répertoires sont similaires à leurs homologues sous Linux. Ils contiennent les binaires essentiels du système.

  • Répertoire/
    • Répertoirebin/
      • sh
      • ls
      • cp
    • Répertoiresbin/
      • ifconfig
      • route
      • fsck
  • /bin/ : Contient les commandes utilisateur de base disponibles pour tous les utilisateurs.
  • /sbin/ : Contient des outils systèmes et administratifs, souvent réservés à l’utilisateur root.

/usr/

Le répertoire /usr sous macOS est également protégé par SIP et contient des sous-répertoires tels que /usr/bin et /usr/lib, où sont stockés les binaires et les bibliothèques système.

  • Répertoire/
    • Répertoireusr/
      • Répertoirebin/
      • Répertoirelib/
      • Répertoirelocal/
        • Répertoirebin/
        • Répertoirelib/
      • Répertoireshare/
  • /usr/local/ : Ce répertoire est destiné aux applications et packages installés manuellement par l’utilisateur, souvent via Homebrew.
  • /usr/bin/ et /usr/lib/ : Contiennent des binaires et des bibliothèques partagées du système.

/var/

Le répertoire /var contient les fichiers variables du système, comme les logs, les fichiers temporaires et les spoolers. Il est similaire à son équivalent sous Linux.

  • Répertoire/
    • Répertoirevar/
      • Répertoirelog/
      • Répertoiretmp/
      • Répertoiredb/
  • log/ : Contient les fichiers de log du système et des applications.
  • tmp/ : Répertoire pour les fichiers temporaires.
  • db/ : Contient les bases de données utilisées par certains services système.

Gestion des services sur macOS

La gestion des services sur macOS diffère notablement de celle sur Linux. Alors que Linux utilise principalement systemd ou init pour gérer les services, macOS repose sur launchd, un gestionnaire de services natif. Comprendre launchd et les outils associés est essentiel pour administrer efficacement les services sur un système macOS, que ce soit pour démarrer, arrêter, activer ou désactiver des services au démarrage du système.

Introduction à launchd

launchd est le gestionnaire de services intégré à macOS, responsable du démarrage des services au boot du système, de la gestion des processus en arrière-plan et de la gestion des tâches périodiques. Il remplace à la fois init et cron que l’on trouve sur d’autres systèmes Unix.

Les services gérés par launchd sont définis dans des fichiers plist (Property List), qui décrivent comment et quand chaque service doit être lancé, ainsi que les dépendances et autres paramètres essentiels.

Fichiers de configuration des services : les plist

Les fichiers plist (Property List) sont des fichiers XML qui contiennent des configurations pour divers services et démons sous macOS. Ces fichiers se trouvent dans plusieurs répertoires selon leur scope :

  • Répertoire/System/Library/LaunchDaemons/
  • Répertoire/Library/LaunchDaemons/
  • Répertoire/Library/LaunchAgents/
  • Répertoire~/Library/LaunchAgents/
  • /System/Library/LaunchDaemons/ : Contient les services système critiques. Ces services sont protégés par le System Integrity Protection (SIP), et les modifications ici ne sont pas recommandées.
  • /Library/LaunchDaemons/ : Contient les services démarrés en tant que root, disponibles pour tous les utilisateurs.
  • /Library/LaunchAgents/ : Contient les services qui démarrent pour tous les utilisateurs, mais s’exécutent sous les privilèges de l’utilisateur actuel.
  • ~/Library/LaunchAgents/ : Contient les services spécifiques à l’utilisateur, démarrés lors de la connexion de cet utilisateur.

launchctl : l’outil de gestion des services

launchctl est l’outil en ligne de commande utilisé pour interagir avec launchd. Il permet de charger, décharger, démarrer, arrêter et consulter l’état des services gérés par launchd.

Démarrer et arrêter des services

Pour démarrer un service, vous utilisez la commande launchctl load et pour l’arrêter, launchctl unload. Vous devez généralement spécifier le chemin du fichier plist correspondant au service.

Terminal window
# Charger un service
sudo launchctl load /Library/LaunchDaemons/com.example.service.plist
# Décharger un service
sudo launchctl unload /Library/LaunchDaemons/com.example.service.plist

Ces commandes démarrent ou arrêtent le service immédiatement. Si vous voulez qu’un service démarre automatiquement au démarrage du système, vous devez vous assurer que le fichier plist est placé dans l’un des répertoires appropriés comme /Library/LaunchDaemons/.

Gestion des services à la volée

launchctl permet aussi de démarrer ou arrêter des services temporairement, sans les charger ou les décharger de façon permanente :

Terminal window
# Démarrer un service à la volée
sudo launchctl start com.example.service
# Arrêter un service à la volée
sudo launchctl stop com.example.service

Ces commandes sont utiles pour tester des services ou effectuer des opérations de maintenance sans modifier les paramètres de lancement automatique.

Vérifier l’état des services

Pour obtenir la liste des services en cours d’exécution ou vérifier l’état d’un service spécifique, vous pouvez utiliser :

Terminal window
# Lister tous les services en cours
launchctl list
# Vérifier l'état d'un service spécifique
launchctl list | grep com.example.service

Cela vous donne un aperçu de tous les services gérés par launchd, leur état actuel et leurs PID (Process IDs) si applicable.

Automatisation et planification des tâches

launchd remplace également cron pour la planification des tâches sous macOS. Plutôt que d’utiliser un fichier crontab, vous configurez les horaires de déclenchement directement dans les fichiers plist via des clés comme StartCalendarInterval ou StartInterval.

Par exemple, pour exécuter un script tous les jours à 3 heures du matin :

<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>3</integer>
<key>Minute</key>
<integer>0</integer>
</dict>

Cela permet de remplacer les entrées crontab classiques par un système plus intégré et flexible, tout en étant géré par launchd.

Gestion des services tiers

Certains outils et applications tierces peuvent installer leurs propres services sous /Library/LaunchDaemons/ ou /Library/LaunchAgents/. Par exemple, Homebrew installe certains services comme MySQL ou Nginx de cette manière.

Pour gérer ces services, vous pouvez utiliser brew services qui simplifie l’interaction avec launchctl :

Terminal window
# Démarrer un service installé par Homebrew
brew services start mysql
# Arrêter un service
brew services stop mysql
# Voir la liste des services gérés par Homebrew
brew services list

Ce système est particulièrement utile pour les développeurs et administrateurs qui doivent gérer plusieurs services tiers sur macOS.

Résolution des problèmes

Si un service ne se comporte pas comme prévu, vérifiez les logs de launchd pour obtenir des détails sur les erreurs. Ces logs sont disponibles dans Console.app sous /var/log/, ou en utilisant la commande suivante pour des logs en temps réel :

Terminal window
# Afficher les logs de launchd en temps réel
log stream --predicate 'subsystem == "com.apple.launchd"' --info

Analyser ces logs peut vous aider à diagnostiquer et résoudre les problèmes liés aux services.

Conclusion

Passer de Linux à macOS pour un utilisateur de Linux peut sembler intimidant au premier abord, mais avec les bons outils et une compréhension des spécificités du système, cette transition peut être non seulement réussie, mais aussi enrichissante. Nous avons parcouru ensemble les aspects essentiels de macOS, de la gestion des services avec launchd à la personnalisation de zsh, en passant par l’utilisation de Homebrew et de asdf-vm pour gérer les versions des outils DevOps.

Ces mois passés sur macOS m’ont permis de découvrir des outils et des méthodes qui simplifient la gestion quotidienne des projets et des environnements de développement. Cependant, l’apprentissage ne s’arrête jamais. Au fur et à mesure que je continue à explorer macOS et ses possibilités, je découvrirai certainement de nouvelles astuces et outils qui méritent d’être partagés.

Je prévois d’écrire un autre billet de blog pour vous faire part de ces nouvelles découvertes. Mon objectif est de vous aider à tirer le meilleur parti de macOS, en partageant les solutions et les pratiques qui m’ont été utiles.