Skip to content

Commit

Permalink
Merge branch 'update.setup.env.tools.install.linaro' into 'master.dev'
Browse files Browse the repository at this point in the history
[update.setup.env.tools.install.linaro] Added new module installation script for linaro

See merge request piclas/piclas!988
  • Loading branch information
scopplestone committed Nov 26, 2024
2 parents 33ff058 + fa853e9 commit d19a2d4
Show file tree
Hide file tree
Showing 10 changed files with 250 additions and 53 deletions.
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -199,9 +199,9 @@ ENDIF()
# =========================================================================
# make sure that the default is a RELEASE
IF (NOT CMAKE_BUILD_TYPE)
SET (CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: Debug, Release, Profile, Sanitize (only GNU), Nitro (only GNU)." FORCE)
SET (CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: Debug, Release, Profile (profiling with gprof -pg), NoGProfile (profiling without -pg) Sanitize (only GNU), Nitro (only GNU)." FORCE)
IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release Profile Sanitize Nitro)
SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release Profile NoGProfile Sanitize Nitro)
ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release Profile)
ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Cray")
Expand Down
23 changes: 13 additions & 10 deletions CMakeListsMachine.txt
Original file line number Diff line number Diff line change
Expand Up @@ -250,11 +250,12 @@ IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
ENDIF()
ENDIF()
# initialize all variables as signalling NaNs to force the user to correctly initialize these data types
SET (CMAKE_Fortran_FLAGS_NITRO "${CMAKE_Fortran_FLAGS} -Ofast ${PICLAS_INSTRUCTION}")
SET (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS} -O3 ${PICLAS_INSTRUCTION} -finline-functions -fstack-arrays")
SET (CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS} -pg -O3 ${PICLAS_INSTRUCTION} -finline-functions -fstack-arrays")
SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS} -g -Og -ggdb3 -ffpe-trap=invalid -fbounds-check -fbacktrace -Wall")
SET (CMAKE_Fortran_FLAGS_SANITIZE "${CMAKE_Fortran_FLAGS} -g -Og -ggdb3 -ffpe-trap=invalid,zero,overflow,denorm -fbounds-check -fbacktrace -Wall -fsanitize=address,undefined,leak -fno-omit-frame-pointer -Wc-binding-type -Wuninitialized -pedantic")
SET (CMAKE_Fortran_FLAGS_NITRO "${CMAKE_Fortran_FLAGS} -Ofast ${PICLAS_INSTRUCTION}")
SET (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS} -O3 ${PICLAS_INSTRUCTION} -finline-functions -fstack-arrays")
SET (CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS} -pg -O3 ${PICLAS_INSTRUCTION} -finline-functions -fstack-arrays")
SET (CMAKE_Fortran_FLAGS_NOGPROFILE "${CMAKE_Fortran_FLAGS} -g1 -O3 ${PICLAS_INSTRUCTION} -fno-inline -fno-optimize-sibling-calls -fstack-arrays")
SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS} -g -Og -ggdb3 -ffpe-trap=invalid -fbounds-check -fbacktrace -Wall")
SET (CMAKE_Fortran_FLAGS_SANITIZE "${CMAKE_Fortran_FLAGS} -g -Og -ggdb3 -ffpe-trap=invalid,zero,overflow,denorm -fbounds-check -fbacktrace -Wall -fsanitize=address,undefined,leak -fno-omit-frame-pointer -Wc-binding-type -Wuninitialized -pedantic")
# Compile flags depend on the generator
IF(NOT "${CMAKE_GENERATOR}" MATCHES "Ninja")
# add flags only for compiling not linking!
Expand Down Expand Up @@ -335,10 +336,12 @@ ENDIF()
MARK_AS_ADVANCED(FORCE CMAKE_Fortran_FLAGS)
MARK_AS_ADVANCED(FORCE CMAKE_Fortran_FLAGS_RELEASE)
MARK_AS_ADVANCED(FORCE CMAKE_Fortran_FLAGS_PROFILE)
MARK_AS_ADVANCED(FORCE CMAKE_Fortran_FLAGS_NOGPROFILE)
MARK_AS_ADVANCED(FORCE CMAKE_Fortran_FLAGS_DEBUG)
MARK_AS_ADVANCED(FORCE CMAKE_Fortran_FLAGS_SANITIZE)
SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}" CACHE STRING "Default compiler flags" FORCE)
SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}" CACHE STRING "Release compiler flags" FORCE)
SET(CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE}" CACHE STRING "Profile compiler flags" FORCE)
SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG}" CACHE STRING "Debug compiler flags" FORCE)
SET(CMAKE_Fortran_FLAGS_SANITIZE "${CMAKE_Fortran_FLAGS_SANITIZE}" CACHE STRING "Sanitize compiler flags" FORCE)
SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}" CACHE STRING "Default compiler flags" FORCE)
SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASER}" CACHE STRING "Release compiler flags" FORCE)
SET(CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE}" CACHE STRING "Profile compiler flags" FORCE)
SET(CMAKE_Fortran_FLAGS_NOGPROFILE "${CMAKE_Fortran_FLAGS_NOGPROFILE}" CACHE STRING "NoGProfile compiler flags" FORCE)
SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG}" CACHE STRING "Debug compiler flags" FORCE)
SET(CMAKE_Fortran_FLAGS_SANITIZE "${CMAKE_Fortran_FLAGS_SANITIZE}" CACHE STRING "Sanitize compiler flags" FORCE)
5 changes: 3 additions & 2 deletions tools/Setup_ModuleEnv/InstallCMake.sh
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,10 @@ fi

