# For VMs only #

The Disk should be formatted with a case insensitive file system (default).

Install VMWare tools daemon.

  - The UI is supposed to be able to do this automatically, but it's broken as of writing.
  - Instead, mount darwin.iso from ISO/VMWARE TOOLS and run the installer from there.
  - open security preferences and click "Allow" on blocked software install from VMware
  - reboot
  - make sure you can run and see:

    $ /Library/Application Support/VMware Tools/vmware-tools-daemon --cmd "info-get guestinfo.name"
    No value found

# For all machine types

- Turn on the computer.
- Click through setup, connect to wifi, etc.
- Full name: Gopher Gopherson
- Account name: gopher
- Password: with an exclamation mark
- Decline as much as possible.
- Set time zone to NY.
- Open a terminal.
- `sudo visudo`

  Change  `%admin ALL=(ALL) ALL` to `%admin ALL=(ALL) NOPASSWD: ALL`.

- `sudo nvram boot-args="-v"`

- Install Go: download the latest tarball from go.dev/dl.

  `tar -xf Downloads/go*.darwin-*.tar`

  `mv go $HOME/goboot`

Create `$HOME/stage0.sh`.

**For VMs**
```
#!/bin/bash
while true; do (curl -v http://172.17.20.2:8713/stage0/$(sw_vers -productVersion) | sh); sleep 5; done
```
**For physical machines**
```
#!/bin/bash

set -x

mkdir -p ~/go/bin;
while true; do
  url="https://storage.googleapis.com/go-builder-data/buildlet.darwin-arm64"
  while ! curl -f -o ~/go/bin/buildlet "$url"; do
      echo
      echo "curl failed to fetch $url"
      echo "Sleeping before retrying..."
      sleep 2
  done
  chmod +x ~/go/bin/buildlet

  mkdir -p /tmp/buildlet
  ~/go/bin/buildlet --coordinator=farmer.golang.org --reverse-type host-darwin-arm64-XX_0 --halt=false --workdir=/tmp/buildlet;
   sleep 2;
done
```

`chmod +x $HOME/stage0.sh`

- Run Automator.
- Create a new Application.
- Add a "run shell script" item with the command: 
  `open -a Terminal.app $HOME/stage0.sh`
- Save it to the desktop as "run-builder".

In System Preferences:
- Software Update > Advanced > disable checking for updates
- Desktop & Screensaver > uncheck show screensaver
- Energy Saver > never turn off display, don't automatically sleep, start up after power failure
- Sharing > enable ssh (leave the default administrators setting)
- Users & Groups > Gopher Gopherson > Login Items > add run-builder
- Users & Groups > Login Options > auto-login Gopher Gopherson

Install XCode:
- Download Xcode from the Apple Developer site:
https://stackoverflow.com/questions/10335747/how-to-download-xcode-dmg-or-xip-file.
https://developer.apple.com/support/xcode/ is a more authoritative list of versions.
(You don't want to log in to your account on the machine, so don't use the App Store.)
- Extract it and move the resulting Xcode folder to Applications
- run xcode-select: `sudo xcode-select --switch /Applications/Xcode.app`
- run `xcodebuild -version` and wait for Xcode to be verified, which will take a long time.
- accept the license: `sudo xcodebuild -license accept`

Put a builder key in the usual spot.