Install Microsoft Exchange 2019 using Windows Server 2019 Core

Install Windows Features

Install-WindowsFeature Server-Media-Foundation, NET-Framework-45-Features, RPC-over-HTTP-proxy, RSAT-Clustering, RSAT-Clustering-CmdInterface, RSAT-Clustering-PowerShell, WAS-Process-Model, Web-Asp-Net45, Web-Basic-Auth, Web-Client-Auth, Web-Digest-Auth, Web-Dir-Browsing, Web-Dyn-Compression, Web-Http-Errors, Web-Http-Logging, Web-Http-Redirect, Web-Http-Tracing, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Metabase, Web-Mgmt-Service, Web-Net-Ext45, Web-Request-Monitor, Web-Server, Web-Stat-Compression, Web-Static-Content, Web-Windows-Auth, Web-WMI

Install C++ Runtimes

Install UCM

When installing on headless Windows use the package from Exchange media ISO, UCMARedist folder.

Install Exchange

Set-ExecutionPolicy -ExecutionPolicy Unrestricted
Setup.exe /IAcceptExchangeServerLicenseTerms /PrepareSchema
Setup.exe /IAcceptExchangeServerLicenseTerms /PrepareAD
setup.exe /IAcceptExchangeServerLicenseTerms /Mode:Install /Roles:Mailbox
Set-ExchangeServer <ServerName> -ProductKey XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

Meet my new standing desk

Picked up a effydesk.ca business frame (black, frame only) and matched it up to with an IKEA GERTON tabletop that has following dimensions:

  • Length: 155cm
  • Width: 75cm
  • Height: 73cm

My main reason to go with the business over the home edition is due to a few advantages. The height adjustable desk frame can handle more weight, has better high/low settings, reinforced matte gloss painted square columns and wider feet. Plus the motors are quieter and they move faster.

I also like to support local businesses in Vancouver, BC and these guys were rock solid, near instant responses over email and they meet me at the warehouse so I can pick up the desk instead of shipping.

Self-help summed up

  • See failure as a beginning.
  • Never stop learning.
  • Assume nothing, question everything.
  • Teach others what you know.
  • Analyze objectively.
  • Practice humility.
  • Respect constructive criticism.
  • Take initiative.
  • Give credit where it’s due.
  • Love what you do.

Backing up VMware ESXi VMs with ghettoVCB

Pre-requisites

  • SSH access to your ESXi host.
  • A datastore, preferably a remote NFS or iSCSI one, where backups can be stored.

Installation

  1. Download the ghettoVCB VIB and then using your tool of choice (e.g. the vSphere Client or FileZilla over SFTP), transfer the VIB to your ESXi host.
  2. Connect to your ESXi host over SSH and enable the installation of “community” packages using the command esxcli software acceptance set level=CommunitySupported . By default, ESXi will only allow the installation of official packages, so unless the acceptance level is set to Community Supported, installation of ghettoVCB will fail.
  3. Install the ghettoVCB VIB using the command esxcli software vib install v /path/to/vghettoghettoVCB.vib f . If you used the vSphere Client to upload it to a datastore, you can find it at /vmfs/volumes/DATASTORENAME/vghettoghettoVCB.vib.

You can verify that the installation was successful by navigating to /opt/ghettovcb/bin . If successful, there should be two files in here – ghettoVCBrestore.sh and ghettoVCB.sh scripts.

Configuration

  1. Using the text editor of your choice (e.g. vi ), edit /opt/ghettovcb/ghettoVCB.conf .
  2. Copy the example configuration from https://github.com/lamw/ghettoVCB/blob/master/ghettoVCB.conf and paste it in to the new file.
  3. Adjust the configuration values as desired. Important values are;
    • VM_BACKUP_VOLUME – The path to your datastore where backups will be stored. For example, if your datastore was called “ISCSI-DATASTORE” and you wanted to store backups inside a folder called “Backups”, you would set this to /vmfs/volumes/ISCSIDATASTORE/Backups .
    • VM_BACKUP_ROTATION_COUNT – The number of backups you wish to retain for each VM. Once more than this number of backups exist, the oldest one will be deleted automatically.
    • EMAIL_SERVER and EMAIL_SERVER_PORT  – The address and port of the email server you want to send backup reports to. ghettoVCB uses netcat to directly speak the SMTP protocol to your email server and as a result authentication and SSL/TLS are not supported! If you don’t want email reports on backups, delete these configuration lines.
    • EMAIL_TO – The email address to send backup reports to. If you don’t want email reports on backups, delete this configuration lines.
  1. Save and quit.

