If one needs to run neo4j natively on the Apple M1 hardware (for example to analyze/query BloodHound ingestor data from an Active Directory) and benefit from the fast CPU it seems to be possible to build and run from source.
I have prepared this “experimental” howto so that others can reproduce this
Pre-Requisites :
- make or gnu-make
- wget or curl (to download sources from terminal – otherwise just use your browser)
- git
- Xcode full setup (better to have this for development, not entirely sure you need it for neo4j build, but I have it installed since it is a must)
First we need to get a working native version of Java on the M1 ARM64 Apple. This can be achieved by downloading and installing a package from AZUL and selecting the proper options for our platform -> Java 11 (LTS) macOS ARM 64-bit JDK as seen below
Once installed, verify that we can use Java by running the following in the terminal
Once Java is installed on the M1 we move on to download Maven from Apache foundation site – available here https://maven.apache.org/download.cgi
I have configured Maven on my Apple M1 ARM64 system as follows
mkdir -p $HOME/SRC/maven cd $HOME/SRC/maven wget https://apache.miloslavbrada.cz/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz gunzip apache-maven-3.8.1-bin.tar.gz tar -xvf apache-maven-3.8.1-bin.tar rm apache-maven-3.8.1-bin.tar # Now we need to define this new path to our environment # I have added the path to my $PATH as follows (adjust to your needs accordingly) export PATH=bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/opt/pkg/sbin:/opt/pkg/bin:/Library/Apple/usr/bin:/Users/user/.cargo/bin:/usr/local/go/bin:/Users/user/go/bin:/Users/user/SRC/maven/apache-maven-3.8.1/bin
Now we should have mvn in our paths so we can move on to build Neo4j
We will now git clone Neo4j source to our SRC directory and set some variables
cd $HOME/SRC git clone https://github.com/neo4j/neo4j cd neo4j ulimit -n 40000 export MAVEN_OPTS="-Xmx512m" mvn clean install
Now after a while the build will fail on the following test
Im not really sure why this happens right now and I did not investigate this more right now , but we can build Neo4j without these tests and it will compile and run on the M1
So run the build with these options instead
mvn clean install -DskipTests
So now we can test the newly compiled Neo4j instance, but before we do we need to extract the TGZ build
cd $HOME/SRC/neo4j/packaging/standalone/target/ tar -zxvf neo4j-community-4.3.1-SNAPSHOT-unix.tar.gz
To start the Neo4j DB run the following command (if you built it in $HOME/SRC/neo4j)
/Users/user/SRC/neo4j/packaging/standalone/target/neo4j-community-4.3.1-SNAPSHOT/bin/neo4j console
Following should be visible on your console after it starts
What seems to be broken right now on the M1 is the web console interface to Neo4j – I could not get it to render the web page interface and was left only with a blank window when accessing http://127.0.0.1:7474
I needed to access the console so that I could change the default passwords so instead I tried to connect with the cypher-shell and it allowed me to reset the default credentials and password neo4j (neo4j:neo4j)
/Users/user/SRC/neo4j/packaging/standalone/target/neo4j-community-4.3.1-SNAPSHOT/bin/cypher-shell
So one this was done I wanted to see if I could populate the fresh Neo4j DB with some data – mainly Bloodhound ingestor data from an Active Directory.
BloodHound 4.0.2 can be downloaded from the projects Git and the MacOS x86-64 binary works fine with Rosetta2, however it fails to build for me – I have used pkgsrc/lang/nodejs (version 14.16.0) for this but I could not build yet a native ARM64 BloodHound
cd $HOME/SRC mkdir BLOODHOUND cd BLOODHOUND wget https://github.com/BloodHoundAD/BloodHound/releases/download/4.0.2/BloodHound-darwin-x64.zip unzip BloodHound-darwin-x64.zip cd $HOME/SRC/BLOODHOUND/BloodHound-darwin-x64/BloodHound.app/Contents/MacOS ./BloodHound
Before BloodHound is fully executed you need to allow the unsigned app in the MacOS security menu to run.
Login with your new neo4j password (user: neo4j)
Now you can try and upload some BloodHound ingestor data from some AD of yours to test the fresh Neo4j on the Apple M1 ARM64 platform – It would be great to benchmark Neo4j on the M1 compared to other architectures (x86_64) but my expertise on that is limited – what I noticed however is the BloodHound ZIP imports to the DB are faster on the M1 than on my Core i5 Panasonic Toughbook C31 with an SSD disk.
Happy Graphing on the M1!