# DOWNLOAD and INSTALL CMAKE (example cmake-3.4.3)
# For current releases, see: https://github.com/Kitware/CMake/releases/
CMAKEVERSION='3.24.2'
#CMAKEVERSION='3.24.2'
#CMAKEVERSION='3.28.2'
#CMAKEVERSION='3.30.3'
CMAKEVERSION='3.31.1'

CMAKEDIR=${INSTALLDIR}/cmake/${CMAKEVERSION}/standard
MODULEFILE=${INSTALLDIR}/modules/modulefiles/cmake/cmake/${CMAKEVERSION}
Expand Down Expand Up @@ -171,4 +172,4 @@ if [ ! -e "${MODULEFILE}" ]; then
fi
else
echo "${YELLOW}CMake-${CMAKEVERSION} already created (module file exists). Run with -r to remove and re-install.${NC}"
fi
fi
8 changes: 4 additions & 4 deletions tools/Setup_ModuleEnv/InstallHDF5.sh
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,12 @@ do
USECOMPILERVERSION=13.2.0

# OpenMPI
#MPINAMES='openmpi'
#USEMPIVERSION=4.1.5
MPINAMES='openmpi'
USEMPIVERSION=4.1.6

# MPICH
MPINAMES='mpich'
USEMPIVERSION=4.1.2
#MPINAMES='mpich'
#USEMPIVERSION=4.1.2

# MPICH "debug", which uses MPICH installation with --with-device=ch3:sock.
# This will use the older ch3:sock channel that does not busy poll.
Expand Down
21 changes: 4 additions & 17 deletions tools/Setup_ModuleEnv/InstallHOPR.sh
Original file line number Diff line number Diff line change
Expand Up @@ -100,13 +100,6 @@ do
if [ ${ARG} == "--modules" ] || [ ${ARG} == "-m" ]; then
LOADMODULES=0
# Set desired versions
#CMAKEVERSION=3.15.3-d
#CMAKEVERSION=3.17.0-d
#CMAKEVERSION=3.20.3
#CMAKEVERSION=3.21.3
#CMAKEVERSION=3.24.2
#CMAKEVERSION=3.26.4
CMAKEVERSION=3.30.3

#GCCVERSION=9.2.0
#GCCVERSION=9.3.0
Expand All @@ -122,8 +115,9 @@ do
#OPENMPIVERSION=3.1.6
#OPENMPIVERSION=4.1.1
#OPENMPIVERSION=4.1.5
OPENMPIVERSION=4.1.6

MPICHVERSION=4.1.2
#MPICHVERSION=4.1.2

