How to install Linux on a Macintosh and dual boot with macOS

Got one of those shiny Mac laptops, but Linux has you realising computer freedom is best?

This is the definitive guide!

UPDATED FEBRUARY 2019

Using a Macintosh is (mainly) a delight. The hardware is solid, fast, and beautiful, but over time, macOS has become dumbed down and in some places, downright silly. I long since realised that I could do exactly what I wanted to do with my macbook using Linux, rather than being encumbered by having to follow the ‘Apple’ way of doing things. I never looked back. Here’s the definitive guide to installing Linux on a Mac.

DISCLAIMER: This is an advanced tutorial which sometimes works at the command line and can cause irreparable damage to your data. If you do proceed, make sure you have backed everything up with TimeMachine or such like tools. The Ultimate Linux Newbie Guide cannot be held responsible for any damage caused as a result of following this tutorial.

This tutorial has been tested on a late 2013 Macbook Pro Retina 15″, however it should work with any EFI based Mac (more on that in a bit). The EFI based Macintosh started around 2008 (you can check the list of the Apple EFI systems here). This should include Macbook Pros, Macbook Air, iMac and probably Mac Pro’s…

Update: Apple’s new P2 ‘Secure boot’ chip

To find out if you have the T2 chip:
1. press and hold the Option key while choosing Apple () menu > System Information.
2. In the sidebar, select either Controller or iBridge, depending on the version of macOS in use.
3. If you see “Apple T2 chip” on the right, your Mac has the Apple T2 Security Chip..

Unfortunately, from 2018, Apple decided to add a new ‘secure boot’ T2 chip into their mac hardware. This basically means that you can’t use anything other than macOS on Apple hardware, however it is possible to switch off secure boot. See the image to the right to show you how to find out if your machine has the T2 chip.

If you have said T2 chip, then you’ll need to disable the secure boot option in order to install Linux on your mac. Note that I haven’t tested this (I don’t have a new mac), so please let me know in the comments if it works for you.

You’ll need to start your mac into the Recovery mode and launch the Startup Security Utility. To do this, just follow these steps:

  1. Turn on your Mac (or restart it if it’s already on), then press and hold Command (⌘)-R immediately after you see the Apple logo. Your Mac starts up from macOS Recovery.
  2. When you see the macOS Utilities window, choose Utilities > Startup Security Utility from the menu bar.
  3. When you’re asked to authenticate, click Enter macOS Password, then choose an administrator account and enter its password.
  4. Now look at the options, there should be an option for ‘Secure Boot’. Switch it off by selecting ‘No security’.
  5. There should also be an option about ‘External Boot’. Ensure that this is set to ‘Allow booting from external media’.
The Startup Security Utility defaults enforce the highest security by default. This won’t let you install Linux on your mac, let alone boot from a USB stick.

Dual Booting with Mac OS (yes, you can keep MacOS!)

I am writing this assuming that you want to keep Mac OS X on your hard drive and that you wish to dual-boot it at any time. You should have plenty of free space on your disk drive (the more the better), so either delete some cruft or move some of your old data onto a separate external archive hard drive (because I know you got one or ten of them lying around!).

I used MacOS Mojave, which is the latest version of macOS at the time of writing. Recently Apple introduced a ‘security feature’ called ‘SIP’ (System Integrity Protection) which you will additionally have to overcome if you are using El Capitan or newer. More on that in a bit. We will be installing Ubuntu. This tutorial was written with Ubuntu , but this should apply to any Linux distro more or less, although your mileage may vary with Video stuff particularly.

NOTE: You may have to install an EFI boot manager (rEFInd) and/or do a few gnarly things to get your hardware working before it is Linux ready, so if you get stuck at any point, read towards the end part of this guide.

The tutorial you are about to read has four main steps. These are:

  • Downloading and ‘burning’ your Linux distro of choice to a USB stick.
  • Partitioning your hard drive
  • Installing Linux
  • Finishing up, which includes: Adding driver. Disabling SPI and enabling EFI. Nice to have items, including being able to see your Macintosh files from Linux.

Step 1: Downloading and ‘burning’ your Linux distro image of choice to a USB stick.

Installing Linux on a Macintosh via USB stick

Next, unless you haven’t already downloaded the Linux distribution of your choice, it’s time to go grab it. You’ll find that you’ll download a .iso file, which we will need to ‘burn’ onto a USB stick. Make sure you have a 4GB or bigger USB stick that you don’t care about deleting ready for use.

For this particular tutorial, we are using Ubuntu, however most other Linux distributions should work. Using more hard-ass systems like Arch or Slackware, or even Debian, this will be more challenging. This guide is challenging enough, so do what you will, but I recommend you stick to the easier distros to begin with like Ubuntu or Linux Mint.

Make sure you download the x64 version of the distribution you choose, if there is an EFI boot version, choose that also.

Using Etcher to ‘burn’ your ISO image to a USB stick.

