Skip to content

Latest commit

 

History

History
193 lines (162 loc) · 5.45 KB

README.md

File metadata and controls

193 lines (162 loc) · 5.45 KB

Laravel Homestead Unofficial Build for Parallels Desktop on Apple Silicon

This is an unofficial build of Laravel Homestead for Parallels Desktop on Apple Silicon. Make sure you have Parallels Desktop Pro Edition or above in order to use the parallels provider.

To use this box from the laravel/homestead PHP package, edit your Homestead.yaml as follows before vagrant up.

provider: parallels
box: yodoware/homestead-arm64
version: '>= 11.3.0'

Repository

https://github.com/yodoware/homestead-arm64

Environment

This box is built under the following environment.

  • Apple M1
  • macOS Big Sur 11.3.1
  • Parallels Desktop 16 for Mac, Pro Edition 16.5.0 (50692)
  • Vagrant 2.2.15

How this box is built

Started from the VM image of Ubuntu 20.04 ARM64.

Installed Parallels Tools.

Set up the VM as follows.

sudo adduser vagrant
sudo gpasswd -a vagrant sudo
sudo systemctl set-default multi-user.target
sudo apt-get update
sudo apt-get install -y openssh-server
sudo apt-get install -y grub2-common
sudo vi /etc/default/grub
  GRUB_TIMEOUT=5
  GRUB_TERMINAL=console
sudo update-grub

Set up the build environment following the official Laravel Settler document.

Edited the following file to disable automatic installation of Parallels Tools.

  • bento/packer_templates/_common/parallels.sh
-parallels-iso|parallels-pvm)
+parallels-iso)

Created the following file.

  • bento/packer_templates/ubuntu/ubuntu-20.04-arm64.json
{
  "builders": [
    {
      "boot_wait": "5s",
      "output_directory": "{{ user `build_directory` }}/packer-{{user `template`}}-parallels",
      "parallels_tools_mode": "disable",
      "parallels_tools_flavor": "lin",
      "prlctl_version_file": ".prlctl_version",
      "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now",
      "ssh_password": "vagrant",
      "ssh_port": 22,
      "ssh_timeout": "10000s",
      "ssh_username": "vagrant",
      "type": "parallels-pvm",
      "source_path": "/Users/YOURNAME/Parallels/Homestead.pvm",
      "vm_name": "{{ user `template` }}"
    }
  ],
  "post-processors": [
    {
      "output": "{{ user `build_directory` }}/{{user `box_basename`}}.{{.Provider}}.box",
      "type": "vagrant"
    }
  ],
  "provisioners": [
    {
      "environment_vars": [
        "HOME_DIR=/home/vagrant",
        "http_proxy={{user `http_proxy`}}",
        "https_proxy={{user `https_proxy`}}",
        "no_proxy={{user `no_proxy`}}"
      ],
      "execute_command": "echo 'vagrant' | {{.Vars}} sudo -S -E sh -eux '{{.Path}}'",
      "expect_disconnect": true,
      "scripts": [
        "{{template_dir}}/scripts/update.sh",
        "{{template_dir}}/../_common/sshd.sh",
        "{{template_dir}}/scripts/networking.sh",
        "{{template_dir}}/scripts/sudoers.sh",
        "{{template_dir}}/scripts/vagrant.sh",
        "{{template_dir}}/../_common/virtualbox.sh",
        "{{template_dir}}/scripts/vmware.sh",
        "{{template_dir}}/../_common/parallels.sh",
        "{{template_dir}}/scripts/hyperv.sh",
        "{{template_dir}}/scripts/homestead.sh",
        "{{template_dir}}/../_common/minimize.sh"
      ],
      "type": "shell"
    }
  ],
  "variables": {
    "box_basename": "ubuntu-20.04",
    "build_directory": "../../builds",
    "build_timestamp": "{{isotime \"20060102150405\"}}",
    "cpus": "2",
    "disk_size": "524288",
    "git_revision": "__unknown_git_revision__",
    "guest_additions_url": "",
    "headless": "",
    "http_directory": "{{template_dir}}/http",
    "http_proxy": "{{env `http_proxy`}}",
    "https_proxy": "{{env `https_proxy`}}",
    "hyperv_generation": "2",
    "hyperv_switch": "bento",
    "iso_checksum": "5922d88e2e5de002bc3af1c2ef2c21ee6fa61132c26d6b742e1ebc366bfbbe3d",
    "iso_name": "ubuntu-20.04.1-legacy-server-arm64.iso",
    "memory": "2048",
    "mirror": "http://cdimage.ubuntu.com",
    "mirror_directory": "ubuntu-legacy-server/releases/20.04/release",
    "name": "ubuntu-20.04",
    "no_proxy": "{{env `no_proxy`}}",
    "preseed_path": "preseed.cfg",
    "template": "ubuntu-20.04-arm64",
    "version": "TIMESTAMP"
  }
}

Commented out the following which failed to be installed somehow.

  • settler/scripts/provision.sh
# Install LMM for database snapshots
apt-get install -y thin-provisioning-tools bc
git clone https://github.com/Lullabot/lmm.git /opt/lmm
sed -e 's/mysql/homestead-vg/' -i /opt/lmm/config.sh
ln -s /opt/lmm/lmm /usr/local/sbin/lmm

# Create a thinly provisioned volume to move the database to. We use 64G as the
# size leaving ~5GB free for other volumes.
mkdir -p /homestead-vg/master
sudo lvs
lvcreate -L 64G -T homestead-vg/thinpool

# Create a 64GB volume for the database. If needed, it can be expanded with
# lvextend.
lvcreate -V64G -T homestead-vg/thinpool -n mysql-master
mkfs.ext4 /dev/homestead-vg/mysql-master
echo "/dev/homestead-vg/mysql-master\t/homestead-vg/master\text4\terrors=remount-ro\t0\t1" >> /etc/fstab
mount -a
chown mysql:mysql /homestead-vg/master

# Move the data directory and symlink it in.
systemctl stop mysql
mv /var/lib/mysql/* /homestead-vg/master
rm -rf /var/lib/mysql
ln -s /homestead-vg/master /var/lib/mysql

# Allow mysqld to access the new data directories.
echo '/homestead-vg/ r,' >> /etc/apparmor.d/local/usr.sbin.mysqld
echo '/homestead-vg/** rwk,' >> /etc/apparmor.d/local/usr.sbin.mysqld
# Install Heroku CLI
curl https://cli-assets.heroku.com/install-ubuntu.sh | sh

Built the box as follows.

packer build -only=parallels-pvm ubuntu-20.04-arm64.json