MacInTouch Amazon link...

virtualization

Channels
Products, Questions
The world of virtualization is new to me but I have managed to install a Linux server on my Mac Mini using VirtualBox. Unfortunately, VirtualBox has a problem keeping time synchronised. This seems well known, and I've tried a few workarounds, but my Linux time still drifts; it's currently around eleven hours slow after being set 18 hours or so ago.

I wonder if other MacInTouch readers have come across this and solved it? Otherwise I'm open to suggestions for other virtualization software. It needs to run on a late 2009 Mac Mini, though, as that's what I'm using to test if I can recreate OS X Server. A quick look says VMware Fusion needs a 2011 Mac. Are there other options? I'm happy to pay a reasonable amount. Otherwise I'll need a PC!
 


VirtualBox has a problem keeping time synchronised. This seems well known, and I've tried a few workarounds, but my Linux time still drifts; it's currently around eleven hours slow after being set 18 hours or so ago.
Many PC operating systems only read your clock hardware at system startup. After that, there is an internal counter that ticks (tied to a hardware timer interrupt, I believe) to keep it current. But in a virtual environment, that interrupt isn't going to happen as often as it should, because the VM is sharing CPU cycles with the rest of your system.

If you can install the VirtualBox guest additions in your Linux VM, that should fix the problem. Among other things, the guest additions direct Linux to read the time from the VM's clock device (which maps to the host's system clock) at every request.

If your VM is running an NTP (network time protocol) daemon or any other clock-sync service, disable or uninstall it. Tools like that tend to interfere with a VM's timekeeping. Better to rely on the host's clock (run NTP on the host if you need to sync your clock).

As a last resort, the Linux kernel has a "clocksource" parameter to configure how it tracks time. If you look in the /sys/devices/system/clocksource/clocksource0/... directory tree, you will see "available_clocksource" listing all of the clock sources available to your system (that is, to the VM), and "current_clocksource" identifying the one the kernel is using. If there is more than one available source, try changing your kernel to use a different one to see if it helps.

Here's a good article on the subject of Linux timekeeping in VMs, although it gets a bit technical: An introduction to timekeeping in Linux VMs
 



In the past, I’ve noticed some software makers try to sell expensive updates for “xxx compatibility.”

I just updated VMWare Fusion recently to get it to run Windows 10 faster than a crawl (ha ha, it still doesn’t do that). Is anyone running Fusion 10 under Mojave? I don't want to lay out another fifty bucks for Fusion 11.

I ran from Parallels to Fusion to avoid this constant upgrade cost thing, and now...
 


... I just updated VMWare Fusion recently to get it to run Windows 10 faster than a crawl (ha ha, it still doesn’t do that). Is anyone running Fusion 10 under Mojave? I don't want to lay out another fifty bucks for Fusion 11. ...
I'm only using Mojave to test so I can't answer.

I can say that VMware Fusion Pro 11 has been working reliably for two weeks with one exception. The VMware helper menu app crashes every time I launch VMware. I have the menu turned off so I wonder why it's even launching. This problem may be a remnant of upgrading from 8 to 11. I bought 10 but reverted to 8 because 10 was too problematic.

I run Snow Leopard client in VMware so I can use Snow Leopard's Mail.app (I haven't found a newer mail client that works as well). I also use Windows 7 and 10 in VMware.
 


I just updated VMWare Fusion recently to get it to run Windows 10 faster than a crawl (ha ha, it still doesn’t do that). Is anyone running Fusion 10 under Mojave? I don't want to lay out another fifty bucks for Fusion 11.
What kind of hardware are you running? I have Win 10 running under Fusion 10 and Sierra (10.12.6) on a mid-2012 MacBook Pro with SSD and 16 GB RAM, and I'm generally pleased with the performance.

What does your RAM/drive situation look like? I wonder if there might be an APFS issue or some problem with the installation.
 


I just updated VMWare Fusion recently to get it to run Windows 10 faster than a crawl (ha ha, it still doesn’t do that). Is anyone running Fusion 10 under Mojave? I don't want to lay out another fifty bucks for Fusion 11.
Perhaps it's a matter of settings for the VM. How much memory do you give it, and how many cores? I rarely use the Windows 10 VM, because it's so slow on my late-2013 MacBook Pro. Linux runs acceptably, but Windows does not.
 