There is now a snazzy tool called Etcher (you can download it for free from balena.io/etcher. This would now be my choice for downloading and burning a Linux distribution download to a USB stick because it’s literally as easy as popping in your USB stick and pressing go!

Now that you’ve got your ISO file downloaded, and you’ve downloaded BalenaEtcher, Fire up Etcher, and follow these steps:

  • Click ‘Select Image’. Select the Linux ISO file that you just downloaded.
  • Insert your USB stick that you want to put the Linux distribution onto (note it will be completely wiped).
  • Click ‘Select Drive’. In many cases, this might not even be necessary (Etcher is clever enough to see the USB stick and select it for you).
  • Click Flash!
etcher burning Ubuntu ISO to a usb stick
Etcher in action – a super quick and easy tool to put your Linux ISOs onto a USB stick.

Yep, that’s it! If there is any reason why you can’t get this to work, then you can follow the ‘old fashioned’ way of doing it over on this short guide.

Step 2: Partitioning your Macintosh hard drive

This step chops your disk up the way you want it – some space for macOS, some space for Linux. This is called ‘Partitioning’. Make sure that you delete as much junk from your mac before you start, that way you can give as much space as you can to Linux.

To modify your partition table in macOS simply look in your Utilities folder, you’ll find Apple’s Disk Utility. If you like, quickly scan your hard drive for errors, just to make sure it’s all sweet before we get down to business. Repair any errors you may find.

Once you are ready, you will see a list of internal drives on the left hand side. Your Disk Utility may look different if you are using an older version of macOS, but it still offers the ability to resize a volume.

If you are using a recent version of MacOS, you’ll find that macOS now uses a notion of disk containers. To see everything that’s going on, you’ll need to click the icon to the top left, it should show you ‘Show Only Volumes’ or ‘Show All devices’. Select Show All Devices. The screenshot below shows this action.

Disk utility all devices macos
Select ‘Show All Devices’ from the top left menu in Disk Utility.

On the hard drive that your macOS partition exists on, click on the top drive, not any subsequent partitions listed below it. Click on the ‘partition’ button (it looks like a pie chart in modern versions of the utility).

In newer versions of macOS, they prefer you to use these ‘container volumes’. That’s fine for macOS, but you want a partition to put Linux on. If you see the above dialogue box appear, make sure you click ‘Partition’.

Next, you’ll see the partition pie chart. You will see you can move the slider around the pie to resize your partition(s). Pull the size slider back for the Mac OS partition to release the free space on the disk. Make a blank partition until you have enough space for your new Linux system. Make it as much space as you are willing to, I gave my Linux partition 100 GB.

macos disk utility resize

It’s essential that you choose to format the partition as MS-DOS (FAT) format. I gave it the name ‘Linux’ so that it’s easy to tell what it is. Once you’ve done that, click Apply.

Click the Partition button.

You’ll see the box to the left. Apply the changes by clicking the Partition button and let the resize operation complete. If you have an SSD, this should be relatively quick (a few minutes). For older hard drives, this is going to take some time!

You’ll probably see this message, just click ‘Continue’.

NOTE: I also recommend also making a swap partition, although this isn’t completely necessary. To do this, simply follow the steps you did above but make a smaller partition, eg 8GB.

The below screenshots show the creation of a SWAP partition and the final ‘picture’ of what your macOS disk should look like.

Step 3: Installing Linux on that Mac!

Woo-hoo! This is the fun part! Now we get to install the operating system that your Macintosh has been longing for.

Thunderbolt to USB Adapter - Apple
Using a USB or Thunderbolt Ethernet Adapter is going to save you a lot of headaches!

Switch your Macintosh off completely. Connect your Ethernet to Thunderbolt adapter (or USB Ethernet Adapter) and your USB drive we made earlier. If you don’t have one of those ethernet adapters, life is going to be tricky for you, you are going to have to download the wireless drivers and install them manually to get things working. If you don’t have one of the adapters, ask a friend for one, or buy one cheap from Ebay or such like. It will save your sanity.

Turn on your computer and hold down the option/alt key. You’ll see a menu pop up which you can see your Macintosh HD as well as the USB stick. It will be named EFI Boot or something similar. Use the cursor keys or mouse to select that and hit return. PS: Make sure you revert to using your laptop’s keyboard and mouse for the time being (your bluetooth keyboard, and probably your mouse won’t work until paired).

Hold down the alt/option key whilst starting up your mac and you’ll see this screen.

Shortly after, you’ll see the Ubuntu installer start up. Follow through the steps as usual. You’ll get to a screen that says ‘Updates and other software’. Make sure you tick the box that says Install third-party software for graphics and Wi-Fi.

ubuntu 18.10 - Select third party software
Make sure to select a normal installation, and tick the box ‘Install third-party software’.

The next step, and arguably the most important step in the entire process is about installing Linux on the partitions you previously configured in the Disk Utility. You’ll see a dialogue saying ‘Installation type’. Make sure that you choose the option ‘Something else’. If you select the other options, these will delete your installation of macOS and make you have a bad day (TM).

In installation type, ensure you choose ‘Something else’.

In the next dialogue, you’ll see the partition table (and probably some empty partitions too). If you created a swap partition as per my example, you’ll see two FAT32 partitions. One will be the small 8GB SWAP partition, the other 100GB (in my case) is the main Linux partition.

You can see the two fat32 partitions created with the Apple Disk Utility. In my case sda3 (8.7GB) and sda4 (99.8 GB).

You’ll probably see three FAT32 partitions. One of them will be near the start of the disk and won’t resemble the capacity of the partitions you created. This is the EFI boot partition. It’s tiny (209.7 MB). Make sure you leave this partition well and truly alone, otherwise you’ll possibly not be able to boot your mac!

If you didn’t create a swap partition, don’t worry, you can still do so by locating the empty partition you made and create 2 partitions out of it. Simply make a big partition and a small partition (roughly 8-16 GB in size). The big partition should be the remainder of the free space. The big partition should be ext4 in type, and should be formatted with the mount point of “/”. The small partition should be formatted as swap.

It’s time to set up the partitions to use Linux. To do that, I selected my first (smaller) partition, the one that’s 8.7GB. I’m going to use that as the Swap partition. Select that partition by clicking on the entry for it in the list of partitions. In my case, that’s /dev/sda3. It must be of type fat32.

installing Ubuntu 18.10 using the partitioning tool to create a swap partition

Once you click on it, click the button that says ‘Change’. A dialogue saying ‘Edit partition’ will appear. Leave the size as it is, but click on the drop down which will probably say ‘do not use’. Select ‘swap area’ from this list. Press OK.

Next, you want to allocate the large partition to be the main Linux partition (it’s called /). Click on the large partition created in Disk Utility (in my case, /dev/sda4). It also has a type of fat32.

installing Ubuntu 18.10 using the partitioning tool

Clicking the ‘Change’ button will bring up the now familiar Edit Partition dialogue box. Again, leave the size as is, and from the ‘Use as’ drop-down, select ext4.

installing Ubuntu 18.10 formatting / partition

Click on ‘Format this partition’ if it isn’t already ticked. By default, the mount point will be / – leave that as is. Click OK.

If you’ve done everything right, you’ll now have two partitions. One which is small, of type swap and the other, the larger of the two, will be formatted as Linux ext4. These partitions will lie in amongst the other ‘unknown’ partitions (these are your macOS partitions).

This is what my setup looked like before pressing the Install Now button.

Once you are happy, click the Install Now button. You’ll see a dialogue box asking you to confirm the changes are to be written to disk. This is your last chance before Ubuntu goes off and does it’s thing to your disk. Again, I can’t stress how important it is that you’ve taken that Time Machine backup with your mac before you do this. Anyway, I’m sure you’ve backed everything up… right? 🙂 So click on ‘Continue’ and let the good times roll! Everything else should be pretty standard as per the normal Ubuntu installation.

Once the install has finished, the installer will tell you to remove the installation medium. Remove the USB stick and it enter to restart the computer. Once you hear the tell-tale Apple chime, hold down the  alt/option key. Once again, you’ll see your MacOS hard drive, as well as the newly installed Linux system. It’ll probably be called ‘EFI Boot’. Make sure you select that.

That’s it! With any luck, Ubuntu should start up in a few moments and you’re able to use your snazzy mac hardware with a better operating system! However, you may note that you probably won’t have a few things that work out of the box. Most of these will be be covered off on the next step.

Step 4: Finishing up and fixing a few problems

CPU Running Hot?

If, like me, you notice that the mac starts running hot and the CPU fans are burning away then have a look at the output of the CPU history in the resources view of the System Monitor app (or using top at the terminal), you’ll probably find that a ‘kworker’ process is chewing up CPU. This is a well known bug, so to fix this, run the following commands at the terminal:

$sudo -s
grep . -r /sys/firmware/acpi/interrupts/

You’ll see a list of probably 70 or so lines relating to the firmware that works with ACPI (Advanced Configuration and Power Interface). Most of these are doing their thing quite happily, but you’ll find one (or maybe even two) of them that has a number like gpe16 has a large number beside it. It’ll look like this:

/sys/firmware/acpi/interrupts/gpe16:  225420     STS enabled      unmasked

When you think you’ve found it, you can simply disable it, but first, just back up the file, just in case you make the wrong change. Note I am using gpe16 as that’s the one I found the problem with, yours is probably different:

cp /sys/firmware/acpi/interrupts/gpe16 /root/gpe16.backup
echo "disable" > /sys/firmware/acpi/interrupts/gpe16

If after a few seconds (say 30-60), the CPU fans stop whirring, and system monitor/top starts showing normal usage statistics, then you know it’s the right one. If it isn’t the right one simply echo “enable”, rather than disable.

To make the change permanent, do the following tasks, again at the terminal, changing the value ’16’ to the value you used:

# crontab -e

  --Add the below line to the crontab, so it will be executed every startup/reboot:

@reboot echo "disable" > /sys/firmware/acpi/interrupts/gpe16

  -- Save/exit. Then, to make it work also after wakeup from suspend:

# touch /etc/pm/sleep.d/30_disable_gpe16
# chmod +x /etc/pm/sleep.d/30_disable_gpe16
# vim /etc/pm/sleep.d/30_disable_gpe16

  -- Add this stuff:

#!/bin/bash
case "$1" in
    thaw|resume)
        echo disable > /sys/firmware/acpi/interrupts/gpe16 2>/dev/null
        ;;
    *)
        ;;
