Un script pour configurer automatiquement un nouveau Mac

Nicolas Furno |

Changer d’appareil iOS est beaucoup plus simple depuis que l’on peut sauvegarder entièrement son iPhone ou iPad et restaurer la sauvegarde sur le nouvel appareil. Malheureusement, la situation n’est pas aussi simple sur Mac, où il faut transférer une sauvegarde, soit en passant par un clone, soit via Time Machine. Et si on ne veut pas récupérer tous les documents, mais juste ses logiciels et réglages — et ainsi repartir sur une base plus saine —, il n’y a aucune solution automatique.

C’est dans ce cas-là qu’interviennent les scripts d’installation, à utiliser sur un nouveau Mac ou sur une machine remise à zéro. L’idée est de définir une liste de logiciels à installer et de paramètres à configurer après l’installation de macOS. Une fois cette liste créée, le script va faire travailler le Mac pour vous et installer les apps que vous jugez nécessaires, mais aussi modifier les paramètres de base de votre Mac et de ses logiciels.

Mon script d’installation en action, ici pendant le téléchargement et l’installation de Google Drive. Cliquer pour agrandir
Mon script d’installation en action, ici pendant le téléchargement et l’installation de Google Drive. Cliquer pour agrandir

Un tel script sera nécessairement personnel et je ne peux pas vous fournir une solution clé en main. Néanmoins, j’ai mis au point un script d’installation et de configuration pour mon Mac, que j’ai utilisé d’abord sur mon hackintosh, puis sur mon MacBook Pro 15 pouces de 2012 vidé pour l’occasion. Après quelques ajustements, j’ai réussi à le faire fonctionner d’un bout à l’autre sans problème particulier.

Vous ne pouvez pas vous servir du script immédiatement, mais vous pouvez l’utiliser comme base pour créer le vôtre, en fonction de vos besoins. Cet article vous indiquera comment créer une version adaptée à partir de mon script, et comment l’utiliser sur un nouveau Mac.

Un script d’installation, qu’est-ce que c’est ?

Au cœur de macOS, se trouve un noyau dérivé d’UNIX. Le système d’Apple bénéficie de nombreuses fonctions qui ne sont pas mises en avant, mais qui sont bien pratiques quand on cherche à automatiser son ordinateur. Le Terminal de macOS donne accès au même bash que les distributions GNU/Linux et aux nombreux outils en ligne de commande associés.

