336 lines
8.7 KiB
Bash
Executable file
336 lines
8.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#
|
|
# 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"
|
|
|
|
#
|
|
# Library Code Build Functions
|
|
#
|
|
Build_Folders()
|
|
{
|
|
$bgreen; echo "Creating Build Folders..." ;$off
|
|
mkdir -p $AutoBuild
|
|
mkdir -p $deps
|
|
mkdir -p $deps/include
|
|
mkdir -p $deps/lib
|
|
mkdir -p $libBuild
|
|
}
|
|
Build_Libuv()
|
|
{
|
|
$bgreen; echo "Building Libuv..." ;$off
|
|
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()
|
|
{
|
|
$bgreen; echo "Building Hwloc..." ;$off
|
|
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()
|
|
{
|
|
$bgreen; echo "Building OpenSSL..." ;$off
|
|
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()
|
|
{
|
|
$bgreen; echo "Building LibreSSL..." ;$off
|
|
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()
|
|
{
|
|
$bgreen; echo "Building XMRig..." ;$off
|
|
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 "Remove all XMRig-Auto-Build files? (Y/n) "
|
|
read yn
|
|
if [[ $yn = "" || $yn = "y" || $yn = "Y" ||$yn = "yes" ||$yn = "Yes" ]]; then
|
|
$bred; echo "Removing..."
|
|
sudo rm -r "$AutoBuild" &&$green&& echo "Removed!"
|
|
fi
|
|
$bred; echo "Remove XMRig folder aswell? (Y/n) "
|
|
read yn
|
|
if [[ $yn = "" || $yn = "y" || $yn = "Y" ||$yn = "yes" ||$yn = "Yes" ]]; then
|
|
$bred; echo "Removing..."
|
|
sudo rm -r "$installDirectory" &&$green&& echo "Removed!"
|
|
fi
|
|
$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
|
|
read yn
|
|
if [[ $yn = "" || $yn = "y" || $yn = "Y" ||$yn = "yes" ||$yn = "Yes" ]]; then
|
|
$iblue; echo "Starting..."
|
|
else
|
|
$ired; echo "Exiting..."
|
|
exit
|
|
fi
|
|
|
|
#
|
|
# 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
|
|
read yn
|
|
if [[ $yn = "" || $yn = "y" || $yn = "Y" ||$yn = "yes" ||$yn = "Yes" ]]; then
|
|
case $foundPackageManager in
|
|
apt)
|
|
sudo apt install git build-essential cmake automake libtool autoconf
|
|
;;
|
|
pacman)
|
|
sudo pacman -S git base-devel cmake
|
|
;;
|
|
dnf)
|
|
sudo dnf install -y git make cmake gcc gcc-c++ libstdc++-static automake libtool autoconf
|
|
esac
|
|
if [[ $? != 0 ]]; then
|
|
$bred; echo "Installing build dependencies failed, exiting..."
|
|
exit
|
|
fi
|
|
else
|
|
$iblue; echo "Skipping build dependencies..."
|
|
fi
|
|
|
|
#
|
|
# 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? "
|
|
$igreen; 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
|
|
$iblue; echo "[$libVersion] selected..."
|
|
|
|
#
|
|
# Build Commands
|
|
#
|
|
$bred; echo -n "Start XMRig-Auto-Build? (Y/n) " ;$off
|
|
read yn
|
|
if [[ $yn = "" || $yn = "y" || $yn = "Y" ||$yn = "yes" ||$yn = "Yes" ]]; then
|
|
$iblue; echo "Starting..." ;$off
|
|
else
|
|
$ired; echo "Exiting..." ;$off
|
|
exit
|
|
fi
|
|
|
|
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!"
|
|
$bwhite; 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
|
|
|
|
read yn
|
|
if [[ $yn = "" || $yn = "y" || $yn = "Y" ||$yn = "yes" ||$yn = "Yes" ]]; then
|
|
$iblue; 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
|
|
else
|
|
$iblue; echo "Skipping cleanup..."
|
|
fi
|
|
|
|
#
|
|
# 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
|
|
$bwhite; echo -n "XMRig Location: "
|
|
$bblue; echo $installDirectory
|
|
else
|
|
$bwhite; echo "Location: "
|
|
$iwhite; echo -n "xmrig: " ;$bblue; echo "$AutoBuild/xmrig"
|
|
$iwhite; echo -n "config.json: " ;$bblue; echo "$AutoBuild/config.json"
|
|
fi
|