Newer
Older
# Packer | MacOS
> Création et configuration d'une Machine Virtuelle VirtualBox sous Mac OS pour le développement.
[[_TOC_]]
## Dépendances
* [Packer](https://www.packer.io/downloads)
* [VirtalBox](https://www.virtualbox.org/wiki/Downloads) >= 6.1.14
* Un Mac
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
## 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](https://github.com/timsutton/osx-vm-templates)
### From scratch
> Version préféré pour le développement et les tests.
Le projet [macos-virtualbox](https://github.com/myspaghetti/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](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](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](packer_macos.json) permet de contruire une machine virtuelle VirtualBox sous MacOS depuis une ISO ou un OVA.
## 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__.
* Le dépôt de notre box MacOS Catalina : [GAEV/MacOS\_Catalina](https://app.vagrantup.com/GAEV/boxes/MacOS_Catalina)
* Le dépôt du projet : [https://app.vagrantup.com/GAEV](https://app.vagrantup.com/GAEV)
;-)