dosdude1, Homebrew, Node (and lot of other applications) throwing illegal hardware instruction on patched Catalina (installed on incompatible machine)

Yesterday I decided to give a try in making my old 7.1 MacBook Pro second chance by upgrading macOS to Catalina with IS NOT supported by Apple.

There is a reason why they want drop support for older architecture but You can squeeze last breath if You can allow for sacrifice in stability or compatibility. Upfront I can say that iMovie crash and I was unable to resolve that issue, other applications used for basic web-dev (phpstorm, mysql, nginx, npm) looks and feel working good but still I would not recommend it for profesional work when disruption in workflow cause money or data loss – for any non critical applications, reading email, watching YT it’s worth of trying.

First step is to upgrade patched macOS dosdude1

When You got Your system set up, and try to execute applications installed with Homebrew (in my case it was node) I got this error:

illegal hardware instruction

After investigation, I was able to locate problem. Applications distributed in Homebrew as bottle are compiled for specified architecture. Authors of Homebrew have valid reason to assume that this compiled software is going to be executed on compatible hardware in correlation with macOS version. There is no change of having C2D CPU in Catalina, here is why compiled code is targeted for newer CPU.

Lucky Homebrew have ability for self compiling any packages, but that operation have exactly same (error) outcome as when installing compiled bottle.

answer to this problem, is in telling Homebrew to set target architecture for older CPU-s.

You can edit this file:

nano /usr/local/Homebrew/Library/Homebrew/extend/os/mac/hardware.rb

and change it’s content to

frozen_string_literal: true
module Hardware
def self.oldest_cpu(version = MacOS.version)
if version >= :mojave
:core2
else
generic_oldest_cpu
end
end
end

Notice edited architecture, when OS is greater or equal to Mojave

After that change we can recompile from source our not working applications by using following command.

brew reinstall -s python

-s stands from source

When trying recompile node, I still got error. After more investigation i found out that Node depend on another packages, that are already installed but not recompiled with new directive. Dirty solution i found is to see what node depend on:

brew info npm

and from following code, read dependencies section to recompile all dependent packages with -s

brew reinstall -s pkg-config
brew reinstall -s icu4c
brew reinstall -s python

After that, we can reinstall node

brew reinstall -s npm

After this operation, node works perfect. You can follow same schematic for any other applications that can be found in Homebrew.

7 thoughts on “dosdude1, Homebrew, Node (and lot of other applications) throwing illegal hardware instruction on patched Catalina (installed on incompatible machine)

  1. Wojtek says:

    This actually helped me solve a not working automatic Let’s Encrypt certificate renewal by using a compilation of certbot that didn’t throw this error. Thanks!

  2. Basel Juma says:

    Thank you 🙂

  3. I’m not sure where you’re getting your information,
    but great topic. I needs to spend some time learning much more or understanding more.
    Thanks for great info I was looking for this info for my mission.

  4. Magik says:

    Hi. I am trying to run idevicediagnostics on DOSDUDE Catalina. Macboop Pro 2009
    Upon running I am getting Illegal Instruction error
    `pkmn@pokemons-MacBook bin % idevicediagnostics diagnostics
    zsh: illegal hardware instruction idevicediagnostics diagnostics`
    Any advice as I have trawled google to no avail.
    Thanks.

  5. Maverick says:

    I still got the issue after using this method on installing PHP

  6. Steve Pearson says:

    Great post, npm/node/angular now working on my patched 2009 MacBookPro5,5. I can hold off spending money on the upgrade for a little while longer.

Leave a Reply

Your email address will not be published. Required fields are marked *