#!/bin/bash
set -ex
red="-e \033[31m"
green="-e \033[32m"
yellow="-e \033[33m"
blue="-e \033[34m"
reset="\033[0m"
CDIR="$(cd "$(dirname "$0")";pwd -P)"
NDIR="$CDIR/.."
#前置安装包安装
yum install -y epel-release
yum install -y vim net-tools tree bzip2 gcc gcc-c++ libudev* flex* \
libcurl-devel libxml2 numa* glibc* glibm* wget make autoconf automake \
zip gcc-gnat libgcc glibc-devel bison flex m4 texinfo build-essential \
perl-Data-Duper libtool numactl binutils systemd-devel valgrind zlib-devel zlib
# 软件列表
declare -A downloadlist
downloadlist=(
[gcc-9.3.0.tar.gz]="https://ftp.gnu.org/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz"
[gmp-6.1.0.tar.bz2]="https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2"
[mpfr-3.1.4.tar.bz2]="http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2"
[mpc-1.0.3.tar.gz]="http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz"
[isl-0.18.tar.bz2]="http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2"
[hucx-v1.2.1-huawei.tar.gz]="https://gitee.com/kunpengcompute/hucx/archive/refs/tags/v1.2.1-huawei.tar.gz"
[xucg-v1.2.1-huawei.tar.gz]="https://gitee.com/kunpengcompute/xucg/archive/refs/tags/v1.2.1-huawei.tar.gz"
[hmpi-v1.2.1-huawei.tar.gz]="https://gitee.com/kunpengcompute/hmpi/archive/refs/tags/v1.2.1-huawei.tar.gz"
[OpenBLAS-0.3.19.tar.gz]="https://github.com/xianyi/OpenBLAS/releases/download/v0.3.19/OpenBLAS-0.3.19.tar.gz"
[hpl-2.3.tar.gz]="https://www.netlib.org/benchmark/hpl/hpl-2.3.tar.gz"
[go1.20.2.src.tar.gz]="https://go.dev/dl/go1.20.2.src.tar.gz"
[go1.17.13.src.tar.gz]="https://go.dev/dl/go1.17.13.src.tar.gz"
[go1.4.3.src.tar.gz]="https://go.dev/dl/go1.4.3.src.tar.gz"
[singularity-3.8.0.tar.gz]="https://github.com/apptainer/singularity/releases/download/v3.8.0/singularity-3.8.0.tar.gz"
[openmpi-4.1.5.tar.gz]="https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.5.tar.gz"
[osu-micro-benchmarks-7.0.1.tar.gz]="https://mvapich.cse.ohio-state.edu/download/mvapich/osu-micro-benchmarks-7.0.1.tar.gz"
)
#所有包的总数
total_pkg=${#downloadlist[*]}
test -d $CDIR/src || mkdir -p $CDIR/src
for key in ${!downloadlist[*]}
do
if [ ! -e $key ];then
if (wget -P ./ ${downloadlist[$key]} --no-check-certificate && echo ${green}${downloadlist[$key]} download successful! ${reset}) then
let total_pkg--
else
echo ${yellow} ${downloadlist[$key]} ${key} download faild ${reset}
fi
else
echo ${green} ${downloadlist[$key]} is exist! ${reset}
if [ "${key:0-6}" == "tar.gz" -o "${key:0-7}" == "tar.bz2" ];then
if [[ ${key:0:2} == go ]];then
mkdir -p $CDIR/src/$(echo ${key:0:12} | cut -d . -f 1-3)
tar -xf ${key} -C $CDIR/src/$(echo ${key:0:12} | cut -d . -f 1-3)
else
tar -xf ${key} -C $CDIR/src
fi
else
unzip ${key} -d $CDIR/src
fi
let total_pkg--
fi
done
if [ $total_pkg -ne 0 ];then
echo ${red} "There are $total_pkg installation packages that have not been downloaded" ${reset}
exit 1
else
echo ${green}"All installation packages have been downloaded"${reset}
fi
# 解压go软件包
mkdir -p /usr/local/go/{go1.20.2,go1.17.13,go1.4.3}
tar -xf go1.20.2.src.tar.gz --strip-components=1 -C /usr/local/go/go1.20.2
tar -xf go1.17.13.src.tar.gz --strip-components=1 -C /usr/local/go/go1.17.13
tar -xf go1.4.3.src.tar.gz --strip-components=1 -C /usr/local/go/go1.4.3
# install gcc-9.3.0
tar -xf gcc-9.3.0.tar.gz -C $CDIR/src
cp $CDIR/gmp-6.1.0.tar.bz2 $CDIR/src/gcc-9.3.0
cp $CDIR/mpfr-3.1.4.tar.bz2 $CDIR/src/gcc-9.3.0
cp $CDIR/mpc-1.0.3.tar.gz $CDIR/src/gcc-9.3.0
cp $CDIR/isl-0.18.tar.bz2 $CDIR/src/gcc-9.3.0
cd $CDIR/src/gcc-9.3.0
./contrib/download_prerequisites
sleep 10
test -d build || mkdir build && cd build
../configure --enable-languages=c,c++,fortran \
--disable-multilib --with-system-zlib \
--prefix=/usr/local/gcc9.3.0 && \
make -j$(grep -w processor /proc/cpuinfo | wc -l) && \
make -j$(grep -w processor /proc/cpuinfo | wc -l) install
cat>>/etc/profile<<'EOF'
#---GCC-9.3.0 --------------------------------
export GCC_HOME=/usr/local/gcc9.3.0
export PATH=${GCC_HOME}/bin:$PATH
export LD_LIBRARY_PATH=${GCC_HOME}/lib64:$LD_LIBRARY_PATH
EOF
source /etc/profile
gcc --version
# install xucg & hucx
cp -r $CDIR/src/xucg-v1.2.1-huawei/* $CDIR/src/hucx-v1.2.1-huawei/src/ucg
cd $CDIR/src/hucx-v1.2.1-huawei
./autogen.sh && \
./contrib/configure-opt --prefix=/usr/local/hucx
make -j$(grep -w processor /proc/cpuinfo | wc -l)
make -j$(grep -w processor /proc/cpuinfo | wc -l) install
# install hmpi
cd $CDIR/src/hmpi-v1.2.1-huawei/
./autogen.pl && \
./configure --prefix=/usr/local/hmpi \
--with-platform=contrib/platform/mellanox/optimized \
--enable-mpi1-compatibility \
--with-ucx=/usr/local/hucx && \
make -j$(grep -w processor /proc/cpuinfo | wc -l) && \
make -j$(grep -w processor /proc/cpuinfo | wc -l) install
cat>>/etc/profile<<'EOF'
#---hucx-hmpi-1.2.1 --------------------------------
export HUCX=/usr/local/hucx
export HMPI=/usr/local/hmpi
export PATH=$HMPI/bin:$HUCX/bin:$PATH
export LD_LIBRARY_PATH=$HMPI/lib:$HUCX/lib:$LD_LIBRARY_PATH
EOF
source /etc/profile
# install OpenBlas
cat>>/etc/profile<<'EOF'
#---OpenBLAS-0.3.19--------------------------------
export CC=`which gcc`
export CXX=`which g++`
export FC=`which gfortran`
export OPENBLAS_HOME=/usr/local/OpenBLAS-0.3.19
export LD_LIBRARY_PATH=$OPENBLAS_HOME/lib:$LD_LIBRARY_PATH
EOF
source /etc/profile
cd $CDIR/src/OpenBLAS-0.3.19
make -j$(grep -w processor /proc/cpuinfo | wc -l) && \
make -j$(grep -w processor /proc/cpuinfo | wc -l) PREFIX=/usr/local/OPENBLAS-0.3.19 install
#install Linpack
cd $CDIR/src/hpl-2.3
cp -r $CDIR/src/hpl-2.3 /usr/local/ && cd /usr/local/hpl-2.3
cat>Make.Linux_ARM<<'EOF'
SHELL = /bin/sh
CD = cd
CP = cp
LN_S = ln -fs
MKDIR = mkdir -p
RM = /bin/rm -f
TOUCH = touch
#-----------------------------------------
ARCH = Linux_ARM
TOPdir = /usr/local/hpl-2.3
#-----------------------------------------
INCdir = $(TOPdir)/include
BINdir = $(TOPdir)/bin/$(ARCH)
LIBdir = $(TOPdir)/lib/$(ARCH)
HPLlib = $(LIBdir)/libhpl.a
#-----------------------------------------
LAdir = /usr/local/OPENBLAS-0.3.19
#-----------------------------------------
ifndef LAinc
LAinc = $(LAdir)/include
endif
ifndef LAlib
LAlib = $(LAdir)/lib/libopenblas.a
endif
F2CDEFS = -DAdd__ -DF77_INTEGER=int -DStringSunStyle
HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) -I$(LAinc) $(MPinc)
HPL_LIBS = $(HPLlib) $(LAlib) $(MPlib)
HPL_OPTS = -DHPL_DETAILED_TIMING -DHPL_PROGRESS_REPORT
HPL_DEFS = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES)
CC = mpicc
CCNOOPT = $(HPL_DEFS)
OMP_DEFS = -fopenmp
CCFLAGS = $(HPL_DEFS) -O3
LINKER = $(CC)
LINKFLAGS = $(CCFLAGS) $(OMP_DEFS)
ARCHIVER = ar
ARFLAGS = r
RANLIB = echo
EOF
make arch=Linux_ARM
cd /usr/local/hpl-2.3/ && tree -L 3 bin lib include
# 安装stream_mpi.c
test -d /usr/local/stream || mkdir -p /usr/local/stream
cd /usr/local/stream
wget -P /usr/local/stream https://www.cs.virginia.edu/stream/FTP/Code/Versions/stream_mpi.c
mpicc /usr/local/stream/stream_mpi.c -fopenmp -O3 -DSTREAM_ARRAY_SIZE=96000000 -DNTIMES=100 -mcmodel=large \
-o /usr/local/stream/stream_c_mpi.exe
#安装OSU7.0.1
cd $CDIR/src/osu-micro-benchmarks-7.0.1
./configure --prefix=/usr/local/osu-7.0.1 CC=`which mpicc` CXX=`which mpicxx` && make && make install
#install go1.4.3
cd /usr/local/go/go1.4.3/src
./make.bash
PATH=/usr/local/go/go1.4.3/bin:$PATH
go version
#install go1.17.13
cd /usr/local/go/go1.17.13/src
export GOROOT_BOOTSTRAP=/usr/local/go/go1.4.3
./make.bash
#install go1.20.2
cd /usr/local/go/go1.20.2/src
export GOROOT_BOOTSTRAP=/usr/local/go/go1.17.13
./make.bash
cat>>/etc/profile<<'EOF'
export GO_HOME=/usr/local/go/go1.20.2
export PATH=${GO_HOME}/bin:$PATH
EOF
source /etc/profile
#install singularity-3.8.0
cd $CDIR/src/singularity-3.8.0
./mconfig --prefix=/usr/local/singularity-3.8.0 && \
cd builddir/ && make && make install
cat>>/etc/profile<<'EOF'
#---singularity-3.8.0------------------------------------
export singularity_home=/usr/local/singularity-3.8.0
export PATH=${singularity_home}/bin:$PATH
EOF
source /etc/profile
# install openmpi-4.1.5
cd $CDIR/src/openmpi-4.1.5
./configure --prefix=/usr/local/openmpi-4.1.5 && \
make -j$(grep -w processor /proc/cpuinfo | wc -l) && \
make -j$(grep -w processor /proc/cpuinfo | wc -l) install
cat>>/etc/profile<<'EOF'
#---openmpi-4.1.5----------------------------------------
export openmpi_home=/usr/local/openmpi-4.1.5
export PATH=${openmpi_home}/bin:$PATH
export LD_BRARY_PATH=${openmpi_home}/lib:$LD_BRARY_PATH
EOF
source /etc/profile