Perhaps it's a matter of settings for the VM. How much memory do you give it, and how many cores? I rarely use the Windows 10 VM, because it's so slow on my late-2013 MacBook Pro. Linux runs acceptably, but Windows does not.
Windows 10 is quick enough in VMware for my light use. It's set up with 3 GB of RAM and 4 cores on both my Late-2012 iMac and my Early-2013 MacBook Pro Retina. Both Macs have 16GB RAM and SSDs, running macOS 10.12 Sierra.
 


What does your RAM/drive situation look like? I wonder if there might be an APFS issue or some problem with the installation.
16 GB RAM, SSD via PCIe card (2011 Mac Pro with a single 6-core).

Windows 7 is fine, but what I have to run requires Windows 10. I don't think it's programmed at all well.

I've tried numerous settings. Right now it's at 4 cores (I've had it up to eight, and it makes no difference) and 2048 MB RAM (I've had it higher, but it made no difference), with hypervisor on, code-profiling on, and IOMMU enabled. Video is set with Accelerate 3D Graphics on and 1024 MB (recommended) shared graphics memory. I don't use full-screen and have a 1920 x 1080 display (27 inches — I need the “large print”). The graphics card is a GeForce GTX 680 with 2048 MB on-board, using the nVidia drivers, up to date. System is High Sierra, but I was toying with the idea of moving to Mojave with version .1. HD buffering is on.

It is indeed APFS....
 


... It is indeed APFS....
I wonder if you're running into APFS's discontiguous write speed degradation as demonstrated by Tim Standing of OWC at the Mac Sys Admin conference (see PDF, look at slides 12-15).

It may help to move the virtual machines to an HFS+ volume.

Given how APFS manages file changes by creating new blocks, my guess is that in APFS it won't help to change the Hard Disk Advanced options, Split into multiple files and/or Pre-allocate disk space.
 


Windows 10 is quick enough in VMware for my light use. It's set up with 3 GB of RAM and 4 cores on both my Late-2012 iMac and my Early-2013 MacBook Pro Retina. Both Macs have 16GB RAM and SSDs, running macOS 10.12 Sierra.
My Windows 10 has more memory allocated (4GB) and 4 cores, but it is slow as molasses. The mouse moves jerkily with long pauses, and sometimes the pointer disappears altogether for a while, and I'm left trying to work out where it has gone by other means. I'd love to know if there's a way to make it usable, as it's to the point where I don't want to use it all.
 


Ric Ford

MacInTouch
My Windows 10 has more memory allocated (4GB) and 4 cores, but it is slow as molasses. The mouse moves jerkily with long pauses, and sometimes the pointer disappears altogether for a while, and I'm left trying to work out where it has gone by other means. I'd love to know if there's a way to make it usable, as it's to the point where I don't want to use it all.
What version of macOS are you using? Are you using APFS? And what Mac (model, year) do you have?
 


What version of macOS are you using? Are you using APFS? And what Mac (model, year) do you have?
It's a Late-2013 MacBook Pro (retina, 15 inch), macOS 10.13.6, using APFS, 16GB memory. Windows 7 was OK, but Windows 10 has been pretty much unusable since I installed it, pre-High Sierra.

One thing is that the virtual machine is stored on an SD card, so that's HFS+ on an MBR disk. I don't have enough space to keep the VM on my internal SSD. It doesn't seem to be a problem for the Linux VM, but Windows is extremely painful to use. If moving the VM is the answer, I'll have to rearrange where some files are kept, but I'm willing to do that if it fixes the issue.
 


Ric Ford

MacInTouch
One thing is that the virtual machine is stored on an SD card...
That's likely your problem. Run a benchmark on that card, and you'll see how slow it is.