esac
exit $?

Accessing your Macintosh files from Linux

Sponsored Link:
Tech Tip: Windows business applications including Office 365 can be accessed from PCs/Macs/Android/iOS/Linux devices with virtual desktop hosting and other cloud servers and services with full support from Apps4rent.com

Okay cokey. Now here’s the thing. Apple can be real pains in the asses some times (read, all the time, at least these days). It is quite likely that you have what’s called CoreStorage, if you have anything OS X 10.10 or newer. This provides an encrypted, journaled file system; even if you haven’t installed FileVault (if you have, turn that off!).

To give full read/write access to your Mac OS X partition from Linux, you will need to revert it back to standard HFS+. To do this, you can pretty much enter one simple non-destructive command.

First up, at the terminal, issue the command diskutil cs list. You will see something like the below. If you know LVM in Linux, this is pretty much the same thing. Your main Mac OS X partition (Logical Volume) should be in Apple_HFS format.

As long as the ‘Revertible’ flag is set to Yes, you are good to go. Simply enter the following command:
diskutil coreStorage revert [THAT LONG STRING OF TEXT]

The long string of stuff is that big long alphanumeric string of text highlighted in the red box, you want to use copy and paste it to make sure you don’t make a mistake!

The conversion took ages for me, however your mileage may vary, depending upon how much data is on your drive, and how fast your drive is. If you type diskutil cs list again, you’ll see how much % of the conversion has been accomplished. Don’t reboot your machine until that’s over and done with, but after then, you can safely mount your OS X partition with full read/write access.

First, make sure that you have hfsprogs installed. Example installation command:

sudo apt-get install hfsprogs

Next, mount or remount the HFS+ drive; commands need to be as follows:

sudo mount -t hfsplus -o force,rw /dev/sdXY /media/mntpoint

or

sudo mount -t hfsplus -o remount,force,rw /dev/sdXY /mount/point

If you want it to mount each time you start up your tux-ified Macintosh, you’ll need to add the entry to the fstab (sudo vi /etc/fstab):
/dev/sdXY /media/mntpoint hfsplus force,rw,gid=1000,umask=0002 0 0

Where your user gid is 1000 (use the id command to find out your gid)

FaceTime HD Camera:

You’ll need the FaceTime HD module for your kernel. It’s a bit of a pain in the butt to get going, but it does go once you’ve set it up. Full documentation is here: https://github.com/patjak/bcwc_pcie/wiki/Get-Started#get-started-on-ubuntuRELATED:   Howto: Facebook Messenger on the command line

Here are the steps I followed to get everything working on Ubuntu. You need to be running a fairly recent version of Ubuntu (16.04 onwards should be fine), so 18.10 will be no worries. You’ll need to run all the following commands from the Terminal.
$ indicates running the command as a normal user

$ indicates running the command as a normal user
# indicates as root (use the sudo command), eg: $sudo apt-get install …

  • Install the dependencies : # apt-get install linux-headers-`uname -r` git kmod libssl-dev checkinstall curl xzcat cpio
    • (Note that xzcat is called xz-utils on Ubuntu 18.10).
  • Extract and install the firmware file:
    • $ git clone https://github.com/patjak/bcwc_pcie.git
    • $ cd bcwc_pcie/firmware
    • make
    • sudo make install
  • The output should say ‘Copying firmware into '/usr/lib/firmware/facetimehd'
  • Now you need to build the kernel module (driver). Change into that dir: $ cd ..
  • (you should now be in the bcwc_pcie folder)
  • Build the kernel module: $ make
  • Generate dkpg and install the kernel module, this is easy to uninstall later: # checkinstall
    Run depmod for the kernel to be able to find and load it: # depmod
  • Load kernel module: # modprobe facetimehd
  • Try it out by installing like ‘cheese’ and seeing if your webcam works.

