AmberTools19 – macOS 10.14.4 – Xcode 10.2.1

Att installera Amber/AmberTools på macOS har nu blivit mycket enklare men är fortfarande inte helt trivialt. Nedanför presenteras olika sätt att installera nuvarande version av AmberTools, där metoden skall vara den samma för Amber.

Efter den senaste uppdateringen av Xcode till 10.2.1 blev det problem att använda andra C kompilerare än clang, det går nu igen att använda GCC så länge du använder den senaste och patchade versionen av den GCC du väljer.

Det kommer även krävas att du installerar saker och kör kommandon genom den inbyggda ”kommandotolken” som för macOS heter Terminal(.app). Du hittar denna app i din mapp med Program, i mappen Verktyg eller genom att använda spotlight, det lilla förstoringsglaset uppe i högra hörnet av skärmen (alternativt genom genvägen cmd+blanksteg på ditt tangentbord, förutsatt att denna är aktiv) och söka på Terminal. När du skall köra kommandon i terminalen kommer de att se ut så här:

some command example

Det kan finnas längre kommandon där man måste ”sidscrolla” för att se hela sekvensen. Med detta förklarat tror jag att det är dags att sätta igång. Jag kommer nu förklara hur man gör för att kompilera AmberTools19(/Amber18) med hjälp av pakethanteraren ”Homebrew” och genom att använda Apples version av C kompilerarpaketet clang. Tidigare har jag erbjudit möjligheten att använda ”Macports” eller HPC versioner av GCC paketet men i brist på tid och en tillförlitlig virtuell maskin med macOS att testa på har jag fått begränsa möjligheterna något. Dock borde processen vara densamma oavsett vilken källa man väljer till gcc. Tänk på att endast välja ett av dessa sätt då du kan skapa konflikter om du installerar mer än en pakethanterare eller en uppsättning av samma kompilerare samtidigt.

Om du får problem hänvisar jag till AMBER epost listan för hjälp i stället för att försöka kommentera här då jag inte underhåller sidan så pass regelbundet för att kunna hjälpa till med eventuella lösningar.

Installera Xcode och tillhörande Command Line Tools

Oavsett vilken pakethanterare eller gcc källa du använder behöver du installera Xcode. För denna beskrivning användes Xcode 10.2.1 som du lämpligast installerar via AppStore på din Mac. Command Line Tools (CLT) behöver du för att köra kommandon i terminalen och installeras efter att Xcode är installerat genom att köra följande kommando i din Terminal.app

sudo xcode-select --install

Nedanstående steg steg är potentiellt inte längre är nödvändigt med de senaste uppdateringarna utav källkoden för amber låter jag detta steg stå kvar så jag har genomfört det på min maskin och inte har hunnit testa om det gör någon skillnad om man hoppar över det. Du kan således potentiellt behöva installera filer som saknas genom att köra följande kommando, som öppna en PKG installerare vilken medföljer Xcode10. Följ sedan bara instruktionerna för att installera.

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Detta var i alla fall nödvändigt för AmberTools18 eftersom Apple pensionerat verktyg som tidigare kom installerat med Xcode.