# chose which mpi you want to have installed (openmpi or mpich), default is openmpi
if [[ -n ${MPICHVERSION} ]]; then
Expand Down Expand Up @@ -191,22 +185,17 @@ fi
# take the first gcc compiler installed with first compatible openmpi/mpich and hdf5
echo " "
if [[ $LOADMODULES -eq 1 ]]; then
CMAKEVERSION=$(ls ${MODULESDIR}/cmake/ | sed 's/ /\n/g' | grep -i "[0-9]\." | head -n 1 | tail -n 1)
if [[ -z $CMAKEVERSION ]]; then
CMAKEVERSION=$(ls ${MODULESDIR}/utilities/cmake/ | sed 's/ /\n/g' | grep -i "[0-9]\." | head -n 1 | tail -n 1)
fi
GCCVERSION=$(ls ${MODULESDIR}/compilers/gcc/ | sed 's/ /\n/g' | grep -i "[0-9]\." | head -n 1 | tail -n 1)
MPIVERSION=$(ls ${MODULESDIR}/MPI/${WHICHMPI}/ | sed 's/ /\n/g' | grep -i "[0-9]\." | head -n 1 | tail -n 1)
HDF5VERSION=$(ls ${MODULESDIR}/libraries/hdf5/ | sed 's/ /\n/g' | grep -i "[0-9]\." | head -n 1 | tail -n 1)
echo -e "Modules found automatically.\n\nCMAKEVERSION=${CMAKEVERSION}\nGCCVERSION=${GCCVERSION}\n${WHICHMPI}-MPIVERSION=${MPIVERSION}\nHDF5VERSION=${HDF5VERSION}\n\nWARNING: The combination might not be possible!"
echo -e "Modules found automatically.\n\nGCCVERSION=${GCCVERSION}\n${WHICHMPI}-MPIVERSION=${MPIVERSION}\nHDF5VERSION=${HDF5VERSION}\n\nWARNING: The combination might not be possible!"
if [[ ${RERUNMODE} -eq 0 ]]; then
read -p "Press [Enter] to continue or [Crtl+c] to abort!"
fi
else
echo "Modules defined by user. Check if the combination is possible!"
fi

check_module "cmake" "${CMAKEVERSION}"
check_module "gcc" "${GCCVERSION}"
check_module "${WHICHMPI}" "${MPIVERSION}"
check_module "hdf5" "${HDF5VERSION}"
Expand All @@ -228,7 +217,6 @@ if [[ ! -e "${MODULEFILE}" || ${UPDATEMODE} -eq 1 ]]; then
echo -e "$GREEN""$MODULEFILE$NC"
echo " "
module purge
load_module "cmake/${CMAKEVERSION}"
load_module "gcc/${GCCVERSION}"
load_module "${WHICHMPI}/${MPIVERSION}/gcc/${GCCVERSION}"
load_module "hdf5/${HDF5VERSION}/gcc/${GCCVERSION}/${WHICHMPI}/${MPIVERSION}"
Expand Down Expand Up @@ -357,7 +345,6 @@ if [[ ! -e "${MODULEFILE}" || ${UPDATEMODE} -eq 1 ]]; then
fi
cp ${TEMPLATEPATH} ${MODULEFILE}
sed -i 's/hoprversion/'${HOPRVERSION}'/gI' ${MODULEFILE}
sed -i 's/CMAKEVERSIONFLAG/'${CMAKEVERSION}'/gI' ${MODULEFILE}
sed -i 's/GCCVERSIONFLAG/'${GCCVERSION}'/gI' ${MODULEFILE}
sed -i 's/MPIVERSIONFLAG/'${MPIVERSION}'/gI' ${MODULEFILE}
sed -i 's/HDF5VERSIONFLAG/'${HDF5VERSION}'/gI' ${MODULEFILE}
Expand All @@ -369,4 +356,4 @@ if [[ ! -e "${MODULEFILE}" || ${UPDATEMODE} -eq 1 ]]; then
fi
else
echo -e "$YELLOW""HOPR-${HOPRVERSION} already created: module file exists under ${MODULEFILE}$NC"
fi
fi
193 changes: 193 additions & 0 deletions tools/Setup_ModuleEnv/InstallLinaro.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
#!/bin/bash -i

#==============================================================================
# title : InstallLinaro.sh
# description : This script installs linaro (https://www.linaroforge.com/)
# with a specified version as given below via
# below via LINAROVERSION='XX.XX.XX'
# date : Nov 12, 2024
# version : 1.0
# usage : bash InstallLinaro.sh
# notes :
#==============================================================================

# Check privilege
if [[ "$EUID" -ne 0 ]]; then
echo "Please run as root"
exit 1
fi

# --------------------------------------------------------------------------------------------------
# Colors
# --------------------------------------------------------------------------------------------------

if test -t 1; then # if terminal
NbrOfColors=$(which tput > /dev/null && tput colors) # supports color
if test -n "$NbrOfColors" && test $NbrOfColors -ge 8; then
TERMCOLS=$(tput cols)
BOLD="$(tput bold)"
UNDERLINE="$(tput smul)"
STANDOUT="$(tput smso)"
NORMAL="$(tput sgr0)"
NC="$(tput sgr0)"
BLACK="$(tput setaf 0)"
RED="$(tput setaf 1)"
GREEN="$(tput setaf 2)"
YELLOW="$(tput setaf 3)"
BLUE="$(tput setaf 4)"
MAGENTA="$(tput setaf 5)"
CYAN="$(tput setaf 6)"
WHITE="$(tput setaf 7)"
fi
fi

# --------------------------------------------------------------------------------------------------
# Settings
# --------------------------------------------------------------------------------------------------