No video device, or /dev/video does not exist?

I had a problem with the driver at this point, where /dev/video was not there, which was easily fixed by performing the following steps:

In some scenarios, you’ll have to unload bdc_pci before inserting the kernel module, or /dev/video (or /dev/video0) won’t be created. Do this with modprobe -r bdc_pci. If you’ve already done a modprobe facetimehd, also do a modprobe -r facetimehd, before re-running modprobe facetimehd. This fixed the issue for me.

Making the camera work on startup

If you want the driver to be enabled on startup, extra steps may be required. On Ubuntu, the following should work:

$sudo echo facetimehd >> /etc/modules

sudo gedit /lib/systemd/system-sleep/99facetimehd or if /lib/systemd/system-sleep does not exist: sudo gedit /usr/lib/systemd/system-sleep/99facetimehd

Paste this in the empty file:

#!/bin/sh
case $1/$2 in
pre/*)
echo "Going to $2..."
modprobe -r facetimehd
;;
post/*)
echo "Waking up from $2..."
modprobe -r bdc_pci
modprobe facetimehd
;;
esac

And save.

Make it executable: sudo chmod a+x /lib/systemd/system-sleep/99facetimehd or sudo chmod a+x /usr/lib/systemd/system-sleep/99facetimehd

Making sure when you update your system your facetimehd driver updates too

When you perform a system update in Ubuntu, it often updates the Kernel too. When you update the kernel, the modules need to be upgraded to work with that Kernel version. As you’ve build a custom module, you’ll need to ensure that the module is up to date too. Here’s how to do that:

You will need to verify dkms.conf that the module name facetimehd and version number 0.1 are correct and either update the dkms.conf or adjust the instructions where -m and -v are used.

  • Install needed packages: # apt install debhelper dkms
  • Remove old package if installed: # dpkg -r bcwc-pcie
  • Make a directory to work from: # mkdir /usr/src/facetimehd-0.1
  • Change into the git repo dir: $ cd bcwc_pcie
  • Copy files over: # cp -r * /usr/src/facetimehd-0.1/
  • Change into that dir: # cd /usr/src/facetimehd-0.1/
  • Remove any previous debs and backups: # rm backup-*tgz bcwc-pcie_*deb
  • Clear out previous compile: # make clean
  • Register the new module with DKMS: # dkms add -m facetimehd -v 0.1
  • Build the module: # dkms build -m facetimehd -v 0.1
  • Build a Debian source package: # dkms mkdsc -m facetimehd -v 0.1 --source-only
  • Build a Debian binary package: # dkms mkdeb -m facetimehd -v 0.1 --source-only
  • Copy deb locally: # cp /var/lib/dkms/facetimehd/0.1/deb/facetimehd-dkms_0.1_all.deb /root/
  • Get rid of the local build files: # rm -r /var/lib/dkms/facetimehd/
  • Install the new deb package: # dpkg -i /root/facetimehd-dkms_0.1_all.deb

If you have any trouble, please read this guide on making a DKMS package:http://www.xkyle.com/building-linux-packages-for-kernel-drivers/

Problems booting Linux? Fix it by installing the EFI boot manager and disabling SIP protection.

Hopefully the following section won’t bug most of you any more. With recent versions of most Linux distros supporting EFI, this shouldn’t be an issue. However, if you are having issues getting your distro to boot, then read on.

EFI stands for Extensible Firmware Interface and is now pretty much commonplace in Macs and PCs across the industry. It replaced the trusty old BIOS system that PCs had used since the 1980s. Installing Linux on a BIOS based machine was trivial, but now with Apple’s take on EFI on their customised hardware, it can be a little challenging. No worries, this is the Ultimate Linux Newbie Guide. We got this!

Download rEFInd

The red circle indicates where to download rEFInd
The red circle indicates where to download rEFInd

rEFInd is a boot-loader for EFI based machines. Think of it like bootcamp, or GRUB for GRUB 🙂 You’ll want to download rEFInd from the rEFInd website:

Now, if you take a look around the rEFInd website, you’ll see it looks like the guy that wrote it believes in punishing everyone that wants to use it. It took us about 20 minutes just to find the frigging download link! So the ULNG has taken the time to go through all the pertinent steps to make it shit tons easier for you!

The version of rEFInd that we used is 0.10.0, and we used the zip archive version. Once you download the binary, you are going to need to start the rest of your work from the Terminal, so open up the Terminal from the Utilities folder on your Macintosh and head over to your Downloads folder where you saved rEFInd to.

If the zip archive is not already unzipped, unzip it using the unzip command and head into the newly created refind-bin-0.11.0 folder:

$unzip refind-bin-0.11.0.zip

$cd refind-bin-0.11.0

For the next step, take a note of the full directory where you downloaded the refind tool into. For example /Users/bob/Downloads/refind-bin-0.11.0 (you can also type pwd at the command prompt to tell you which present working directory you are in).

Installing rEFInd by working around SIP

Before we can properly install rEFInd, we will need to take care of a pesky thing that Apple put into their hardware called SIP (System Integrity Protection). There are a couple of ways to do this, but I found the easiest way to do so is to pop your system into recovery mode and issue a command from the terminal there. There is a bit more information on this process over here.

To enter recovery mode on your Macintosh, shut your machine down completely. Give the machine around 30 seconds and then switch back on. Now quickly hold down the Command and R key at the same time until at least you hear the Apple ‘chime’ sound. Shortly you will enter recovery mode. I recommend plugging in an Ethernet cable to do this, however it is possible to do with WiFi.

Once you are in the Recovery tool, enter the Utilities menu up on the top bar, and click on Terminal.

Issue the following command:

csrutil disable

NOTE: Using macOS from Sierra onwards, the csrutil tool may have been removed. If csrutil is unavailable for whatever reason, don’t despair, simply go into the directory that you downloaded refind into and run refind-install. Earlier, you noted down this folder, so just cd to it, for example:

$cd /Users/bob/Downloads/refind-bin-0.11.0/

Once you have done that, install rEFInd:

sudo ./refind-install

(if you are prompted for a password, note that this is your own mac password).

NB: if you have issues and find that rEFInd doesn’t operate properly, you can also try the –alldrivers flag (but use this with extreme caution!) $sudo ./refind-install --alldrivers

Once REFind is all installed, reboot the mac and you should be good to go. All going well, you should be seeing the rEFInd menu. Use the cursor key to select your Linux installation and hit that return key. Fingers crossed, your system will start up without much of a hitch!

If you don’t see the rEFInd menu on startup, try starting up your mac whilst holding down the Command key (or if that doesn’t work, the alt/option key).

—YOU PROBABLY NO LONGER NEED THE BELOW INFORMATION!—

The next bit of text was necessary for versions of rEFInd before 0.10.0. This guide has been updated for version 0.11.0, and so you shouldn’t need to do any of this. Isn’t that great?! However, if things don’t work the way you expect, then you can do this whilst still in the recovery tool, and in the refind folder.

Now it’s time to edit the EFI config file, but you will need to mount that hidden EFI partition first. Thankfully, rEFInd has a little tool you can use to mount the partition:

$sudo mountesp

Edit /Volumes/ESP/EFI/refind/refind.conf. Like me, you may find the refind.conf file is in /Volumes/ESP/EFI/BOOT, instead of a folder called refind.

$sudo nano /Volumes/ESP/EFI/refind/refind.conf (or use vi like me, if you are that way inclined. Just not emacs!).

locate the line that says scanfor and edit it to say:

scanfor internal

If no such line exists, add it into the file near the top.

Next, change the config file to load the appropriate Linux file system driver. Check for a line that starts fs0. If no such line exists, add it as below, otherwise edit it:

fs0: load ext4_x64.efi

fs0: map -r

Save the file and quit your editor. That’s pretty much it for the rEFInd bit. That is the hardest part over and done with. If you want to be sure it worked, you should power off your machine and power on again. If you see a grey screen with the rEFInd logo, then it has worked. You should be able to chose the Mac OS X logo and hit return to start up OS X again.

Screen backlight, Keyboard Backlight and Volume control hotkeys

I haven’t had any issues with the screen backlight, keyboard backlight and the volume control keys since Ubuntu 17.10, however if you do, a package is now available for Debian and Ubuntu called ‘pommed’, which handles the hotkeys found on the Apple MacBook Pro, MacBook and PowerBook laptops and adjusts the LCD backlight, sound volume, keyboard backlight or ejects the CD-ROM drive accordingly.

Installation is as simple as installing the package through apt-get:
sudo apt-get install pommed
sudo pommed
This will run pommed as a daemon (run in the background).

If that doesn’t work for whatever reason run it in the foreground and check for any errors sudo pommed -f. On my Late 2013 Macbook Pro Retina 15″, pommed did not work for me. Check out Jessie’s blog and accompanying script for a more manual solution if you face this problem too.

NB: I did find that my keyboard backlight buttons now work out of the box on Ubuntu 17.10.

Nvidia Graphics & Retina Display

The graphics display should generally work out of the box, however there may be ‘interesting’ graphical issues. Not all of these might be fixable, but give the NVidia drivers a try, and if you still don’t have any luck, read the many forums until you get a solution that works for you.

sudo apt-get install nvidia-driver xserver-xorg-video-intel

Note if you are not using xorg, you’ll need to make the appropriate changes here. Maybe best to stick with xorg for now!

On newer macs, they use AMD graphics rather than NVidia. They also have their own set of unique problems in some cases. As I don’t have a mac with AMD graphics, you’ll need to do a little more googling on that.

Your Macbook Pro Retina display is also known outside the Apple world as an HiDPI display (high resolution graphics). Using the nvidia driver ensures that the maximum resolution of your display is achieved, however if you are used to seeing things extra small (therefore more screen real-estate, you can enable HiDPI scaling for GNOME via the following Terminal command and log out and log back into GNOME:

gsettings set org.gnome.desktop.interface scaling-factor 1

Setting it to a value of 2 returns the display to how it was before. You can also edit this setting within the dconf editor (GUI application)

If you are using another window manager such as KDE or are having issues with other apps not playing nicely, have a look at the ArchWiki for hints on HiDPI.

Okay, that about wraps it up for this ditty, I hope it has worked for you. If it hasn’t, or you have some feedback to offer, we would love to hear it! Drop it in the comments, y’all 🙂

71 thoughts on “How to install Linux on a Macintosh and dual boot with macOS”

  1. Everything went according to Hoyle, on my MBP 8,2 late 2011, OS X 10.11.3 was very easy to follow (Thank You) except the last three commands, not that they were not easy to follow, it was I didn’t understand them. Would I mount my OS X partition to read and write from Linux MInt 17.3 Cinnamon x64 or back in OS X? And why would I want to when I want to use Linux as my operating day to day system? I’m beginning to hate OS X as much as I hate Windows.

    Can I put a plug in for tips, tricks, and tweaks for Linux Mint (mainly) but there is tweaks for Ubuntu also.
    https://sites.google.com/site/easylinuxtipsproject/mint-cinnamon-first

    Now on to read Jessie’s blog. Once again thank you for putting refind in noob’s terms.

    1. Thanks Dave! The only reason for mounting your Mac OS partition would be to be able to either move or access your docs/music/photos from your Mac partition. You would be mounting from linux for this .

      Plug accepted! If you’d like to see more mint stuff or other tips and tweaks on the site I’m open to ideas, and if you fancy being a contributor, let me know!

  2. So I had Kubuntu partitioned on my drive before installing El Capitan, that I was able to dual Boot into simply by holding optino and selecting it from the Mac’s startup screen (it read Windows, like a Boot Camp partition). I tried this, and wasn’t clear on loading the Linux file system driver, and how to access that. I won’t need to delete and reinstall Kubuntu will I? I figured once I can get reFInd working it will recognize the partition that’s there already.

    1. In theory, yes, as long as you re-install grub, it should boot your existing Kubuntu partition without having to re-install. I’d recommend you do it though, and just save your data into a separate partition. It’ll make things cleaner.

  3. Thanks a million!!! I’ve spent days trying to install Ubuntu on my Macbook Air 13 2013 for at least five times without any success. With the help of your guide, I have now successfully dual-booted Ubuntu 14.04 on my Mac!!! Can’t thank you enough!!!

  4. Thanks for your detailed tutorial.

    I’m trying to install Linux Mint 17.3 64-bit on a MacBook Air (Early 2015), with OSX 10.11.3 (El Capitan).

    I followed your tutorial, but when I boot from the Live USB and I arrived to the “partitioning screen”, I don’t see any partition, and my /dev/sda seems to be empty.

    What I’ve tried so far:

    1) turn off the encryption of the hard disk

    2) disable SIP protection and install rEFInd 0.10.2, which is working properly at boot time

    However, my /dev/sda still seems to be empty.

    Any help about how to manage to install Linux Mint on this MacBook Air would be very much appreciated.

    1. hmm, it’s not 100% clear what you mean when you say your /dev/sda is empty. Have you created the new Linux partitions at the installation phase? Are you saying that they are created, yet they don’t have any data in them?

      Can you paste the output of sudo fdisk /dev/sda here? Your disk might not be sda. It should be, but sometimes it can be something else.

      1. Hi,

        Thanks for your reply.

        When I arrive to the “partitioning screen”, the only partition I’m able to select is ‘sda’, because there are no other alternatives in the dropdown menu box. Therefore, I’m not able to install Mint or Ubuntu because I don’t see any hard drive to store the installation files.

        After a lot of ‘googling’ I finally found a pretty similar issue:

        https://askubuntu.com/questions/728988/ubuntu-live-usb-cant-see-internal-drive-on-macbook-air-early-2015

        and if they are correct, the next Kernel 4.4 should solve my problem. The bad news is that I’ll have to wait until Ubuntu 16.04….

  5. Hi,
    It appears that after I installed ubuntu, I was unable to boot back into osx (didn’t see refind). Luckily I just got a new computer so I didn’t have anything on it, but do you have any suggestions for restoring osx as well? I’m not sure what went wrong.

    1. are you holding down the option button when you are powering on? You can select your OS X drive at that menu. Just hold down the button when you hear the chime noise.

  6. This is what worked for me. After install of LM on mbp 8,2 I had 3 icons, osx, lm, and a penguin (ubuntu) following instructions above. I tried everything in refind.conf to get rid of the third icon, adding dont_scan_ volumes, dirs, folders, (three separate lines), nothing worked. Booted into LM opened the file folder then clicked on file system, did a search of efi, there are a lot of returns. Open the efi folder that is capitalized EFI as root deleted the ubuntu folder, restart, now only two icons OSX, LM.

  7. Most everything went off without a hitch. Though REFInd doesn’t seem to be doing quite what it’s supposed to. I followed all the instructions to a tee, aside from the “fs0: load ext4_x64.efi” and “fs0: map -r” as it was unclear if I was supposed to have those as two seperate lines or what, anyways, Ubuntu is installed and runs. However, when I go to power the computer on it just boots directly into Ubuntu without the REFInd menu coming up at all. If I hold alt/option on power up I can select Macintosh HD and boot, but otherwise it seems REFInd doesn’t actually do anything. What should I do?

  8. Thank you for this guide, it helped me qite a bit with understanding the modifications to the Refind’s .conf file.

    Installed Kubuntu 16.04 on Macbook Air 4.2 (mid 2011) with OS 10.10 (did not upgrade to 10.11). Everything worked out of the box: wifi, backlight, sound, etc. One difference: I dropped –alldrivers from ./refind-install command because of the refind warning (said that it might affect Apple partitions) and that did not have any effect (it worked). However one quirk occured and i don’t know why: Kubuntu 16.04 logo is now the first thing that comes up on starting, No Apple, and no Refind menu, not even Grab menu is being showed. I am quite OK with that but it would be nice to have Grab at least.

    Why did this happened?

    One more thing. When I was booting first time Kubuntu from the flesh drive there were two icons of the flash drive, one saying EFI version and the other saying Classic. I booted into EFI version and then run install. maybe this explains why the Kubuntu now runs on the this macbook just like Apple system used to, without menu…

    1. Hi Alex, as long as you can boot everything just fine, and you can use the Option key to choose which OS to boot, then it doesn’t matter a damn about seeing ReFIND. Perhaps the newer Macs are a little friendlier on multiple EFI based systems!

    2. See my question above, I had a similar issue, only with a different model macbook and regular Ubuntu, but I have a feeling it’s the same issue. Sometimes when one OS installs or even updates it will modify the boot order of things. I discovered that much on my own, just didn’t know how to fix it. Here is the link to my question on AskUbuntu. The REFInd guy himself answered the question and provided a link to the REFInd site on how to prevent future boot order hijacking. http://askubuntu.com/questions/771086/dual-boot-ubuntu-on-mid-2010-macbook-pro-questions/771776#771776

  9. Good stuff – but the fstab entry at the end has an error which caused me hours of head scratching until I spotted it: it should say “umask=0002” instead of “unmask=0002” 😉

  10. Hey, I’m having an issue that no one else seems to be having.

    I followed the instructions and everything works great until it comes time to boot to the alternate OS (I’m doing Linux Mint 18.1). When I go to select the second option from the rEFInd boot screen, it seems my keyboard doesn’t work. As best I can tell, it doesn’t initialize until after the OS starts. (Worth noting, I’m on a Mac mini, not a macbook, so the keyboard is a peripheral plugged into a usb port)

    I’m not a mac guy and have no idea what to do about this.

    Also of note, I can’t resize the OSX partition because it’s a startup partition but that’s fine because I intend to blow out OSX entirely and replace it with Linux anyway.

    1. Hey they’re. You need to hold the option key. If you are using a PC keyboard, this is usually the Alt key. Make sure the keyboard you use is USB, not Bluetooth and make sure its plugged directly into the rear of the mac, not in a hub. YMMV but I’d recommend using an official Apple keyboard. Other than that, make sure you use the cursor keys. If you have used them already, try the number pad cursor keys. Otherwise I haven’t tested this on the mac mini as I don’t have one to test with.

      1. Hey, thanks for your reply. Yeah, I was holding the option key, but I wasn’t able to change anything with the cursor keys. Or do you mean hold option WHILE making the selection? Because I think I probably let go once the rEFInd screen came up of and then went to make the selection and I don’t think I tried it while holding the option key too.

        Other than that, it is an Apple keyboard, and it is directly connected by a usb cord.

        1. Option key only during boot. Sounds like you have everything covered, not sure why you are seeing this issue. Check with refind website for known issues maybe?

  11. Thanks a ton for the clear and concise instructions. Minor things that I faced:

    1) The “diskutil coreStorage revert” needed a reboot to start doing the decryption.
    2) After I booted to OSX and did the decryption, I lost Refind somehow. Re-installing Refind did the trick and I can now see both OSX and Ubuntu options in the Refind menu.

    I am back on Ubuntu, thanks to you.

  12. Hi,

    I would like to know if you have a step-by-step version of installing ubuntu 16.04 Server on a Macbook Pro 11,3? I need the server side because I need to install a network emulator barebones. If I install an ubuntu desktop, that OS will just eat up the RAM that I want dedicated to the emulator.

    Any help is gladly appreciated!

    Cheers,

  13. Hi, great tutorial, I’m a super newbie at the terminal and I keep getting hung up at the edit config steps.

    ***
    Now it’s time to edit the EFI config file, but you will need to mount that hidden EFI partition first. Thankfully, rEFInd has a little tool you can use to mount the partition:

    $sudo mountesp

    Edit /Volumes/ESP/EFI/refind/refind.conf. Like us, you may find the refind.conf file is in /Volumes/ESP/EFI/BOOT, instead of a folder called refind. This is probably because we fiddled around with rEFInd and it’s predecessor, rEFIt before. Just because.

    $vi refind.conf (or nano, if you are that way inclined. Just not emacs!).

    locate the line that says scanfor and edit it to say:

    scanfor internal
    ***

    I can get it to mountesp, but then when I go to $vi refind.config it just gives me a bunch of ~ in a row. nothing to edit and seemingly no way to execute more commands. What am I missing?

    dk

    1. Hi dk, It looks like the file you are editing is empty, or it doesn’t yet exist. Either way, that’s not correct.

      Assuming that you have installed refind properly, the config file will be somewhere in /Volumes/ESP.
      Use the find command to search for it:
      $sudo -s
      (this gives you an admin ‘root’ prompt. Enter your own mac’s password here)
      #cd /Volumes/ESP
      you should now be in the ESP folder. If this doesn’t exist, you did something wrong installing rEFInd.
      now, search for the refind.conf file:
      #find . -iname “refind.conf”
      After a moment or two, it will then show the folder(s) where the refind.conf file exists, for example:
      ./EFI/BOOT/refind.conf
      if that’s the case, that means the file is located in /Volumes/ESP/EFI/BOOT. If find returns 0 results, then the file is not there at all, then again, rEFInd is not installed properly.
      to edit the file, maybe use the nano text editor rather than vi, if you are a complete novice with Linux. Let’s say that your result showed ./EFI/BOOT/foo/refind.conf, you’d do
      #nano /Volumes/ESP/EFI/BOOT/foo/refind.conf

      To exit and save after you make the relevant changes, hit Ctrl+X and say Y for yes (note it’s control key, not command).

      Hope this helps.
      Alistair

  14. Thanks Alistair,

    OK! The nano editor worked. I got the Scanfor set to internal.
    Now I dont know how to “Load the linux file system driver” to change

    fs0: load ext4_x64.efi

    fs0: map -r

    It’s not in the config file, and I suspect its in that driver, but I don’t know how to get that in the editor.

    Sorry for such (i suspect) simple issues.

    Thanks again!

    best
    dk

    1. I think perhaps my wording in that section should be revised – what I mean is that to load the driver, you must add the lines into the config file.

  15. hello, I get a warning when i’m about to install refind: –alldrivers is meant for creating USB flash drives with (-near) universal boot support. using it on hard disk partition runs the risk of creating serious problems, up to and including rendering your computer unbootable. Any advice or comments thanks

  16. Thanks man. This worked just fine on my late 2012 Mac-mini except

    I had to run
    sudo apt-get install firmware-b43-installer
    to get the wifi working

    I did have to buy a cheap usb keyboard to walk through the install process. after that my wireless keyboard worked great

  17. Does this work if I want to install Ubuntu to a microSD card that’s plugged in permanently into my card reader? I understand the partitioning is different (as I leave my SSD intact) but anything on the rEFInd end that might be different?

  18. Thanks for the superb tutorial! Everything is working fine, but I can’t get acccess to my OS X file system. I guess there’s something to do with the permissions, GIDs, or whatever I am doing wrong. Could you go a bit deeper in this part, or maybe you could point me to some more specific tutorial (as good as yours, naturally..)
    R

      1. The message I get when I I try to access the mounted MacintoshHD drive is that I can’t access folder media/rhr/MacintoshHD. I guess there’s something to do with permissions, GIDs or other stuff I am doing wrong.
        R

  19. just to make sure, I am forwarding below the output from diskutil command and id command (in OS X terminal, not linux)

    MacBook:~ rramina$ diskutil cs list
    No CoreStorage logical volume groups found
    MacBook:~ rramina$ id
    uid=501(rramina) gid=20(staff) groups=20(staff),403(com.apple.sharepoint.group.2),702(com.apple.sharepoint.group.8),12(everyone),61(localaccounts),79(_appserverusr),80(admin),81(_appserveradm),98(_lpadmin),703(com.apple.sharepoint.group.9),402(com.apple.sharepoint.group.1),701(com.apple.sharepoint.group.7),404(com.apple.sharepoint.group.3),406(com.apple.sharepoint.group.5),33(_appstore),100(_lpoperator),204(_developer),395(com.apple.access_ftp),399(com.apple.access_ssh),407(com.apple.sharepoint.group.6),401(com.apple.access_screensharing-disabled),405(com.apple.sharepoint.group.4)
    MacBook:~ rramina$

    thanks

  20. About 3 weeks back I installed Linux Mint 18.2 Cinnamon on my Macbook Air 2013 and have been having a great time with it. I completely scratched OS X from the system–got tired of dealing with it after years of frustration and avoidance. Now it runs just like I need it to with a Linux desktop and I am no longer needing to deal with Apple store, OS X, etc. blah blah. I am posting this from my Linux Mint desktop running on Macbook Air.

    I have it running with a large Hi-res Mac 27 inch display using the Thunderbolt connector and Mac external USB keyboard. I use a standard PC mouse which I prefer over the silly mac mouse. The expansion connectors on the Monitor work as well–network and USB connectors work! I have not tried the other connectors. The only issue I am having is that it will not hot-swap the big Thunderbolt monitor in and out–I can deal with that with a simple shutdown before removing it from the Mac Monitor. I have never been happier with this system now that I am running Linux Mint on it!

    1. Possibly. I don’t think they use UEFI so you may not have to even deal with refind. Probably best looking into EFI for your exact model first

        1. It’s a thing called Google. Not sure if you have heard of it 😉 according to Dr Google, it your machine has more than 4gb ram then it has the EFI patch, if not it has 32bit bootloader only. Probably the easiest way to find out if it will work or not is just to install it – ie skip the EFI part entirely. If it boots to GRUB, then you have succeeded. Otherwise do the EFI dance.

  21. hello, thanks for this instruction.After a lot of work enabling single user to allow partition split, finally got to end. I purchased usb with Linux mint already loaded. when I start up with option key pressed I get screen with two choice mac hd or recovery. also a list of networks to choose from. no usb icon. also I didn’t understand the need for Ethernet adapter if keyboard works. Any suggestions???

  22. Thank you for this article! I have seven questions in the interests of doing this correctly.

    I have an iMac 27-inch, late 2013, model iMac14,2 with an Intel Core i5. I have a 1 TB hard drive with 850 GB available. It is an EFI system according to the link near the start of your article. I am running macOS High Sierra version 10.13.2. (a) Should a Linux Mint installation work on my machine?

    I have csrutil installed on my machine. In the “Installing the EFI boot manager” section, you have a sentence regarding what to do if csrutil is unavailable. However, it is unclear if I should skip that section if csrutil is available. (b) Should I run rewind-install as described even though I have csrutil?

    (c) I gather that since I have rEFind 0.11.2 that I should skip everything between “YOU PROBABLY NO LONGER NEED THE BELOW INFORMATION” and “Step 2?”

    (d) Is “Step 2” still done in recovery mode or have a rebooted my iMac prior? I gather I have rebooted and am in normal model however I am unclear.

    (e) My iMac has an ethernet port built into the machine. Do I need a Ethernet to Thunderbolt adapter or can I just use the native ethernet port for “Step 4: Installing Linux on that Macintosh?”

    I very much like the idea of accessing my Mac files from Linux. (f) is there any negative from reverting the Mac OS X partition to standard HFS+?

    The steps starting with the installation of hfsprogs are unclear whether they are executed from the Linux boot or macOS boot. (g) Which boot are they executed from?

    Thanks for the help.

    Eric

    1. Actually, never mind the questions I wrote above. Linux Mint works great on my iMac. Unfortunately, while I did the partitions fine, it appears I can only boot into Linux Mint now. I think during the Linux Minux install it overwrote the boot partition, so I can no longer boot into macOS, even though I see the 600 GB macOS partition is there. Any thoughts on how I can fix that without going into an Apple Store and having them fix the boot partition? Fortunately I have all my files backed up with both Time Machine on an external drive and on Backblaze, so no fears of loosing data.

      1. Hi Eric. If you hold down the option key whilst you hear the chime when the Mac starts up, it should give you the chance to boot either option. Let me know how you go with that.

        1. Hi Alistair. Thanks, using the Option key during boot nearly works. Holding down the Option key allows me to select Macintosh HD and boot macOS, but it does not allow me to make a OS selection. If I do not hold the Option key during boot, it boots into Linux Mint.

          I did install rEFInd, but it doesn’t seem to operate like I would expect. Given I can boot into either macOS or Linux Mint by holding down Option or not during power-up, am I fine going forward like this or should I do something about it?

          Thanks.

          1. I’d say you’re going fine. As long as you can get the desired outcome of being able to boot both operating systems then it doesn’t really matter how you start them!

          2. Actually, I installed rEFInd again after I installed linux, and now it all works perfectly. Thanks for the help!

          3. Glad to help Eric. If you can think of any other content you’d like me to write, do let me and the rest of the readers know. If you can share the site with your friends and on social media I’d be hugely grateful too!

  23. Alistair… My latest problem is when I try to apply the latest macOS High Sierra 10.13.2 Supplemental Update to macOS. Although I go through the entire process, either from the App Store GUI or from the command line, the update does not get applied. Any ideas?

    1. I do not recommend upgrading to high Sierra. It changes the entire filesystem type and does many more ‘security’ things under the hood which completely breaks things. I may have to write a whole new guide to support High Sierra or newer. I have not upgraded for this reason alone

      1. Unfortunately I was on macOS High Sierra before I even started the dual boot project with Linux. So, my ship has already sailed on that score and I look forward to reading your guide when you write one. In the meantime, I am guessing the only way I can get the pending update is if I reinstall the macOS operating system and restore my files from backup. Haven’t yet been brave enough for that, however.

  24. Hi,
    I have installed following your procedure,
    When I try to boot the USB it says: Starting legacy loader, using load option USB. I have tried all the options. Am using MacBook 2,1 2006 white if it helps.

  25. Hi Sir,
    I think your tutorial is not based on the mac machine with T2 chip. Although you mentioned turn off secure boot, enable external boot, actually T2 chip still block the
    pcie (nvme, thunderbold) ssd to the Linux OS, only usb drive is visible. Because the Linux can’t see the nvme(internal) or thunderbolt (external) ssd, I only tried install
    linux in a usb3.0 disk. The installation can go on, but halt at installing boot loader.

    1. Yes same thing here. Disabling secure boot doesn’t help. Actually it only allows to boot from usb in the first place…but the ssd is not detected and i can’t install linux on it

  26. I am using a MBP 5,2 (mid 2009) with Maverisk OSX, and 14.04 currently installed. I booted up to the 18.04 install usb to install 18.04 as a dual boot, with the intention to remove 14.04, format the partition it was on, and remove it with 18.04. When 18.04 booted up from the installation usb, I got a screen filled with multicolored distortion, rather than the desktop. I think what I may need to do is get into kernel options and activate nomodeset. This I had done earlier with the 14.04 installation usb, and it worked perfectly. But I have forgotten how to open the screen where I can select this. Please kindly see below, the directions which I think I used in the past for this. But I am not getting the purple screen with a keyboard logo as described below, in the MBP and so am unable to get the menu where I can select nomodeset.

    ———————–

    How to enable kernel options on the livecd (before install)

    If you boot ubuntu from a livecd (or USB stick), right after the bios splash screen you will get a purple screen with a keyboard logo at the bottom. Press any key at that moment to access a menu. Select your language with the arrow keys, press enter and you will see a menu. If you press the F6 key, a menu at the bottom will open allowing you to set kernel options with the space bar or enter key. You can close the menu with escape key and resume booting by selecting the option “try ubuntu without installing” (please note that session does allow you to install ubuntu once you found the kernel options cured your problem).

  27. I got the solution. Here is how to activate nomodeset for anyone that needs it:

    Hover over the option “Try Ubuntu without installing”.
    Press e.
    Add nomodeset after the words quiet splash. Then F10 to save changes and boot.

    Worked great!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.