Vissa moduler i Amber använder X.org X Window System för GUI, detta kommer inte längre förinstallerat på macOS i form av X11.app så för att detta skall fungera krävs att du installerar XQuartz som ersatt X11. Jag tror fortfarande att du får en pop-up som förklarar att du måste installera XQuartz när du försöker använda X11 men du kan lika gärna installera det direkt. Besök utvecklarnas hemsida (https://www.xquartz.org/) och följ instruktionen.

Nu bör du ha installerat Xcode och CLT för att kunna köra kommandon och potentiellt också XQuartz.

Kompilera AmberTools19(/Amber18) med macOS clang

Du har redan installerat Xcode (eller hur?) så du har en C kompilerare (clang) men du behöver en fortran kompilator, något som inte kommer med Xcode. Du kan skaffa detta genom att valfri metod. Jag använder pakethanteraren homebrew. Sedan tidigare har jag visat tre olika sätt och låter de övriga stå kvar trotts att jag inte testat alla tre alternativ med den senaste versionen av AmberTools. Notera dock att du enbart skall använda en metod!

Alternativ 1: Homebrew

Homebrew installeras genom att köra ett kommando i terminalen, gå gärna till Homebrews hemsida (https://brew.sh/) och bekräfta kommandot där. Detta är den enda bekräftade metoden just nu!

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Installera sedan Homebrew GCC 9.1.0 (just nu den förvalda versionen) genom att köra följande kommando

brew install gcc

Eftersom Apple inte tillhandahåller gfortran kommer Homebrew versionen automatiskt bli den aktiva genom att installera GCC och inga länkar behöver skapas.

Alternativ 2: MacPorts

Ladda ned och installera MacPorts och GCC, jag har med tidigare versioner testat GCC 6, 7 och 8 men inte med den senaste versionen av AmberTools. Jag vet inte heller om det finns en kompatibel version av GCC 9 via MacPorts i skrivande stund.

sudo port selfupdate
sudo port upgrade outdated
sudo port install gcc8
sudo port select --set gcc mp-gcc8
Alternativ 3: HPC GCC

Där jag tidigare valde HPC gfortran-8.1-bin.tar.gz från http://hpc.sourceforge.net för att endast installera fortran kompileraren då jag vill använda Apple clang för allt annat. Jag har dock inte kontrollerat att denna fortfarande fungerar med de senaste uppdateringarna för macOS och AmberTools. Det finns inte en version för GCC 9 i skrivande stund.

cd /[PATH]/[TO]/[DOWNLOAD]/
sudo tar -xvf gfortran-8.1-bin.tar -C /

Allt installeras i /usr/local/. Under processen fick jag felmeddelanden men installationen fungerade ändå så jag grävde inte djupare i detta:

x usr/local/: Can't set user=0/group=0 for usr/local Failed to set file flags
...
...
tar: Error exit delayed from previous errors.
Fortran Fixat

Du bör nu ha en fungerande gfortran version installerad och det är dags att gå vidare med konfigurationen och installationen av AmberTools19(/Amber18).

Ladda ned AmberTools19(/amber18) från utvecklarnas hemsida (http://ambermd.org/), flytta arkivet till och extrahera sedan filerna där du vill installera.

mv /[PATH]/[TO]/AmberTools19.tar.bz2 /[PATH]/[TO]/[INSTALL]/[DIRECTORY]/
cd /[PATH]/[TO]/[INSTALL]/[DIRECTORY]/
tar xvf AmberTools19.tar.bz2

Konfigurera och installera

tar xvf AmberTools19.tar.bz2
export AMBERHOME=/Users/[USERNAME]/SOFTWARE/amber18/
export PATH=${AMBERHOME}:$PATH
./configure -macAccelerate clang
make install

Detta borde efter en bra stund sluta med något som ser ut som:

Installation of AmberTools19 serial is complete at Sat Apr 27 20:39:52 CEST 2019.

Du får också ett mycket klokt tips att lägga till en rad kod i din .profile/.bashrc/.cshsrc file eller något liknande, gör detta då det kommer göra livet mycket enklare senare. För mig som kör SH/BASH (macOS default) kan jag köra detta kommando:

echo “test -f /path/to/amber18/amber.sh && source /path/to/SOFTWARE/amber18/amber.sh” >> $HOME/.profile

Du kan sedan antingen sedan ”starta om” terminalen för att läsa denna fil igen, alternativt att i stället köra detta kommando:

source $HOME/.profile

Efter att ha installerat framgångsrikt bör du även köra igenom testerna för att se till att allt fungerar som det ska under huven. Du startar sedan dessa tester på följande sätt:

cd $AMBERHOME
make test

Kontrollera att allt ser bra ut och att inga större fel påträffats. Nu är den seriella installationen av AmberTools19 färdig men denna gång skall vi inte avsluta här utan gå vidare och installera MPI versionen av bland annat sander (sander.MPI)

cd $AMBERHOME
make clean
./configure -macAccelerate -mpi clang
make install

Detta skall om allt går som tänkt sluta med ett meddelande som liknar följande:

Installation of AmberTools19 MPI is complete at Sat Apr 27 21:54:55 CEST 2019.

Du skall även kunna ladda ned och installera openMPI 4.0.1 från källkod via ett skript som finns i $AMBERHOME/AmberTools/src och heter configure_openmpi. Jag fick inte detta att fungera men det skall gå att genomföra enligt nedan, vilket är på macOS. För andra system hittas antalet kärnor på andra sätt än via sysctl:

brew unlink open-mpi # Förutsätter homebrew installation
cd $AMBERHOME/AmberTools/src
wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.1.tar.gz
tar xvf openmpi-4.0.1.tar.gz
nps=$(sysctl -h hw.ncpu | awk {'print $2'}) # Hitta antalet kärnor på mac
./configure_openmpi -np $nps gnu # Konfigurera med antal kärnor från ovan
# Linux system kan bara ersätta $nps med $(nproc) och skippa sysctl

Detta slutade i ett fel för mig men kan mycket väl fungera bättre för en annan:

ld: library not found for -levent
collect2: error: ld returned 1 exit status
make[2]: *** [libmpi_usempif08.la] Error 1
make[1]: *** [install-recursive] Error 1
make: *** [install-recursive] Error 1

Det sista steget som egentligen kvarstår är att installera openMPI stöd för cpptraj att läsa och skriva NetCDF filer parallellt. Detta går dock inte heller för mig med clang så för detta, se GCC installationen nedanför, tekniskt sett är dock kommandot:

cd $AMBERHOME
make clean
./configure -macAccelerate -openmp clang

Detta leder till ett felmeddelande för mig som säger:

OpenMP and clang are not currently compatible
Configure failed due to the errors above!

Kompilera AmberTools19(/Amber18) med Homebrew GCC

Under antagandet att du redan installerat Xcode och CLT (börja annars om och läs hur du gör detta i början på denna beskrivning) skall vi nu installera AmberTools19(/Amber18) med Homebrew GCC 9.

Det första du måste göra är att ge Homebrew versionerna av GCC prioritet över macOS clang. Även om du har installerat gcc9 via homebrew så kommer fortfarande gcc att vara clang när du försöker kompilera kod. Är det ett eget projekt kan du alltid använda gcc9 genom att köra som gcc-9 men detta hjälper oss inte i detta läge eftersom AmberTools(/Amber) letar efter ”gcc”. Ett enkel och reversibelt sätt att åstadkomma detta är ”mjuka”/symboliska länkar:

ln -s /usr/local/bin/gcc-9 /usr/local/bin/gcc
ln -s /usr/local/bin/g++-9 /usr/local/bin/g++
ln -s /usr/local/bin/c++-9 /usr/local/bin/c++

Vilket skapar länkar i /usr/local/bin med korrekt namn enligt det systemet kommer att leta efter. Att köra kommandot:

which gcc

Ska nu returnera /usr/local/bin i stället för /usr/bin, i så fall är allt nu OK!

När du inte längre vill att dessa skall vara systemets förval tar du bara bort länkarna igen enligt:

rm /usr/local/bin/gcc
rm /usr/local/bin/g++
rm /usr/local/bin/c++

Förutsatt att du laddat ned AmberTools19 från utvecklarnas hemsida och flyttat den komprimerade filen till den plats där du vill installera AmberTools19(/Amber18) tar du dig till samma plats i en Terminal(.app) session och kör följande kommandon:

tar xvf AmberTools19.tar.bz2
export AMBERHOME=/Users/[USERNAME]/SOFTWARE/amber18/
export PATH=${AMBERHOME}:$PATH
cd $AMBERHOME
./configure -macAccelerate gnu
make install

Efter en stunds väntande bör du sedan få ett meddelande som påminner om detta:

Installation of AmberTools19 serial is complete at Sat Apr 27 15:20:30 CEST 2019.

Efter en genomförd installation bör du köra igenom de tester som kommer med mjukvaran får att se att allt fungerar som det ska. Detta gör du genom att köra följande kommando:

make test

Förutsatt att dessa inte registrerar några större problem har du ni en fungerande seriell version av AmberTools19(/Amber18) installerad och klar för användning. Här har jag tidigare avslutat genomgången men efter att ha tagit beslutet att skära ned på alternativen för kompilerare har jag i stället nu ordat en beskrivning av parallell installationen också. För detta valde jag att använda det script ($AMBERHOME/AmberTools/src/configure_openmpi) som finns tillgängligt för att hjälpa till med openMPI installationen då den version som kommer med homebrew är byggd för clang och inte gcc samt det faktum att jag inte orkade lösa att bygga från källkod själv. Du tar dig igenom dessa steg enligt nedan:

brew unlink open-mpi # Om du har installerat via homebrew
cd $AMBERHOME/AmberTools/src
wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.1.tar.gz
tar xvf openmpi-4.0.1.tar.gz
nps=$(sysctl -h hw.ncpu | awk {'print $2'}) # Fungerar på macOS
./configure_openmpi -np $nps gnu
# Linux system kan bara ersätta $nps med $(nproc) och skippa sysctl

Du kan behöva starta om terminalsessionen här för att rätt openMPI installation skall hittas och användas (exit)

cd $AMBERHOME
make clean
./configure -macAccelerate -mpi gnu
make install

Efter en stunds väntande skall du förhoppningsvis mötas av ett meddelande som ser ut ungefär som detta:

Installation of AmberTools19 MPI is complete at Sat Apr 27 18:56:43 CEST 2019.

Om detta gått som det skall är det nu dags att igen genomföra lite tester för att kolla att allt är som det ska. Detta fungerar inte för mig dock, potentiellt eftersom jag gör detta på en arbetsdator och jag bombarderas med pop-ups om att tillåta nätverkstillgång och annat. Teoretiskt dock är kommandot enligt nedan:

export DO_PARALLEL="mpirun -np X"
make test

Där du byter ut ”X” mot den siffra som spottas ut av kommandot sysctl -h hw.ncpu | awk {'print $2'} för att använda alla tillgängliga kärnor i processorn.

Det som återstår är att installera openMPI stöd för cpptraj att hantera NetCDF filer parallelt, detta åstadkommer du genom följande kommando:

cd $AMBERHOME
./configure -macAccelerate -openmp gnu
make install

Efter lite väntan bör du se ett meddelande liknande:

Installation of AmberTools19 OpenMP is complete at Sat Apr 27 19:12:53 CEST 20

Det är egentligen dags att genomföra lite mer tester men eftersom detta inte går för mig så är det hela klart här. Du bör nu ha en fungerande parallel installation av AmberTools19(/Amber18) som är redo för användning.