From 8945a8922f18939e377a8fa16f291c1beea8605a Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Tue, 2 Jan 2024 02:03:55 -0500 Subject: [PATCH] Added files to create SMB share and basic scientific computing environment --- make_cluster.sh | 338 +++++++++++++++++++++++++++++++++++++++++++++++ set_smb_share.sh | 81 ++++++++++++ 2 files changed, 419 insertions(+) create mode 100644 make_cluster.sh create mode 100644 set_smb_share.sh diff --git a/make_cluster.sh b/make_cluster.sh new file mode 100644 index 0000000..0778489 --- /dev/null +++ b/make_cluster.sh @@ -0,0 +1,338 @@ +#!/bin/bash + +if [[ "$BASH_SOURCE" == "$0" ]]; then + echo "This script is the top-level bash file being run." + echo "Setting up the environment for the cluster." + BUILD_LOCATION=/avfs/backend + INSTALL_LOCATION=/avfs/projects/ops + mkdir -p ${BUILD_LOCATION} + mkdir -p ${INSTALL_LOCATION} + echo "Build location: ${BUILD_LOCATION}" + echo "Install location: ${INSTALL_LOCATION}" +else + echo "This script is not the top-level bash file being run." +fi + +## INSTALL GCC FROM SOURCE +GCC_BUILD_DIR=${BUILD_LOCATION}/gcc +GCC_INSTALL_DIR=${INSTALL_LOCATION}/gcc +mkdir -p ${GCC_INSTALL_DIR} + +GCC_VERSION=7.5.0 +cd ${GCC_BUILD_DIR} +mkdir gcc-${GCC_VERSION}-build + +wget https://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.gz +tar -xf gcc-${GCC_VERSION}.tar.gz +mv gcc-${GCC_VERSION} gcc-${GCC_VERSION}-source +cd gcc-${GCC_VERSION}-source +./contrib/download_prerequisites +cd ../gcc-${GCC_VERSION}-build +${GCC_BUILD_DIR}/gcc-${GCC_VERSION}-source/configure --prefix=${GCC_INSTALL_DIR}/${GCC_VERSION} --enable-languages=c,c++,fortran,go --disable-multilib --enable-bootstrap --enable-lto --enable-plugins +make -j$(nproc) +make install + +## INSTALL ENVIRONMENT MODULES FROM SOURCE +MODULES_BUILD_DIR=${BUILD_LOCATION} +MODULES_INSTALL_DIR=${INSTALL_LOCATION}/modules +mkdir -p ${MODULES_INSTALL_DIR} + +cd ${MODULES_BUILD_DIR} +MODULES_VERSION=5.3.1 + +curl -LJO https://github.com/cea-hpc/modules/releases/download/v${MODULES_VERSION}/modules-${MODULES_VERSION}.tar.gz +tar xfz modules-${MODULES_VERSION}.tar.gz +cd modules-${MODULES_VERSION} + +mkdir build && cd build +./configure --prefix=${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION} --modulefilesdir=${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/modulefiles +make -j$(nproc) +make install +ln -s ${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/init/profile.sh /etc/profile.d/modules.sh +ln -s ${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/init/profile.csh /etc/profile.d/modules.csh + +## INSTALL OPENSSL FOR CMAKE +SSL_BUILD_DIR=${BUILD_LOCATION}/openssl +SSL_INSTALL_DIR=${INSTALL_LOCATION}/openssl +mkdir -p ${SSL_BUILD_DIR} +mkdir -p ${SSL_INSTALL_DIR} + +SSL_VERSION=1.1.1w + +cd ${SSL_BUILD_DIR} +wget -c https://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz +tar -xf openssl-${SSL_VERSION}.tar.gz +cd openssl-${SSL_VERSION} +mkdir build && cd build +../config --prefix=${SSL_INSTALL_DIR}/${SSL_VERSION} --openssldir=${SSL_INSTALL_DIR}/${SSL_VERSION} +make -j$(nproc) +make -j$(nproc) test +make install + +## INSTALL Qt FOR CMAKE-GUI +QT_BUILD_DIR=${BUILD_LOCATION}/qt +QT_INSTALL_DIR=${INSTALL_LOCATION}/qt +mkdir -p ${QT_BUILD_DIR} +mkdir -p ${QT_INSTALL_DIR} + +## SOME COMBINATION WILL INSTALL GL +install build-essential libgl1-mesa-dev libglu1-mesa-dev libglut-dev libgl2-mesa-dev libdrm-dev + +QT_VERSION=5.15.12 +QT_MAJOR_VERSION=$(echo ${QT_VERSION} | cut -d. -f1-2) + +cd ${QT_BUILD_DIR} +wget -c https://download.qt.io/official_releases/qt/${QT_MAJOR_VERSION}/${QT_VERSION}/single/qt-everywhere-opensource-src-${QT_VERSION}.tar.xz +tar -xf qt-everywhere-opensource-src-${QT_VERSION}.tar.xz +cd qt-everywhere-opensource-src-${QT_VERSION} +mkdir build && cd build +../configure -prefix ${QT_INSTALL_DIR}/${QT_VERSION} -make tests -release -opensource -confirm-license + +## INSTALL CMAKE FROM SOURCE +CMAKE_BUILD_DIR=${BUILD_LOCATION}/cmake +CMAKE_INSTALL_DIR=${INSTALL_LOCATION}/cmake +mkdir -p ${CMAKE_BUILD_DIR} +mkdir -p ${CMAKE_INSTALL_DIR} + +VERSIONS=(3.5.2 +3.12.4 +3.17.5 +3.21.3 +3.24.4 +3.28.1) + +OPENSSL_ROOT_DIR=${SSL_INSTALL_DIR}/${SSL_VERSION} +for CMAKE_VERSION in "${strings[@]}"; do +# CMAKE_VERSION=3.21.3 +CMAKE_MAJOR_VERSION=$(echo ${CMAKE_VERSION} | cut -d. -f1-2) +cd ${CMAKE_BUILD_DIR} +wget -c http://www.cmake.org/files/v${CMAKE_MAJOR_VERSION}/cmake-${CMAKE_VERSION}.tar.gz +tar -xf cmake-${CMAKE_VERSION}.tar.gz +mkdir -p cmake-${CMAKE_VERSION}/build && cd cmake-${CMAKE_VERSION}/build + +../configure --prefix=${CMAKE_INSTALL_DIR}/${CMAKE_VERSION} --parallel=$(nproc) +make -j$(nproc) +make install +done + +## INSTALL GIT FROM SOURCE +GIT_BUILD_DIR=${BUILD_LOCATION}/git +GIT_INSTALL_DIR=${INSTALL_LOCATION}/git +mkdir -p ${GIT_BUILD_DIR} +mkdir -p ${GIT_INSTALL_DIR} + +cd ${GIT_BUILD_DIR} +GIT_VERSION=2.11.3 +wget -c https://mirrors.edge.kernel.org/pub/software/scm/git/git-${GIT_VERSION}.tar.gz +tar -xzf git-${GIT_VERSION}.tar.gz +cd git-${GIT_VERSION} +make configure +./configure --prefix=${GIT_INSTALL_DIR}/${GIT_VERSION} +make -j$(nproc) +make test +make install + +## INSTALL LLVM FROM SOURCE +LLVM_BUILD_DIR=${BUILD_LOCATION}/llvm +LLVM_INSTALL_DIR=${INSTALL_LOCATION}/llvm +mkdir -p ${LLVM_BUILD_DIR} +mkdir -p ${LLVM_INSTALL_DIR} + +LLVM_VERSION=13.0.0 + +git clone https://github.com/llvm/llvm-project.git ${LLVM_BUILD_DIR}/llvm-${LLVM_VERSION} +cd ${LLVM_BUILD_DIR}/llvm-${LLVM_VERSION} +git checkout llvmorg-${LLVM_VERSION} +mkdir build && cd build +cmake -S llvm -B build -G "Unix Makefiles" \ + -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld;lldb;openmp;parallel-libs;polly" \ + -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${LLVM_INSTALL_DIR}/${LLVM_VERSION} \ + -DLLVM_INSTALL_UTILS=ON llvm +make -j$(nproc) +make install + +module load gcc/${GCC_VERSION} cmake/${CMAKE_VERSION} + +## INSTALL OPENMPI FROM SOURCE + +if [ $(command -v srun) ]; then + echo "Slurm installation found. OpenMPI will be configured with --with-pmi." + EXTRA_CONFIGURE_FLAGS="--with-pmi" +else + EXTRA_CONFIGURE_FLAGS="" +fi + +./configure CFLAGS="${CFLAGS}" \ + --prefix=${pkg_install_dir} \ + --libdir="${pkg_install_dir}/lib" \ + --enable-mpi1-compatibility \ + ${EXTRA_CONFIGURE_FLAGS} + +## INSTALL MPICH FROM SOURCE + + +./configure \ + --prefix="${pkg_install_dir}" \ + MPICC="" \ + FFLAGS="${FCFLAGS} ${compat_flag}" \ + FCFLAGS="${FCFLAGS} ${compat_flag}" \ + --without-x \ + --enable-gl=no \ + --with-device=${MPICH_DEVICE} \ + +make -j$(nproc) +make install + + +MPIRUN="${pkg_install_dir}/bin/mpiexec" +MPICC="${pkg_install_dir}/bin/mpicc" +MPICXX="${pkg_install_dir}/bin/mpicxx" +MPIFC="${pkg_install_dir}/bin/mpifort" +MPIFORT="${MPIFC}" +MPIF77="${MPIFC}" +MPICH_CFLAGS="-I'${pkg_install_dir}/include'" +MPICH_LDFLAGS="-L'${pkg_install_dir}/lib' -Wl,-rpath,'${pkg_install_dir}/lib'" + +export MPI_MODE="${MPI_MODE}" +export MPIRUN="${MPIRUN}" +export MPICC="${MPICC}" +export MPICXX="${MPICXX}" +export MPIFC="${MPIFC}" +export MPIFORT="${MPIFORT}" +export MPIF77="${MPIF77}" +export MPICH_CFLAGS="${MPICH_CFLAGS}" +export MPICH_LDFLAGS="${MPICH_LDFLAGS}" +export MPICH_LIBS="${MPICH_LIBS}" +export MPI_CFLAGS="${MPICH_CFLAGS}" +export MPI_LDFLAGS="${MPICH_LDFLAGS}" +export MPI_LIBS="${MPICH_LIBS}" +export CP_DFLAGS="\${CP_DFLAGS} IF_MPI(-D__parallel|)" +export CP_CFLAGS="\${CP_CFLAGS} IF_MPI(${MPICH_CFLAGS}|)" +export CP_LDFLAGS="\${CP_LDFLAGS} IF_MPI(${MPICH_LDFLAGS}|)" +export CP_LIBS="\${CP_LIBS} IF_MPI(${MPICH_LIBS}|)" + +## INSTALL OPENBLAS FROM SOURCE +OPENBLAS_BUILD_DIR=${BUILD_LOCATION}/openblas +OPENBLAS_INSTALL_DIR=${INSTALL_LOCATION}/openblas +mkdir -p ${OPENBLAS_BUILD_DIR} +mkdir -p ${OPENBLAS_INSTALL_DIR} + +OPENBLAS_VERSION=0.3.18 + +cd ${OPENBLAS_BUILD_DIR} +wget -c openblas +tar -xf openblas-${OPENBLAS_VERSION}.tar.gz +cd openblas-${OPENBLAS_VERSION} +make -j$(nproc) +make install PREFIX=${OPENBLAS_INSTALL_DIR}/${OPENBLAS_VERSION} + +## INSTALL LAPACK FROM SOURCE +LAPACK_BUILD_DIR=${BUILD_LOCATION}/lapack +LAPACK_INSTALL_DIR=${INSTALL_LOCATION}/lapack +mkdir -p ${LAPACK_BUILD_DIR} +mkdir -p ${LAPACK_INSTALL_DIR} + +LAPACK_VERSION=3.10.0 + +## INSTALL HDF5 FROM SOURCE +module load gcc/8.1.0 openmpi/4.1.4 cmake/3.21.3 + +# Check if MPI is enabled +if [ -n "$MPI_ENABLED" ]; then + MPI_ENABLED=true +else + MPI_ENABLED=false +fi + +HDF5_BUILD_DIR=${BUILD_LOCATION}/hdf5 +HDF5_VERSION=1.12.1 + +# Use the MPI_ENABLED variable in your script +if [ "$MPI_ENABLED" = true ]; then + # MPI is enabled, do something + echo "MPI is enabled" + HDF5_INSTALL_DIR=${INSTALL_LOCATION}/hdf5-withmpi/${HDF5_VERSION}/${COMPILER}/${COMPILER_VERSION}/${MPI_NAME}/${MPI_VERSION} +else + # MPI is not enabled, do something else + echo "MPI is not enabled" + HDF5_INSTALL_DIR=${INSTALL_LOCATION}/hdf5/${HDF5_VERSION}/${COMPILER}/${COMPILER_VERSION} +fi + +## INSTALL NETCDF FROM SOURCE + +## INSTALL OPENMC FROM SOURCE +module load gcc/8.1.0 cmake/3.21.3 python/3.11.5 git/2.11.3 + +OPENMC_BUILD_DIR=${BUILD_LOCATION}/openmc +OPENMC_INSTALL_DIR=${INSTALL_LOCATION}/openmc + +mkdir -p ${OPENMC_BUILD_DIR} +mkdir -p ${OPENMC_INSTALL_DIR} + +PROJECT_FOLDER=/avfs/projects/openmc +cd ${PROJECT_FOLDER} +python3 -m venv .venv + +OPENMC_VERSION=0.14.0 + +cd ${OPENMC_BUILD_DIR} +git clone --recurse-submodules https://github.com/openmc-dev/openmc.git +cd openmc +git checkout v${OPENMC_VERSION} +mkdir build && cd build + +if [ "$MPI_ENABLED" = true ]; then + # MPI is enabled, do something + # HDF5_ROOT=/avfs/projects/hdf5-withmpi/gcc/8.1.0/openmpi/4.1.4 \ + # CC=/avfs/projects/openmpi/4.1.4/gcc/8.1.0/bin/mpicc \ + # CXX=/avfs/projects/openmpi/4.1.4/gcc/8.1.0/bin/mpicxx \ + module load hdf5-withmpi openmpi/4.1.4 + HDF5_ROOT=${HDF5_ROOT} CC=mpicc CXX=mpicxx \ + cmake .. -DCMAKE_INSTALL_PREFIX=${OPENMC_INSTALL_DIR}/${OPENMC_VERSION} -DOPENMC_USE_MPI=ON -DOPENMC_USE_OPENMP=ON -DCMAKE_BUILD_TYPE=Release +else + # MPI is not enabled, do something else + module load hdf5 + HDF5_ROOT=${HDF5_ROOT} + cmake .. -DCMAKE_INSTALL_PREFIX=${OPENMC_INSTALL_DIR}/${OPENMC_VERSION} -DOPENMC_USE_MPI=OFF -DOPENMC_USE_OPENMP=ON -DCMAKE_BUILD_TYPE=Release +fi + +make -j20 +make install +cd .. +source ${PROJECT_FOLDER}/.venv/bin/activate + +if [ "$MPI_ENABLED" = true ]; then + # MPI is enabled, do something + MPICC=/avfs/projects/openmpi/4.1.4/gcc/8.1.0/bin/mpicc \ + /avfs/projects/python/3.11.5/bin/python3 -m pip install mpi4py + CC=/avfs/projects/openmpi/4.1.4/gcc/8.1.0/bin/mpicc HDF5_MPI=ON \ + HDF5_DIR=/avfs/projects/hdf5-withmpi/gcc/8.1.0/openmpi/4.1.4 \ + ${PROJECT_FOLDER}/.venv/bin/python3 -m pip install --no-binary=h5py h5py + ${PROJECT_FOLDER}/.venv/bin/python3 -m pip install . +else + # MPI is not enabled, do something else + HDF5_DIR=${HDF5_ROOT} + ${PROJECT_FOLDER}/.venv/bin/python3 -m pip install . +fi + + + + + +# HDF5_ROOT=/share/apps/hdf5-withmpi/gcc/8.1.0/openmpi/4.1.4 CC=/share/apps/openmpi/4.1.4/gcc/8.1.0/bin/mpicc CXX=/share/apps/openmpi/4.1.4/gcc/8.1.0/bin/mpicxx cmake .. -DCMAKE_INSTALL_PREFIX=/qfs/people/parl703/openmc -DOPENMC_USE_MPI=ON -DOPENMC_USE_OPENMP=ON -DCMAKE_BUILD_TYPE=Release +# make -j20 +# make install +# cd .. +# MPICC=/share/apps/openmpi/4.1.4/gcc/8.1.0/bin/mpicc /share/apps/python/3.11.5/bin/python3 -m pip install mpi4py +# CC=/share/apps/openmpi/4.1.4/gcc/8.1.0/bin/mpicc HDF5_MPI=ON HDF5_DIR=/share/apps/hdf5-withmpi/gcc/8.1.0/openmpi/4.1.4 /rcfs/projects/sherlock/openmc/dwnld/.venv/bin/python3 -m pip install --no-binary=h5py h5py +# /rcfs/projects/sherlock/openmc/dwnld/.venv/bin/python3 -m pip install . + + + + + + + + + + diff --git a/set_smb_share.sh b/set_smb_share.sh new file mode 100644 index 0000000..d9fbb2c --- /dev/null +++ b/set_smb_share.sh @@ -0,0 +1,81 @@ +SHARE_DIR=/data/share + +## DEBIAN +sudo apt-get install samba smbclient cifs-utils + +## CENTOS +sudo yum install samba samba-common samba-client + +## Create a directory to share +sudo mkdir -p ${SHARE_DIR} +sudo chmod -R 2770 ${SHARE_DIR} +sudo chown -R nobody:nogroup ${SHARE_DIR} +sudo chcon -t samba_share_t ${SHARE_DIR} + +cat << EOF >> /etc/samba/smb.conf.bkp +[global] +interfaces = 10.0.0.0/24 eth0 +# hosts allow = 127.0.0.1/8 192.168.1.0/24 +workgroup = WORKGROUP +server string = Samba Server %v +netbios name = MYSHARES +# security = user +unix password sync = Yes +passwd program = /usr/bin/passwd %u +map to guest = bad user +dns proxy = no + +[share] +path = ${SHARE_DIR} +available = yes +valid users = ${USER} +read only = no +browsable = yes +public = no +writable = yes + +[Public] +comment = Public Folder +path = ${SHARE_DIR}/public +writable = yes +guest ok = yes +guest only = yes +force create mode = 770 +force directory mode = 770 + +[Private] +comment = Private Folder +path = ${SHARE_DIR} +writable = yes +guest ok = no +valid users = @smbshare +# force create mode = 660 +# force directory mode = 770 +inherit permissions = yes + +EOF + +sudo testparm /etc/samba/smb.conf.bkp + +## IF EXECUTION WORKS, THEN MOVE THE FILE TO THE ORIGINAL PATH +sudo mv /etc/samba/smb.conf.bkp /etc/samba/smb.conf +sudo useradd -M -s /sbin/nologin sambauser +sudo usermod -aG smbshare sambauser +sudo smbpasswd -a sambauser +sudo smbpasswd -e sambauser + +## DEBIAN +sudo systemctl restart nmbd +sudo systemctl restart smbd +sudo ufw allow from 192.168.205.0/24 to any app Samba + +## CENTOS +sudo firewall-cmd --add-service=samba --zone=public --permanent +sudo firewall-cmd --reload +sudo systemctl start smb +sudo systemctl enable smb +sudo systemctl status smb + +sudo systemctl start nmb +sudo systemctl enable nmb +sudo systemctl status nmb \ No newline at end of file