INSTALLDIR=/opt
SOURCESDIR=/opt/sources
TEMPLATEPATH=$(echo `pwd`/moduletemplates/utilities/linaro/linaro_temp)
if [[ ! -f ${TEMPLATEPATH} ]]; then
echo "${RED}ERROR: module template not found under ${TEMPLATEPATH}${NC}. Exit."
exit
fi

if [ ! -d "${SOURCESDIR}" ]; then
mkdir -p ${SOURCESDIR}
fi

# DOWNLOAD and INSTALL Linaro (example linaro-24.0.6)
# For current releases, see: https://www.linaroforge.com/download-documentation
LINAROVERSION='24.0.6'

LINAROINSTALLDIR=${INSTALLDIR}/linaro/forge/${LINAROVERSION}
MODULEFILE=${INSTALLDIR}/modules/modulefiles/utilities/linaro/${LINAROVERSION}
LINARODIRNAME=linaro-forge-${LINAROVERSION}-linux-x86_64
BUILDDIR=${SOURCESDIR}/${LINARODIRNAME}
TARFILE=${SOURCESDIR}/${LINARODIRNAME}.tar

# Check if module file already exists under, e.g., /opt/modules/modulefiles/utilities/linaro/24.0.6
if [ ! -e "${MODULEFILE}" ]; then
echo -e "This will install linaro version ${GREEN}${LINAROVERSION}${NC}."
read -p "Press [Enter] to continue or [Crtl+c] to abort!"
fi

# Remove INSTALL module directory during re-run
if [[ -n ${1} ]]; then
if [[ ${1} =~ ^-r(erun)?$ ]] && [[ -f ${MODULEFILE} ]]; then
read -p "[Step 1 of 2: Remove module file] Are you sure that you want to delete ${MODULEFILE}?"
if [ -n ${MODULEFILE} ]; then
rm ${MODULEFILE}
fi
fi
fi

# Check if module file does NOT exist under, e.g., /opt/modules/modulefiles/utilities/linaro/24.0.6
if [ ! -e "${MODULEFILE}" ]; then

# Check if module is available (not required here, but for following libs)
if [[ -n $(module purge 2>&1) ]]; then
echo -e "${RED}module: command not found.\nThis script must be run in an interactive shell (the first line must read #! /bin/bash -i)${NC}"
exit
fi

# Switch to the sources directory
cd ${SOURCESDIR}

# Download tar.gz file from FTP server
if [ ! -f ${TARFILE} ]; then
DOWNLOADPATH="https://downloads.linaroforge.com/${LINAROVERSION}/$(basename ${TARFILE})"
wget ${DOWNLOADPATH}
fi

# Check if tar.gz file was correctly downloaded, abort script if non-existent
if [ ! -f ${TARFILE} ]; then
echo "no linaro install-file downloaded for ${LINARODIRNAME}"
echo "check if ${DOWNLOADPATH} exists"
exit
fi

# Extract tar.gz file
tar -xf ${TARFILE}

# Check if extraction failed
if [ ${PIPESTATUS[0]} -ne 0 ]; then
echo " " && ls -l ${TARFILE}
echo "${RED} Failed to extract: [tar -xzf ${TARFILE}] (probably broken or failed download). Try removing ${TARFILE} before processing. Exit.${NC}"
exit
fi

# Remove SOURCE linaro-X.Y.Z/build/* directory during re-run
if [[ ${1} =~ ^-r(erun)?$ ]] ; then
read -p "[Step 2 of 2: Remove build directory/source files] Are you sure that you want to delete ${BUILDDIR} ?"
if [ -n ${BUILDDIR} ]; then
if [ -d ${BUILDDIR} ]; then
# Delte the linaro directory
rm -r ${BUILDDIR}

# Extract tar.gz file
tar -xf ${TARFILE}

# Check if extraction failed
if [ ${PIPESTATUS[0]} -ne 0 ]; then
echo " " && ls -l ${TARFILE}
echo "${RED} Failed to extract: [tar -xzf ${TARFILE}] (probably broken or failed download). Try removing ${TARFILE} before processing. Exit.${NC}"
exit
fi
fi
fi
fi

# Change to build directory
cd ${BUILDDIR}

# Install linaro
./textinstall.sh --accept-licence ${LINAROINSTALLDIR}

# Check if compilation failed
if [ ${PIPESTATUS[0]} -ne 0 ]; then
echo " "
echo "${RED}Failed: [./textinstall.sh --accept-licence]${NC}"
exit 1
fi