Un script d’installation est un fichier texte constitué d’une série de lignes de commande qui seront exécutées l’une après l’autre. Son extension en .sh et la première ligne (#!/bin/sh) servent à indiquer à macOS comment traiter le fichier, mais vous pouvez vous contenter de l’ouvrir dans TextEdit ou n’importe quel autre éditeur de texte pour le modifier.

Les premières lignes de mon script Cliquer pour agrandir
Les premières lignes de mon script Cliquer pour agrandir

Nous verrons dans la partie suivante comment l’exécuter, mais pour le moment, vous pouvez récupérer le script à cette adresse et voir à quoi il ressemble.

Si vous n’êtes pas familier avec GitHub, vous pouvez télécharger l’intégralité d’un projet en cliquant sur le bouton vert Clone or download à droite et sur Download ZIP. Cliquer pour agrandir
Si vous n’êtes pas familier avec GitHub, vous pouvez télécharger l’intégralité d’un projet en cliquant sur le bouton vert Clone or download à droite et sur Download ZIP. Cliquer pour agrandir
L’essentiel est contenu dans ce fichier de 8 Ko qui contient toutes les commandes nécessaires.
L’essentiel est contenu dans ce fichier de 8 Ko qui contient toutes les commandes nécessaires.

Ouvrez le fichier post-install.sh pour regarder ce qu’il contient. Ne prenez pas peur, ce n’est pas aussi compliqué qu’on pourrait le croire. Les premières lignes doivent être maintenues telles qu’elles sont, elles servent à installer les outils de base : Homebrew, Cask et mas.

Installation de Homebrew, et mise à jour de sa base de données.
Installation de Homebrew, et mise à jour de sa base de données.

Homebrew, c’est un outil en ligne de commande qui sert à installer d’autres outils en ligne de commande. C’est aussi un gestionnaire de paquets qui facilite leur installation et aussi les mises à jour successives. Cask est un utilitaire chargé d’installer des logiciels et mas fait la même chose pour les applications proposées uniquement dans le Mac App Store (lire : mas : utiliser le Mac App Store via le terminal).

Une fois ces trois outils installés, le script consiste essentiellement en une série d’instructions pour installer tous les logiciels et tous les outils qui me sont nécessaires au quotidien. Voici un extrait du script en guise d’exemple :

brew install hugo
brew cask install iterm2 github-desktop textmate tower coda
install "Xcode"
  • la première ligne installe un outil en ligne de commande (hugo, le générateur de sites que l’on utilise pour le site dédié aux keynote) avec Homebrew ;
  • la deuxième installe une série de logiciels avec Cask : vous pouvez saisir un logiciel par ligne, ou les enchaîner avec les noms séparés par des espaces comme ici où cinq logiciels seront installés en une fois ;
  • et la troisième ligne installe Xcode depuis le Mac App Store avec mas.
mas ou install ?

Les plus attentifs l’auront peut-être remarqué, les apps du Mac App Store n’utilisent pas la commande mas dans mon script. C’est une petite astuce bien pratique que j’ai mise en place : une fonction, au début du script, permet ensuite de simplifier l’installation avec la commande install, puis le nom d’une app entre guillemets.

Cette fonction simplifie l’utilisation en chaîne de mas : au lieu d’une série d’identifiants numériques, vous pouvez utiliser le nom des apps.
Cette fonction simplifie l’utilisation en chaîne de mas : au lieu d’une série d’identifiants numériques, vous pouvez utiliser le nom des apps.

Rendons à César, etc. : j’ai piqué l’idée à cet autre utilisateur de mas.

Mon conseil : faites une liste de tous les logiciels que vous voulez installer sur votre Mac pour préparer votre script. Tout ce qui est disponible dans le Mac App Store et tout ce qui est déjà associé à votre compte sera téléchargé avec mas. Tout ce qui n’est pas proposé dans le Mac App Store est peut-être disponible avec Cask : utilisez le champ de recherche du projet pour trouver si une app est proposée.

Dans quelques cas, comme pour le lecteur de vidéo mpv (ligne 104), Homebrew est la meilleure solution. Mais la majorité de ce qui est installé passe soit par mas, soit par Cask. Et donc, pour créer votre script, la majorité de votre travail consistera à trouver comment installer un logiciel et à ajouter une ligne à chaque fois dans le fichier.

La deuxième partie du script, à partir de la ligne 113, ne sert plus à installer des apps, mais plutôt à configurer le Mac et les applications. Il s’agit essentiellement de commandes default writes qui changent les préférences par défaut de macOS ou de certains logiciels. Je n’ai pas inventé ces commandes et je ne les connais pas par cœur non plus : pour trouver des idées et trouver les bonnes commandes, faites comme moi, inspirez-vous de projets existants. Parmi ceux que j’ai utilisé, voici le plus complet et ses commentaires vous permettront de connaître la fonction de chaque commande.

La fin du script configure le Mac comme je le souhaite. Plus encore que la liste des apps, c’est à vous d’adapter cette partie en fonction de vos besoins.
La fin du script configure le Mac comme je le souhaite. Plus encore que la liste des apps, c’est à vous d’adapter cette partie en fonction de vos besoins.

J’ai choisi de diviser le processus en deux étapes. Le fichier post-install.sh sert juste après l’installation de macOS et il installe tous les logiciels que je veux et configure quelques réglages importants. Le fichier post-cloud.sh est pensé pour être utilisé après la synchronisation des données depuis le cloud, que ce soit avec iCloud, Dropbox, Google Drive ou le service de votre choix.

Je n’y ai pas mis grand-chose, essentiellement la restauration des préférences de quelques apps que je synchronise avec mackup. Nous reviendrons dans un futur article sur cet outil, mais disons simplement qu’il transfère les réglages de certaines apps dans un service de cloud et les maintient synchronisés sur tous vos Mac. La première fois, il faut restaurer manuellement les réglages depuis le cloud, ce que le script prend en charge.

Le deuxième script (post-cloud.sh) doit être activé après la synchronisation des fichiers avec le service de cloud de votre choix. Il sert, notamment, à restaurer les préférences synchronisées depuis un autre Mac.
Des echo et des commentaires

Pour les plus observateurs encore, il y a de nombreuses lignes echo dans les deux scripts. Elles servent à afficher une information au moment de l’exécution du script et elles sont bien utiles pour savoir ce qui se passe. Ces lignes sont totalement optionnelles néanmoins et vous pouvez très bien vous en passer.

Autre chose qui est optionnel, ce sont toutes les lignes qui commencent par un #. Il s’agit d’un commentaire, une ligne que le script n’essaie même pas de comprendre et qui ne sert à rien… sauf à vous rappeler à quoi sert la ou les lignes suivantes. De façon générale, il est recommandé d’en utiliser un maximum, mais à vous de voir !

Astuce supplémentaire : si vous trouvez quelque chose qui ne vous plait pas dans un script, vous pouvez commenter la ligne au lieu de la supprimer. C’est une bonne manière de garder une trace du contenu original sous la main sans l’exécuter pour autant.

Comment utiliser un tel script ?

Pour commencer, récupérez mon script sur la page du projet (téléchargement direct), mais ne l’exécutez pas immédiatement. La première étape en effet consiste à l’ouvrir et à l’adapter en fonction de vos besoins. Pour plus de confort, vous pouvez utiliser un éditeur de code dédié, comme TextMate ou TextWrangler, mais TextEdit peut très bien faire l’affaire également.

Ouvrez d’abord le fichier post-install.sh et commencez à modifier la liste des logiciels à installer à partir de la ligne 41. Supprimez tout ce qui ne vous sera pas utile et ajoutez ce qui vous manque ; vous pouvez également supprimer tout ce que j’ai utilisé dans mon script pour composer le vôtre. Rappelez-vous que tous les logiciels du Mac App Store doivent déjà être associés à votre compte, sinon cela ne fonctionnera pas.

Modifiez aussi les paramètres à partir de la ligne 113. Même s’ils sont optionnels, mieux vaut systématiquement ajouter des commentaires pour expliquer à quoi sert chaque ligne. Quand votre script est terminé, le moment est venu de l’utiliser !

En fait, c’est la partie la moins intéressante du processus, puisque si tout va bien, le script va travailler pour vous quasiment sans vous demander d’agir. Mieux vaut le lancer sur un Mac aussi proche que possible de l’installation d’origine, même s’il ne devrait pas se bloquer si un logiciel requis est déjà installé. Le seul point important avant de commencer concerne le Mac App Store : ouvrez la boutique et déconnectez-vous si vous étiez connecté.

Ouvrez le terminal et glissez simplement le fichier post-install.sh dans la fenêtre. Appuyez sur la touche entrée et le script va commencer son travail.

Lancement du script : il suffit de le glisser dans une fenêtre de terminal et de valider avec la touche entrée. Cliquer pour agrandir
Lancement du script : il suffit de le glisser dans une fenêtre de terminal et de valider avec la touche entrée. Cliquer pour agrandir

Vous devez laisser la fenêtre du terminal ouverte jusqu’à la fin du processus. La majorité des opérations se feront automatiquement, à quelques exceptions près. Le script vous demandera un identifiant et un mot de passe pour le Mac App Store, par exemple, mais vous devrez aussi saisir un mot de passe administrateur à plusieurs reprises. Suivez les instructions et si tout va bien, le processus suivra son cours jusqu’à la fin.

Une des premières étapes du script : demander un compte pour le Mac App Store. Cliquer pour agrandir
Une des premières étapes du script : demander un compte pour le Mac App Store. Cliquer pour agrandir

Juste après l’installation du service de cloud de votre choix, le script ouvrira le logiciel (ligne 56). J’ai ajouté cette commande pour commencer la synchronisation avant la fin du processus et ainsi récupérer plus rapidement les données. Ce n’est pas une obligation néanmoins et vous pouvez attendre la fin du premier script, puis synchroniser les données et enfin lancer le deuxième script post-cloud.sh.

Le temps nécessaire pour terminer le processus dépendra fortement de vos choix de logiciels à installer. Si, comme moi, vous installez des poids-lourds comme Final Cut Pro, le script peut nécessiter plusieurs heures d’installation en fonction de votre connexion. De la même manière, la place restante sur votre SSD dépendra de ces choix.

Pendant l’installation d’un logiciel.

C’est à vous de vous lancer !

Encore une fois, on ne le rappellera jamais trop, cet article n’est pas une solution clé en main. Ne le lancez pas après l’avoir téléchargé, sous peine d’avoir un tas de logiciels inutiles et un Mac configuré à ma manière…

L’idée était d’expliquer le principe général et surtout de vous donner les clés pour réaliser votre propre script d’installation, puisque tout l’intérêt est de créer une configuration adaptée à vos besoins. Si vous utilisez GitHub, vous pouvez créer un fork de mon script pour l’adapter à vos besoins. Sinon, téléchargez les fichiers sur votre Mac pour les modifier.

Dans tous les cas, j’ai ouvert un sujet sur les forums de MacGeneration pour discuter du sujet. Vous pourrez y poser des questions en cas de problème et j’essaierai d’y répondre. Vous pourrez aussi y faire des suggestions pour améliorer mon script ou pour proposer vos idées !

Image de couverture : Christiaan Colen (CC BY-SA 2.0)

avatar slinkytheboy | 

Excellent ?
Merci ☺

avatar Liena | 

Super merci ????

avatar patchoulol | 

Excellent ! J'ai testé une version perso de ce script la semaine dernière, c'est très pratique.

L'étape suivante est la génération automatique du script en fonction des outils déjà installés sur le Mac, un peu comme mackup permet le backup/restore. Des pistes ont-elles été déjà explorées dans ce sens ?

avatar Alex56 | 

Je ne vois pas l'intérêt, il y a une solution automatique : brancher le nouveau mac sur l'ancien avec un câble éthernet et laissez Mac OS récupérer tout le nécessaire.

avatar leolelego (non vérifié) | 

brancher un mac avec l'ancien par Ethernet va cloner la machine.Et donc potentiellement récupérer les défauts qu'elle avait.

Ensuite, l'intérêt est aussi si tu configures plusieurs machine, si tu veux qu'elles soient différentes mais avec une meme base (installation de soft par défaut, configuration par défaut etc).

avatar denantoi123 | 

@Alex56

Câble ethernet ?
Tu fais comment pour le brancher sur des:
- MacBook
- MacBook Pro (tous les Retina et les touchbar)
- MacBook Air

En gros toute la gamme des mac portables...

À oui acheter un adaptateur...

avatar Ginger bread | 

@Alex56

Si tu as 2 macs oui.
Mais si tu souhaites faire une clean install sans time machine ou clone. Relis l article.

avatar locshirk | 

Oui excellent comme script à adapter en fonction des besoins.

Petite question @Nicolas Furno : Y a t il un endroit ou trouver tout le contenu de tous les fichiers "com.apple…". Pour pouvoir régler toutes les préférences aux petits oignons selon notre utilisation ?

Merci d'avance

avatar Nicolas Furno | 

@ locshirk : à ma connaissance, non, du moins pas de façon exhaustive et surtout pas à jour. À une époque, on trouvait des listes assez complètes, mais elles ne valent plus grand-chose si elles n'ont pas été adaptées aux dernières versions de macOS.

Mon conseil dans l'article est la meilleure option, je crois : piocher dans les listes existants. Commencez par ce projet : https://github.com/joeyhoer/starter

Si quelqu'un a mieux, qu'il n'hésite pas à partager !

avatar locshirk | 

Ok ça marche ? Merci à toi de la réponse

avatar P-AAAA | 

@nicolasf

Super ce genre d'article ! À refaire au plus vite , surtout pour les lundi difficiles ?

avatar huexley | 

Merci très cool !

avatar Wolf | 

Merci, mais non merci.
Je préfère me le faire à la paluche, a l'ancienne, je vais gagner du temps.

avatar leolelego (non vérifié) | 

Si vous voulez aller plus loin, regardez la pratique dites des "dotfiles". C'est exactement ça, mais avec ce mot clé vous trouverez plein de truc en plus sur le net.

avatar emourgues (non vérifié) | 

Excellent merci

avatar deltiox | 

Très bien?
Il ne reste plus qu'à Apple a nous laisser faire de tels scripts AVEC l'achat en ligne de commande et ce serait super pour des installations

Aujourd'hui c'est soit ce script ou d'autres pour des Apps déjà achetées soit une integration avec un MDM

avatar bunam | 

Pour ceux qui veulent ajouter LibreOffice en français direct :

brew cask install --force libreoffice libreoffice-language-pack --language=fr

Pour mettre à jour cette partie (brew cask ne gère pas encore correctement la détection des mise à jour) :

brew cask install --force libreoffice libreoffice-language-pack --language=fr

Attention cela télécharge +600 Mo ...

(j'ai contribué à la recette libreoffice-language-pack)

avatar occam | 

So cool !

avatar Danny Wilde | 

Top vraiment super ?
On en voudrait des beaucoup plus comme cela
?

avatar Malum | 

Mais ça ne sert à rien en 2017 Apple cesse la fabrication des Mac donc plus de nouveau Mac, rien à transférer même aux petits oignons …

avatar StephanMart | 

@Malum

Qu'est ce qu'il ne faut entendre, comme inepties .

avatar LeSedna | 

Le temps de mettre au point son script on a déjà installés tous ses logiciels à la main surtout avec un bonne fibre qui télécharge tout en quelques secondes. Ce script a du sens Si pour une raison quelconque on doit répéter le processus, autrement je ne vois pas un grand intérêt !

avatar bigtob14 | 

@LeSedna
C'est idiot de dire que ça ne sert à rien. Ca sert déjà à... s'instruire, ce qui est déjà très positif.
De plus, si on ne veut pas installer les applications automatiquement, on peut tout de même utiliser ce genre de script pour automatiser les réglages de macOs, lors d'une réinstallation.
Et si au final on n'en a pas du tout l'utilité, on peu en profiter pour s'initier à l'écriture de scripts, ce qui permettra ensuite de proposer ses créations à la communauté des utilisateurs d'OSX.

avatar sekaijin | 

perso j'ai installé un nouveau disque et j'ai installé MacOS
l'installa m'a alors proposé de transférer les élément de mon ancien disque.
et il m'a laissé le choix
j'ai choisi les application à conserver et celle à jeter
j'ai choisi les users à garder et à supprimer
j'ai choisi les documents à garder ou à ne pas garder

Je ne vois pas bien ce qu'apporte le script
A+JYT

avatar huexley | 

Une clean install au lieu d'importer toutes les vieilles merdes ?

avatar Avenger | 

Excellent article pour les vrais bidouilleurs qui aiment les lignes de commande.

Mais, perso, je rejoins la réaction de sekaijin.

avatar tchit | 

Question : c'est pas plus simple de télécharger les app "vierges" et les garder sur un disque dur externe ? Si un jour on veut installer un nouveau mac, on copie les apps du disque externe.
Pas besoin de script ni de connexion internet.

avatar pat3 | 

Moi je rêve de retrouver un script de maintenance comme applejack qui fonctionne au démarrage en mode console… sbin/fsck n'est pas assez complet à mon goût. Un onyx en mode terminal, quoi ?

avatar PierrePio | 

Merci pour cet article de qualité

avatar BeePotato | 

Je ne suis absolument pas d’accord avec l’introduction de l’article (et donc la motivation derrière l’écriture d’un script de ce genre).

« Malheureusement, la situation n’est pas aussi simple sur Mac, où il faut transférer une sauvegarde, soit en passant par un clone, soit via Time Machine. »

Ce qui est donc aussi simple que sur iOS où on… restaure une sauvegarde !
De plus, si on a les deux Mac (ancien et nouveau) à disposition en même temps, on peut bien évidemment importer les données directement depuis l’ancien Mac (en réseau ou via l’utilisation du mode target).

Pour ces deux approches, Apple fournit un logiciel (l’assistant de migration) plutôt bien fait et efficace, qui permet de sélectionner ce qu’on veut importer ou non sur la nouvelle machine.
C’est donc, en fait, plus simple et plus facile que sur iOS.

« Et si on ne veut pas récupérer tous les documents, mais juste ses logiciels et réglages — et ainsi repartir sur une base plus saine — »

?!?
Ça n’a absolument rien de plus sain !!!
Au contraire, même, puisque c’est précisément dans ces « réglages » (que ce soit les préférences des applications ou les réglages des divers composants du système) qu’on risque le plus de trouver des sources de (petits) problèmes.

Et il serait complètement stupide de copier les logiciels et leurs préférences (quelque chose qui, après tout, peut se retélécharger — pour les logiciels — et se reconfigurer — pour les préférences — assez facilement et rapidement) et de laisser de côté tous ses documents (qui, eux, représentent généralement des créations uniques qui ont nécessité des heures, des jours, voire des mois de travail).
Cette phrase est donc très étrange.

« il n’y a aucune solution automatique. »

En admettant qu’on choisisse réellement de faire ça (cf. la remarque ci-dessus), si, il existe une solution automatique : l’assistant de migration.

Bref, les outils auxquels ce script fait appel sont bien sympa, mais c’est un script qui ne trouve absolument pas son utilité dans le cas imaginaire présenté en introduction.
Comme d’autre l’ont dit, on peut être tenté d’utiliser une approche de ce genre pour configurer un parc de plusieurs machines, mais ce n’est pas du tout la même chose.

avatar tboy | 

Je m'étais fait la même chose y a deux ans. Mais les applications qu'il installait se mettait dans ~/Applications et non /Applications
Y a peut être moyen de paramétrer brew pour modifier ça ? A la dernière install from scratch j'ai tout réinstaller dans script.

avatar Wilthek | 

Superbe article comme j'aime ?
Du concret et du pratique : chapeau ? !

avatar Almux | 

Out-là-là! Lignes de code... ouais, ouais... oublie un simple";" et tout est foutu!
Perso, je me garderais bien de toucher au Terminal, de peur de tout bousiller! :P

avatar CNek | 

Bravo MacG, super article vraiment concis et je suis sûr, très utile pour les débutants Unix/CLI.
Je connaissais pas Cask et mas merci.

avatar NerdForever | 

Superbe article!!! Merci beaucoup!!

avatar skimpy | 

Merci pour cet article très intéressant. En mode colonne dans le Finder, existe-t'il un moyen d'avoir en permanence (sans avoir à faire un clic droit sur les barres de séparation des colonnes) l'option "Right Size All Columns Individually" (pour que la largeur des colonnes s'adaptent automatiquement par rapport au contenu de celles-ci) ?

Merci.

avatar papalou | 

Bon article, mais défaut du concept : il faut être connecté à internet, ou à défaut sur un réseau local avec serveur distribuant les applications.
Il y a une dizaine d'années, je déployais des machines avec des images disques préconfigurées avec le default user modifié, ce qui au final permettait de faire la même chose sans connexion. Ce qui n'est pas rien quand les applications et fichiers à installer par défaut sur les postes représentaient plusieurs gigaostets.

CONNEXION UTILISATEUR