Run

Now that ghettoVCB is installed and configured, we can run a backup. Firstly, try backing up a single VM using the command /opt/ghettovcb/bin/ghettoVCB.sh g /opt/ghettovcb/ghettoVCB.conf mVMNAME , replacing VMNAME with the name of your VM. ghettoVCB will then start backing up this VM to your configured datastore directory by creating a snapshot and then cloning the VM’s disks. Once complete, ghettoVCB will remove the snapshot and return you to the console.

Review the output of ghettoVCB for any errors. If the backup was successful, you should see the line ###### Final status: All VMs backed up OK! ###### in the output. Now, try backing up all of your VMs using the command /opt/ghettovcb/bin/ghettoVCB.sh g /opt/ghettovcb/ghettoVCB.conf a . Again, monitor the output of ghettoVCB and make sure that the backup completes successfully.

Schedule

Running backups on a manual schedule is no fun though, so instead it’s possible to run ghettoVCB automatically using a cron job.

  1. Using the text editor of your choice (e.g. vi ), edit /var/spool/cron/crontabs/root .
  2. Add a new line containing 0 1 * * * /opt/ghettovcb/bin/ghettoVCB.sh g/opt/ghettovcb/ghettoVCB.conf l /tmp/ghettoVCB.log a > /dev/null .
  3. Save and quit – as this file is typically read-only you may need to force your editor to save (in vi , use the command :wq! ).

What does this new line do?

    • At 1am every day, executes the backup command. You can change the time that the backup command is executed by changing the cron expression from 0 1 * * * . If you’re unfamiliar with cron-syntax, you can use a tool such as Cron Maker to generate a suitable cron-syntax.
    • Uses the configuration file /opt/ghettovcb/ghettoVCB.conf to adjust how the backup runs.
    • Outputs a log of the backup process to /tmp/ghettoVCB.log , which can be viewed later.
    • Includes all VMs on the host as a backup target. If you only want to backup a specific VM, you can change a to m VMNAME . To backup a list of VMs, change a to f/opt/ghettoVCB/vmlist and edit /opt/ghettoVCB/vmlist so that it contains a list of the VM names you wish to backup, one per line.
    • Redirects the output of the script to /dev/null , as some issues have been reported with running ghettoVCB with a cron job when the output isn’t redirected.

Slipstream Windows 2000/XP/2003

The other day I had to install Windows XP on a very old laptop and it took quite a bit to get a bootable USB stick created and slipstream the necessary drivers to recognize the IDE drivers.

These instructions are for Windows XP:

Extract your copy of Windows XP to a local drive, use DriverPacks BASE to slipstream (inject) the DriverPacks you require. Use nLite to create an ISO from the directory. Finally use WinToFlash to burn the image to USB.

Do this in the sequence above, accept the defaults in the GUI and it should just work. A good source for help and discussion is here and here.

I tried Rufus and it did not work, WinToFlash does some additional magic to make the USB drive bootable on very picky motherboards.

Update VMware ESXi host management IP in vSphere 6.7

Recently I had to update all the hosts in my cluster to a new IP to move them over to a different VLAN. There is a lot of information out there on how to do this, here is what worked for me.

  1. Turn off vSphere DRS/HA to prevent any kind of failover
  2. Migrate all VMs from host
  3. Put host into maintenance mode
  4. Disconnect host from vCenter
  5. Change management network TCP/IP settings using DCUI (KVM)
  6. Update DNS records for the host to reflect new IP
  7. SSH to vCenter and clear cache by restarting these services:
    systemctl restart systemd-resolved.servic
    systemctl restart dnsmasq
  8. Verify that you can ping host DNS from vCenter and that it resolves to correct IP
  9. Re-Connect host in vCenter
  10. Take host out of maintenance mode
  11. Load balance your VMs

Before you do this also review the relevant VMware KB here: https://kb.vmware.com/s/article/2084629