# Check if the binaries exist
if [ -e "${LINAROINSTALLDIR}/bin/ddt" ] && [ -e "${LINAROINSTALLDIR}/bin/forge" ] && [ -e "${LINAROINSTALLDIR}/bin/map" ] && [ -e "${LINAROINSTALLDIR}/bin/perf-report" ]; then
# Check if the module directory for linaro exists
if [ ! -e "${INSTALLDIR}/modules/modulefiles/utilities/linaro" ]; then
mkdir -p ${INSTALLDIR}/modules/modulefiles/utilities/linaro
fi
# Copy the module file
cp ${TEMPLATEPATH} ${MODULEFILE}

# Replace the temporary linaro version in the module file by the current version
sed -i 's/linaroversion/'${LINAROVERSION}'/g' ${MODULEFILE}

# Remove SOURCE tar.gz file after successful installation
# [ -f ${TARFILE} ] && rm ${TARFILE}
else
echo "${RED}ERROR in linaro installation, no modulefile created${NC}"
echo "checking ${LINAROINSTALLDIR}/bin/linaro"
[ ! -e ${LINAROINSTALLDIR}/bin/ddt ] && echo "${RED}ERROR: ddt not installed${NC}"
[ ! -e ${LINAROINSTALLDIR}/bin/forge ] && echo "${RED}ERROR: forge not installed${NC}"
[ ! -e ${LINAROINSTALLDIR}/bin/map ] && echo "${RED}ERROR: map not installed${NC}"
[ ! -e ${LINAROINSTALLDIR}/bin/perf-report ] && echo "${RED}ERROR: perf-report not installed${NC}"
exit 1
fi
else
echo "${YELLOW}${LINARODIRNAME} already created (module file exists under ${MODULEFILE}). Run with -r to remove and re-install.${NC}"
fi

echo ""
echo "${GREEN}Successfully installed linaro. For information on the usage, see the following:${NC}"
echo ""
echo "${GREEN} RELEASE-NOTES: ${BUILDDIR}/RELEASE-NOTES${NC}"
echo "${GREEN} Documentation: https://docs.linaroforge.com/24.0.4/html/forge/forge/index.html${NC}"
echo ""
echo "${GREEN}For information on how to install a licence, see the following:${NC}"
echo ""
echo "${GREEN} Documentation: https://docs.linaroforge.com/24.0.4/html/forge/forge/licensing/index.html${NC}"
echo ""
echo "${GREEN} If you have a licence (workstation or evaluation licence), copy it into the directory ${LINAROINSTALLDIR}/licences${NC}"
echo ""
4 changes: 2 additions & 2 deletions tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ fi
# --------------------------------------------------------------------------------------------------
NBROFCORES=$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}')
# chose which mpi you want to have installed (openmpi or mpich)
#WHICHMPI=openmpi
WHICHMPI=mpich
WHICHMPI=openmpi
#WHICHMPI=mpich
#WHICHMPI=mpich-debug
# choose for which compilers mpi is build (gcc or intel)
WHICHCOMPILER=gcc
Expand Down
8 changes: 4 additions & 4 deletions tools/Setup_ModuleEnv/InstallModules.sh
Original file line number Diff line number Diff line change
Expand Up @@ -251,11 +251,11 @@ if [ ! -d "${MODULESHOME}" ]; then
# ----------------- other shells -----------------
echo ""
echo "${GREEN}==============================================================================================================${NC}"
echo "${GREEN}Initialization has been created in /etc/profile and /etc/profile but not for other shells.${NC}"
echo "${GREEN}Initialization has been created in /etc/profile and /etc/bash.bashrc but not for other shells.${NC}"
echo "${GREEN}If you are using a different shell, e.g., zsh, then copy the following to your .zshrc.local or .zshrc to initialize the modules correctly${NC}"
echo ""
echo "if [ -f /opt/modules/'${MODULEVERSION}'/init/zsh ]; then"
echo " . /opt/modules/'${MODULEVERSION}'/init/zsh"
echo "if [ -f /opt/modules/${MODULEVERSION}/init/zsh ]; then"
echo " . /opt/modules/${MODULEVERSION}/init/zsh"
echo "fi"
echo ""
echo "${GREEN}For other shells, note that 'zsh' must be exchanged for the specific shell type${NC}"
Expand Down Expand Up @@ -373,4 +373,4 @@ echo "MODULESHOME :"${MODULESHOME}
echo "INSTALLPREFIX:"${INSTALLPREFIX}
if [ -z "${MODULESHOME}" ] && [ -d ${INSTALLPREFIX} ]; then
echo "${GREEN}Modules installed. System restart might be required.${NC}"
fi
fi
Loading

0 comments on commit d19a2d4

Please sign in to comment.