Skip to content
Snippets Groups Projects

Packer | MacOS

Création et configuration d'une Machine Virtuelle VirtualBox sous Mac OS pour le développement.

Dépendances

## Prérequis

Apple autorise la virtualisation mais sur du matériel Apple. De ce faite, cela ne permet pas l'installation d'instance virtualisé de MacOS si on ne dispose pas d'un matériel Apple.
Donc il faut déjà disposer une machine sous MacOS.
Il est quand même possible de virtualiser un MacOS mais uniquement pour un but de fournir un environnement de développement et de tests.

Depuis un MacOS

non testé

Création d'une ISO bootable:

# Create a macOS Big Sur Virtual Disk Image
hdiutil create -o /tmp/bigsur -size 10250m -volname bigsur -layout SPUD -fs HFS+J
# Mount this Image to macOS
hdiutil attach /tmp/bigsur.dmg -noverify -mountpoint /Volumes/bigsur
# Use macOS Big Sur Createinstallmedia Tool to create a Installer Image
sudo /Applications/Install\ macOS\ Beta.app/Contents/Resources/createinstallmedia --volume /Volumes/bigsur --nointeraction
# Unmount Volume Install macOS Beta
hdiutil eject -force /Volumes/Install\ macOS\ Beta
# Convert the bigsur.dmg to a bigsur.iso for Virtual Machine
hdiutil convert /tmp/bigsur.dmg -format UDTO -o ~/Desktop/bigsur.cdr
# Move and Rename bigsur Image to Desktop
mv ~/Desktop/bigsur.cdr ~/Desktop/bigsur.iso

Reste à voir comment automatiser l'install de l'iso... Regarder par là -> https://github.com/timsutton/osx-vm-templates

From scratch

Version préféré pour le développement et les tests.

Le projet macos-virtualbox a pour but d'automatiser l'installation d'une version de MacOS dans une machine virtuelle VirtualBox.

Une version du script est disponible pre_script/macos-guest-virtualbox.sh. Il y a des dépendances, regarder dans le header du script.

Au jour d'aujourd'hui, le script permet d'automatiser la création de la machine virtuelle mais pas la configuration de l'OS. Après l'execution du script, il faut démarrer la MV et la configurer (ssh + compte utilisateur vagrant/vagrant). Ensuite l'exporter en format OVA.

Packer et Template JSON

Packer nous permet de créer des machines identiques depuis une ISO (ou autre) pour de multiple platforms depuis un simple fichier (Template).
Le fichier Template est une fichier json qui décrit comment créer la machine virtuelle. cf : packer_macos.json.

Les Builders (Providers) sont réponsable de construire l'image de la machine pour une plateforme specifique (VMWare, VirutalBox, Azure, AWS...).
Les Provisioners installent et configurent une machine. Packer permet du provisioning simple (copies fichier,script, install package), il est préférable d'utiliser un autre outils de provisioning type Vagrant, Ansible.
La Communication se fait principalement via SSH.

Il faut ajouter ceci si l'hote n'est pas un intel:

["modifyvm", "{{.Name}}", "--cpu-profile", "Intel Core i7-6700K"]

Le template packer_macos.json permet de contruire une machine virtuelle VirtualBox sous MacOS depuis une ISO ou un OVA.

Pre-Provisioning

Le script scripts permet d'installer xcode et Command Line Tools depuis un dmg ou pix.
Pour ce faire, il faut se rendre sur https://developer.apple.com/download/more/ est télécharger la version necessaire. Actuellement le script install Command_Line_Tools_for_Xcode_11.5.dmg et Xcode_11.7.xip.

Le script install-homebrew.sh installe homebrew.
Le script add-sudouser.sh ajoute une régle sudoers pour l'utilisateur vagrant avec NOPASSWD.

Build

Avec une ISO généré depuis un mac.

packer build --only=virtualbox-iso \
  --var iso_url=./Catalina.iso \
  packer_macos.json

Avec une VM existante (format OVA).

packer build --only=virtualbox-ovf \
  --var iso_url=./macOS_Catalina.ova \
  --var cloud-token="VagrantToken" \
  packer_macos.json

Post Build | Vagrant Box

Packer permet de publier notre MV sur VagrantCloud. Sans rentrer dans les détails, Packer va créer une box (format Vagrant) qui n'est autre qu'un tar de notre MV avec le fichier de parametrisation.
Par la suite, notre MV est accessible depuis VagrantCloud en public et utilisable par l'outil Vagrant.

;-)