REDACTED-rig/XMRig-Auto-Build
2022-03-13 10:50:53 -04:00

367 lines
9.1 KiB
Bash
Executable file

#!/usr/bin/env bash
################################################################ HEADER CODE ################################################################
#
# Colors
#
# bold
bred="printf \033[1;31m"
bgreen="printf \033[1;32m"
bblue="printf \033[1;34m"
bwhite="printf \033[1;37m"
# high intensity
ired="printf \033[0;91m"
igreen="printf \033[0;92m"
iblue="printf \033[0;94m"
iwhite="printf \033[0;97m"
# no color
off="printf \033[0m"
#
# Variables
#
distroName="$(cat /etc/*-release | grep -w "NAME")"
distroPrettyName="$(cat /etc/*-release | grep -w "PRETTY_NAME" | sed "s/PRETTY_NAME=//")"
installDirectory="$(pwd)"
AutoBuild="$installDirectory/AutoBuild"
deps="$AutoBuild/deps"
libBuild="$AutoBuild/libBuild"
#
# Prompt/Message Functions
#
YES_no()
{
read yn
if [[ $yn = "" || $yn = "y" || $yn = "Y" ||$yn = "yes" || $yn = "Yes" ]]; then
Yes
else
No
fi
}
yes_NO()
{
read yn
if [[ $yn = "" || $yn = "n" || $yn = "N" ||$yn = "no" || $yn = "No" ]]; then
No
else
Yes
fi
}
Build_Message(){ $bgreen; echo "############ $1 ############" ;$off;}
#
# Build Dependency Install Functions
#
Apt_Build_Dependencies(){ sudo apt install git wget build-essential cmake automake libtool autoconf ;}
Pacman_Build_Dependencies(){ sudo pacman -S git wget base-devel cmake ;}
DNF_Build_Dependencies(){ sudo dnf install -y git wget make cmake gcc gcc-c++ libstdc++-static automake libtool autoconf ;}
#
# Library Code Build Functions
#
Build_Folders()
{
Build_Message "Creating Build Folders"
mkdir -p $AutoBuild
mkdir -p $deps
mkdir -p $deps/include
mkdir -p $deps/lib
mkdir -p $libBuild
}
Build_Libuv()
{
Build_Message "Building Libuv"
local UV_VERSION="1.44.1"
cd "$libBuild"
if [[ $libVersion = "stable" ]]; then
wget https://github.com/libuv/libuv/archive/v${UV_VERSION}.tar.gz -O v${UV_VERSION}.tar.gz
tar -xzf v${UV_VERSION}.tar.gz
cd libuv-${UV_VERSION}
else
git clone -b master https://github.com/libuv/libuv/
cd libuv
fi
./autogen.sh
./configure --disable-shared
make -j$(nproc || sysctl -n hw.ncpu || sysctl -n hw.logicalcpu)
mv -f include/* $deps
mv -f .libs/libuv.a $deps/lib
}
Build_Hwloc()
{
Build_Message "Building Hwloc"
local HWLOC_VERSION="2.7.0"
local HWLOC_V="v2.7"
cd "$AutoBuild"
cd $libBuild
if [[ $libVersion = "stable" ]]; then
wget https://download.open-mpi.org/release/hwloc/$HWLOC_V/hwloc-${HWLOC_VERSION}.tar.gz -O hwloc-${HWLOC_VERSION}.tar.gz
tar -xzf hwloc-${HWLOC_VERSION}.tar.gz
cd hwloc-${HWLOC_VERSION}
else
git clone -b master https://github.com/open-mpi/hwloc
cd hwloc
./autogen.sh
fi
./configure --disable-shared --enable-static --disable-io --disable-libudev --disable-libxml2
make -j$(nproc || sysctl -n hw.ncpu || sysctl -n hw.logicalcpu)
mv -f include/* $deps
mv -f hwloc/.libs/libhwloc.a $deps/lib
}
Build_OpenSSL()
{
Build_Message "Building OpenSSL"
local OPENSSL_VERSION="1.1.1m"
cd "$AutoBuild"
cd $libBuild
if [[ $libVersion = "stable" ]]; then
wget https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz -O openssl-${OPENSSL_VERSION}.tar.gz
tar -xzf openssl-${OPENSSL_VERSION}.tar.gz
cd openssl-${OPENSSL_VERSION}
else
git clone -b "OpenSSL_1_1_1-stable" https://github.com/openssl/openssl
cd openssl
fi
./config -no-shared -no-asm -no-zlib -no-comp -no-dgram -no-filenames -no-cms
make -j$(nproc || sysctl -n hw.ncpu || sysctl -n hw.logicalcpu)
mv -f include/* $deps
mv -f libcrypto.a $deps/lib
mv -f libssl.a $deps/lib
}
Build_LibreSSL()
{
Build_Message "Building LibreSSL..."
local LIBRESSL_VERSION="3.4.2"
cd "$AutoBuild"
cd $libBuild
if [[ $libVersion = "stable" ]]; then
wget https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${LIBRESSL_VERSION}.tar.gz -O libressl-${LIBRESSL_VERSION}.tar.gz
tar -xzf libressl-${LIBRESSL_VERSION}.tar.gz
cd libressl-${LIBRESSL_VERSION}
else
git clone -b master https://github.com/libressl-portable/portable
cd portable
./autogen.sh
fi
./configure --disable-shared
make -j$(nproc || sysctl -n hw.ncpu || sysctl -n hw.logicalcpu)
mv -f include/* $deps
mv -f crypto/.libs/libcrypto.a $deps/lib
mv -f ssl/.libs/libssl.a $deps/lib
}
Build_XMRig()
{
Build_Message "Building XMRig..."
cd "$AutoBuild"
cmake .. -DXMRIG_DEPS=$deps
make -j$(nproc)
cp "$installDirectory/src/config.json" $AutoBuild
}
Build_Fail()
{
if [[ $? != 0 ]]; then
$bred; echo "XMRig-Auto-Build failed building $1..."
$bred; echo -n "Remove all XMRig-Auto-Build files? (Y/n) " ;$off
Yes()
{
$iwhite; echo "Removing..."
sudo rm -r "$AutoBuild" &&$green&& echo "Removed!"
}
No(){ $iwhite; echo "Skipping..." ;}
YES_no
$bred; echo -n "Remove XMRig folder aswell? (Y/n) " ;$off
Yes()
{
$iwhite; echo "Removing..."
sudo rm -r "$installDirectory" &&$green&& echo "Removed!"
}
No(){ $iwhite; echo "Skipping..." ;}
YES_no
$ired; echo "Exiting XMRig-Auto-Build: $1 failed to build..."
exit
fi
}
################################################################ START OF SCRIPT ################################################################
#
# Initial Prompt
#
$bgreen; echo "########################"
$bgreen; echo "# XMRig-Auto-Build #"
$bgreen; echo "########################"
$bwhite; echo -n "Install into "
$bblue; echo -n "${installDirectory}? "
$bwhite; echo -n "(Y/n) " ;$off
Yes(){ $iwhite; echo "Starting..." ;}
No(){ $ired; echo "Exiting..." ;exit; }
YES_no
#
# Checks if XMRig-Auto-Build is in /xmrig/
#
if [[ $installDirectory = *"/xmrig"* ]]; then
:
else
$bred; echo "/xmrig/ folder not found!"
$ired; echo "Please place XMRig-Auto-Build in the /xmrig/ folder!"
exit
fi
#
# Finding Package Manager (apt, pacman, dnf)
#
Search_For_PackageManager()
{
local packageManager="$1"
if [[ -f $packageManager ]]; then
$bgreen; echo -n "$distroPrettyName"
$iwhite; echo -n " detected: using "
$bgreen; echo "$2"
found="yes"
foundPackageManager="$2"
$off
fi
}
Search_For_PackageManager "/usr/bin/apt" "apt" || exit
Search_For_PackageManager "/usr/bin/pacman" "pacman" || exit
Search_For_PackageManager "/usr/bin/dnf" "dnf" || exit
if [[ $found != "yes" ]]; then
$bred; echo "Package Manager not found/supported!"
$ired; echo "Exiting..."
exit
fi
#
# Installing Dependencies
#
$bblue; echo -n "Install build dependencies? (Y/n) " ;$off
Yes()
{
case $foundPackageManager in
apt)
Apt_Build_Dependencies
;;
pacman)
Pacman_Build_Dependencies
;;
dnf)
DNF_Build_Dependencies
esac
if [[ $? != 0 ]]; then
$bred; echo "Installing build dependencies failed, exiting..."
exit
fi
}
No(){ $iwhite; echo "Skipping build dependencies..." ;}
YES_no
#
# Pick Library Build Version
#
Lib_Yesno()
{
$bblue; echo -n "Build "
$bgreen; echo -n "[$libVersion]? "
$bblue; echo -n "(Y/n) "
read yn
if [[ $yn = "" || $yn = "y" || $yn = "Y" ||$yn = "yes" ||$yn = "Yes" ]]; then
finalChoice="yes"
fi
}
while true; do
$bblue; echo -n "Which library versions to build? "
$bgreen; echo -n "[ Stable / latest ] " ;$off
read answer
case $answer in
"")
libVersion="stable"
Lib_Yesno
[[ $finalChoice = "yes" ]]&&break
;;
Stable|stable)
libVersion="stable"
Lib_Yesno
[[ $finalChoice = "yes" ]]&&break
;;
Latest|latest)
libVersion="latest"
Lib_Yesno
[[ $finalChoice = "yes" ]]&&break
;;
*)
$ired; echo "Error, please type valid version"
;;
esac
done
$iwhite; echo "[$libVersion] selected..."
#
# Build Commands
#
$bred; echo "#####################################"
$bred; echo "# Start XMRig-Auto-Build? (Y/n) #"
$bred; echo "#####################################"
$off
Yes(){ $iwhite; echo "Starting..." ;$off; }
No(){ $ired; echo "Exiting..." ;$off;exit; }
YES_no
Build_Folders
Build_Libuv
Build_Fail "Libuv"
Build_Hwloc
Build_Fail "Hwloc"
if [[ $foundPackageManager = "dnf" ]]; then
Build_LibreSSL
Build_Fail "LibreSSL"
else
Build_OpenSSL
Build_Fail "OpenSSL"
fi
Build_XMRig
Build_Fail "XMRig"
echo
$bgreen; echo "XMRig-Auto-Build done!"
$bblue; echo -n "Delete source code? (leaves xmrig and config.json) (Y/n) " ;$off
# moves xmrig/config.json into /xmrig/tmp_autobuild/, deletes everything in /xmrig/, then moves them back and deletes /xmrig/tmp_autobuild/
# rm needs sudo because .git files are write-protected
Yes()
{
$iwhite; echo "Cleaning up..." ;$off
tmp="$installDirectory/tmp_autobuild"
mkdir "$tmp"
mv "$AutoBuild/xmrig" "$tmp"
mv "$installDirectory/src/config.json" "$tmp"
cd $installDirectory
ls | grep -v "tmp_autobuild" | xargs sudo rm -r > /dev/null
sudo rm -r .git .github .gitignore > /dev/null
mv "$tmp/xmrig" $installDirectory
mv "$tmp/config.json" $installDirectory
rm -r "$tmp" > /dev/null
}
No(){ $iblue; echo "Skipping cleanup..." ;}
YES_no
#
# End
#
echo
$bgreen; echo "##################################"
$bgreen; echo "# XMRig-Auto-Build complete! #"
$bgreen; echo "##################################"
# shows different locations dependent on if source files are deleted or not
if [[ $yn = "" || $yn = "y" || $yn = "Y" ||$yn = "yes" ||$yn = "Yes" ]]; then
$bblue; echo -n "XMRig Location: "
$iwhite; echo $installDirectory
else
$bblue; echo "Location: "
$bwhite; echo -n "xmrig: " ;$iwhite; echo "$AutoBuild/xmrig"
$bwhite; echo -n "config.json: " ;$iwhite; echo "$AutoBuild/config.json"
fi
$off