(I also suspect APFS may be a problem, but I don't yet have enough information to say for sure.)
 



Ric Ford

MacInTouch
Oh well, I will have a look at trying to rearrange files this week. But why would Windows be hitting the disk just to move the pointer around the screen?
Windows may be swapping memory to disk, which would be excruciatingly slow in your case.

One simple solution would be a USB 3 SSD, such as a 250GB SanDisk Extreme Portable at $88 or a 250GB Crucial MX500 at $55 plus a Sabrent USB 3 SATA adapter at $9. (Even a fast USB 3 hard drive should be a big improvement over an SD card.)

You can also find advice with a web search, like this, for example, which has some surprising suggestions that worked on an older version of VMware Fusion.
 


OK, a quick test shows that moving the VM to the internal SSD makes a significant improvement in performance.

The reason I had my VMs on an SD card was to preserve space on my rather full internal SSD. I'm using a BaseQi Ninja Stealth Drive to have the SD card always available without taking up a USB port. It's a great little solution, but the lesson here is not to use it for the VMs.
 


... One thing is that the virtual machine is stored on an SD card, so that's HFS+ on an MBR disk. ...
There's the nub of the problem. Windows 10 is no different from macOS in that the OS is very chatty with the boot volume. And, SD cards are extremely slow compared even to spinning hard drives. Windows 10 performance can be acceptable from most modern hard drives that are well connected. With the VM files on SSD, Windows 10 performance can be excellent.

Note the "well connected" modifier above. Any storage volume will appear to perform poorly if the native device speed is limited by the connection speed.

I have never noticed any difference in VM performance between HFS+ and APFS, using identical physical drive configurations.
 


Ric Ford

MacInTouch
I have never noticed any difference in VM performance between HFS+ and APFS, using identical physical drive configurations.
I assume that you've only used an SSD (not a hard drive) for APFS and a VM - is that correct?

And, did you have the VM disk image on the APFS volume, or were you booting from APFS but locating the VM elsewhere?
 


I assume that you've only used an SSD (not a hard drive) for APFS and a VM - is that correct? And, did you have the VM disk image on the APFS volume, or were you booting from APFS but locating the VM elsewhere?
I have tested APFS on hard drives but gave it up as a waste of my time. My VM files have existed wherever was convenient, as my disk configurations changed over the years.

On my main desktop, moving my Movies, Music, and Pictures directories (using soft links) to another volume freed up enough space for my most-used VM instances on my boot volume. I made this change well before any APFS adventures. I have some infrequently used VMs on both SSD and hard drive volumes. Windows 10 VM performance directly follows the speed of the volume holding the VM files. HFS+ versus APFS has made no apparent difference.

On my MacBook Pro, I don't store media files long-term. Even with current media and Adobe and Microsoft software suites, there is still plenty of working room with Windows 10 and Snow Leopard Server VMs installed on the 500GB boot volume.

During macOS beta testing, I often use an external USB 3 drive to test VMs between different physical machines and macOS versions. Again, HFS+ vs APFS differences are not apparent. Only the hardware speed limitations are significant.

Some related notes:

No non-boot drives have been affected by installing or upgrading to High Sierra or Mojave. My media drive, EyeTV archive, software/documents archive, and Time Machine drives remain HFS+, as they have been for years.

Generally, VM files should be excluded from Time Machine backups as many parts of the VM file set are touched during VM operation, and 70 GB added to a Time Machine backup every hour soon exhausts backup space.

Further, Time Machine backups made while using the VM are almost guaranteed to result in a corrupted VM on restore.

One better method is to copy important changed data files to macOS for backup and otherwise depend on Carbon Copy Cloner or the like to back up the total VM environment as part of macOS volume backup.
 


16 GB RAM, SSD via PCIe card (2011 Mac Pro with a single 6-core). Windows 7 is fine, but what I have to run requires Windows 10. I don't think it's programmed at all well. I've tried numerous settings. Right now it's at 4 cores (I've had it up to eight, and it makes no difference) and 2048 MB RAM (I've had it higher, but it made no difference), with hypervisor on, code-profiling on, and IOMMU enabled.
Does the chipset on a Mac Pro 6-core model support VT-d (IOMMU)? (Intel's Ark suggests otherwise, but I think it's technically a chipset issue.) Usually that is done at the 'bare metal" Hypervisor level (type 1). A "hypervisor" in Fusion would be a Type 2. Up from type 1, can emulate it with a bunch of traps, but with an Intel CPU from that era, emulation traps are relatively heavyweight to what current processors do. Programmed 'at all' may not be as much of an issue as opposed to performance tuned to older CPUs. New CPUs with quicker traps probably run better.

As much as folks generally bemoan Intel on having 'non-revolutionary' progress on the general x86 instructions over last couple of years, virtualization instruction support and performance have changed very substantively.
 


Does the chipset on a Mac Pro 6-core model support VT-d (IOMMU)? (Intel's Ark suggests otherwise, but I think it's technically a chipset issue.) ...
I also saw advice to shut off folder sharing, which is feasible if I use online "drives." I tried shutting off IOMMU, which makes sense. I do have a rather old processor.

Now I'm wondering if part of the problem is the slow virtualized Ethernet adapter, because the software seems to largely be interacting with an online server. Word starts up quite quickly and Windows 10 only takes 55 seconds to launch. Hmmm...
 


16 GB RAM, SSD via PCIe card (2011 Mac Pro with a single 6-core).

Windows 7 is fine, but what I have to run requires Windows 10. I don't think it's programmed at all well.

I've tried numerous settings. Right now it's at 4 cores (I've had it up to eight, and it makes no difference) and 2048 MB RAM (I've had it higher, but it made no difference), with hypervisor on, code-profiling on, and IOMMU enabled. Video is set with Accelerate 3D Graphics on and 1024 MB (recommended) shared graphics memory. I don't use full-screen and have a 1920 x 1080 display (27 inches — I need the “large print”). The graphics card is a GeForce GTX 680 with 2048 MB on-board, using the nVidia drivers, up to date. System is High Sierra, but I was toying with the idea of moving to Mojave with version .1. HD buffering is on.

It is indeed APFS....
I have a similar setup to you, and I don't have any of the issues you describe. I have a Mac Pro with Xeon W3680 processor and a GeForce GTX 680. My Win 10 VM has 1 core and 2GB of RAM, and I didn't touch any of the other virtualization settings. There's no jerkiness or other stalls. It behaves how I'd expect a normal Windows installation to work. The biggest differences from your setup, I think, are that I'm running on an HFS+ Fusion Drive, and VMware Fusion 8.5.10.

Have you tried a fresh Win 10 installation (you don't need a license key to install Win 10) on a new VM to see if that makes any difference? Alternatively, have you tried looking at Task Manager in your current Win 10 install to see what the CPU, Memory, Disk, and Network usage are like?
 


Have you tried a fresh Win 10 installation (you don't need a license key to install Win 10) on a new VM to see if that makes any difference? Alternatively, have you tried looking at Task Manager in your current Win 10 install to see what the CPU, Memory, Disk, and Network usage are like?
Hmmm. I'll have to try that. My current guess is that the software I'm using makes heavy use of the Internet and the problem is VMWare's poor network speed/reliability. Maybe I'll play with network settings first. It did seem OK running Office... slow to get the screen set up immediately after boot, but that's probably when it's also tapping Microsoft for the dozens-to-thousands of new software updates (both OS and antivirus) and such.

I might have been barking up the wrong trees. Or, alternatively, you might be more patient than I am ... or maybe I should cut Windows back to one core! That may also be the problem.
 


... or maybe I should cut Windows back to one core!
I'm running Windows Server R12 on a Mac Mini 2012 under VMWare 8.5.8 in Sierra (server). When I set it to use 2 cores (out of 4), performance went significantly down! Reverted to a single core, and it runs very well. Response from SQL Server is snappy.
 


You can download and install VMWare's free vSphere hypervisor. Once installed, it is a platform where you can create and manage VMs, each of which can run whatever OS you choose to install into it. We use this at work on a few servers to host several dozen Linux VMs.
Another option worth mentioning here is Proxmox VE. In their own words:
Proxmox VE is a powerful open-source server virtualization platform to manage two virtualization technologies - KVM (Kernel-based Virtual Machine) for virtual machines and LXC for containers - with a single web-based interface. It also integrates out-of-the-box-tools for configuring high availability between servers, software-defined storage, networking, and disaster recovery.
I am using Proxmox in my small business and have it running on a cluster of 5 Mac Minis (2011, 2012 and 2014 versions, all equipped with 16 GB RAM). For storage, the Minis use NFS shares provided by a XigmaNAS box (previously known as NAS4Free).

I initially started with a 2012 Mac Mini Server running OS X Server. Having reliability issues and growing needs, I switched to the free version of ESXi running a Nethserver and other VM instances. Running multiple Mac Minis with free ESXi without access to high availability and other premium functions proved bothersome. ESXi also became - somehow - instable and unable to run the different hosted services reliably.

This ‘forced’ me to explore alternative solutions. A couple of years ago I found Proxmox and have never looked back. Currently Proxmox is running in a 4-host Mac Mini cluster, reliably enjoying all kinds of features that are ‘premium’ in ESXi. By premium I really mean premium - look at the pricing model of ESXi.

My Proxmox cluster is currently running a mix of vm’s and containers (LXC and Docker): Mailcow for email, calendar and addressbook, Nginx reverse proxy, Apache2, MariaDB, Zulip chat, DokuWiki, Pihole, Resilio Sync, Softether VPN, etc.
 


Ric Ford

MacInTouch
Hmmm... just had a thought. I wonder if one could run a current version of macOS within VirtualBox in Linux on an old Mac - for example, macOS Mojave in VirtualBox on 64-bit Ubuntu 18 on a Mac Pro 1,1 (or any similar arrangement)?

I'm not sure I'm going to be able to test this but wondered if anyone else has or would.
 


Hmmm... just had a thought. I wonder if one could run a current version of macOS within VirtualBox in Linux on an old Mac - for example, macOS Mojave in VirtualBox on 64-bit Ubuntu 18 on a Mac Pro 1,1 (or any similar arrangement)? I'm not sure I'm going to be able to test this but wondered if anyone else has or would.
According to Oracle's notes, Mojave is a supported host but not a supported guest.
 


Ric Ford

MacInTouch
According to Oracle's notes, Mojave is a supported host but not a supported guest.
In fact, Oracle lists no Mac guest support there (for OS X 10.11 and later). However, I wonder if that is based on non-Mac hardware? My question was about running VirtualBox and new macOS versions on Mac hardware - though with 64-bit Linux as the host OS.

VMware promises to at least run Mojave in a macOS VM:
VMware said:
VMware Fusion Features
Ready for macOS Mojave
Launch virtual machines on Mac with macOS 10.14 Mojave, including APFS support, or safely test the latest macOS in a sandbox on your current Mac without disruption. With an updated UI and customizable support for the latest Touch Bar enabled Macs, Fusion is better than ever.
 


With the abandonment of 32-bit software, some of us have necessary applications (that are not going to be updated and have no alternative replacement) that will no longer work [after] Mojave.

I know that it is possible to use applications like VMware Fusion or Parallels to run older versions of an OS within the current version. I don't know how the new changes will affect the ability to emulate the 32-bit software, but am hoping for good news. I've never needed to do this before and would welcome any feedback from people who have.

What applications work best, which are the easist to set up and use, are there any gotchas to be aware of for someone just getting started...?

Thanks for the advice!
 


...I know that it is possible to use applications like VMware Fusion or Parallels to run older versions of an OS within the current version. I don't know how the new changes will affect the ability to emulate the 32-bit software, but am hoping for good news. I've never needed to do this before and would welcome any feedback from people who have. What applications work best, which are the easist to set up and use, are there any gotchas to be aware of for someone just getting started...?
In my personal opinion, Parallels is easier to use than VMWare and VirtualBox, but I'm sure others will chime in with pros and cons of each.

I've outlined obtaining, installing and setting up Mac OS X 10.6 Server in a simple step-by-step fashion on my MacStrategy web site, here. I'm planning on doing a similar one for OS X 10.8 when I get the time.

I also have an article about 32-bit applications here, including recommendations for which macOSes are best for virtualisation in this scenario. Basically, Mac OS X 10.6 Server, OS X 10.8 (if you have a licence or can pay for it and don't want all the iCloud internet stuff), or OS X 10.11 appear to be the best options.

You also need to consider what applications you are going to virtualise. Some may require specific hardware that is either not emulated at all or is not emulated very well. Examples of this are games and apps that require dedicated video/audio hardware.
 


Back when I was using Snow Leopard most of the time, I set up a Mavericks VM on my 5,1 Mac Pro’s Snow Leopard drive. It worked surprisingly well.

With Mojave and whatever desert regions come next, the idea of just dedicating a drive or machine to older OS versions and apps seems like the easier approach.
 


Back when I was using Snow Leopard most of the time, I set up a Mavericks VM on my 5,1 Mac Pro’s Snow Leopard drive. It worked surprisingly well. With Mojave and whatever desert regions come next, the idea of just dedicating a drive or machine to older OS versions and apps seems like the easier approach.
I agree!

My Mac Pro 5,1 has startup disks for Snow Leopard, Mountain Lion, Sierra, and High Sierra.

I can also run Snow Leopard Server in a VM, but sometimes I still need the non-VM version of Snow Leopard.
 


I agree! My Mac Pro 5,1 has startup disks for Snow Leopard, Mountain Lion, Sierra, and High Sierra. I can also run Snow Leopard Server in a VM, but sometimes I still need the non-VM version of Snow Leopard.
Similar set up on my 5,1 Mac Pro - Snow Leopard, Mavericks, El Capitan and Sierra. One of the externals houses another Snow Leopard drive and a Mountain Lion drive. I have Snow Leopard Server VMs on the Mac Pro and a MacBook Pro.
 


Similar set up on my 5,1 Mac Pro - Snow Leopard, Mavericks, El Capitan and Sierra. One of the externals houses another Snow Leopard drive and a Mountain Lion drive. I have Snow Leopard Server VMs on the Mac Pro and a MacBook Pro.
On my Mac Pro 4,1 flashed to 5,1 I have 4 hard drives, each partitioned using Disk Utility - bootable partitions for Snow Leopard through Sierra. This is OK if one doesn't mind re-booting and selecting via the Option/Alt key. Otherwise, virtualization is more convenient for sure if you have to alternate between OSes.

Has anyone virtualised High Sierra or Mojave? Was your firmware upgraded? Or did they just run with the Sierra firmware?
 


On 10 July 2018 in this virtualization thread, David Charlap gave this good advice:
... If you can install the VirtualBox guest additions in your Linux VM, that should fix the problem. Among other things, the guest additions direct Linux to read the time from the VM's clock device (which maps to the host's system clock) at every request.
But if you try and find where to download the guest additions, you might not know where to look. The VirtualBox User Manual in Chapter 4 states:
The Oracle VM VirtualBox Guest Additions for all supported guest operating systems are provided as a single CD-ROM image file which is called VBoxGuestAdditions.iso. This image file is located in the installation directory of Oracle VM VirtualBox.
It is not clear just what they mean by this. It's not in the Contents of the VirtualBox app (at least not on VirtualBox 6.0.4). I have found it though at

If you are going to install these guest additions, you should read and understand Chapter 4 of the VirtualBox user manual.

In my use case, I have set up the Raspberry Pi (2018-11-26-rpd-x86-stretch.iso) Raspbian OS (a distro of Debian for x86), which will make developing for my RPi 3B+ much easier.

If you wanted to boot directly from the Mac boot loader, i.e. not using VirtualBox, you should watch this video first:

Scroll down to the second video on that screen to see how to make a bootable USB for the Mac. I know it works on my Mac Pro, booting that Linux distro in EFI mode (hold down the alt/option key). You get to play live with the distro and later on install it if you really need to (as opposed to VirtualBoxing it).
 


But if you try and find where to download the guest additions, you might not know where to look.
... I have found it though at http://download.virtualbox.org/virtualbox/6.0.4/
You're doing that the hard way. Your running copy of VirtualBox always includes the corresponding guest additions disk image. No need to download anything.

With your VM running, go to the menu bar and select Devices -> Insert Guest Additions CD image...

The image, built-in to the VirtualBox application, will be inserted into the VM's virtual optical drive. The guest OS should mount it, just like any other optical disk. That disk will contain guest addition installers for Darwin (macOS), Linux, Solaris, Windows and OS/2.

There are autorun files for several popular operating systems, so (depending on how you have your guest configured) you might be able to just click a button after inserting the virtual disk. Or, if that doesn't work, you may have to manually run the appropriate installer application.

When you're done running the installer, eject the virtual disk using the guest OS's preferred mechanism. I recommend rebooting the guest OS at this point as well.
 



Oh, virtualization is definitely a solution, and you don't even have to resort to Windows. Last year, my main system was still on Yosemite, so in order to do my taxes, I ran TurboTax in an El Capitan VM just fine.
That sounds a fair bit easier than slicing a hard disk drive or SSD into multiple partitions and installing different versions of macOS just to run each new year's TurboTax.

A compatibility matrix would be very helpful - three variables needed: macOS version of the host system; Parallels (or VMWare or VirtualBox) version; macOS version of the guest system.

Does anyone know of such a table having already been worked out? If so, please post a link or synopsis. Thanks!
 



Amazon disclaimer:
As an Amazon Associate I earn from qualifying purchases.

Latest posts