#!/bin/bash
set -e
Version=18.4.1
Cuda=No
kernel_custom=YES
Miners=Yes
kernel_dkms="5.15.0-71-generic"
driver=NVIDIA

if (( $EUID != 0 )); then
   echo -e "$(tput setaf 11)This must be run as root. Try 'sudo $0'.$(tput sgr0)"
   exit 1
fi
clear
if [ ! -f /home/wareck/.ipass ]
then
echo "passe=1" > /home/wareck/.ipass
fi
source /home/wareck/.ipass


export TERM=xterm-256color
Cuda=${Cuda^^}
kernel_custom=${kernel_custom^^}
driver=${driver^^}
Miners=${Miners^^}
cpass=""
function ubuntu_version_check {
if [[ $(lsb_release -rs) == "20.04" ]]
then

      Ubuntu_version="20.04.6"

else
       echo "Non-compatible version !"
       exit 0
fi
}

function print_centered {
     [[ $# == 0 ]] && return 1

     declare -i TERM_COLS="$(tput cols)"
     declare -i str_len="${#1}"
     [[ $str_len -ge $TERM_COLS ]] && {
          echo "$1";
          return 0;
     }

     declare -i filler_len="$(( (TERM_COLS - str_len) / 2 ))"
     [[ $# -ge 2 ]] && ch="${2:0:1}" || ch=" "
     filler=""
     for (( i = 0; i < filler_len; i++ )); do
          filler="${filler}${ch}"
     done

     printf "%s%s%s" "$filler" "$1" "$filler"
     [[ $(( (TERM_COLS - str_len) % 2 )) -ne 0 ]] && printf "%s" "${ch}"
     printf "\n"

     return 0
}

function decompte_ {
echo -e "$(tput setaf 10)\nReboot in 10 seconds (CRTL+C to abord):$(tput sgr0)"
for i in {9..0}
do
echo -e -n "$i "
sleep 1
done
echo ""
sudo reboot
}

function intro_ {
print_centered "$(tput setaf 5)"
print_centered "░  ░░░░  ░░        ░░   ░░░  ░░        ░░  ░░░░  ░░       ░░"
print_centered "▒   ▒▒   ▒▒▒▒▒  ▒▒▒▒▒    ▒▒  ▒▒  ▒▒▒▒▒▒▒▒  ▒▒▒▒  ▒▒  ▒▒▒▒  ▒"
print_centered "▓        ▓▓▓▓▓  ▓▓▓▓▓  ▓  ▓  ▓▓      ▓▓▓▓  ▓▓▓▓  ▓▓       ▓▓"
print_centered "█  █  █  █████  █████  ██    ██  ████████  ████  ██  ███  ██"
print_centered "█  ████  ██        ██  ███   ██        ███      ███  ████  █"
echo -n "$(tput sgr0)"
print_centered "Simple miner installation script v$Version"
print_centered "Ubuntu version 20.04.6"
if [ $Cuda = "YES" ]
then
print_centered "CUDA Compute Drivers"
fi
print_centered "Stage $passe/4"
}

function update_ {
case $passe in
1)
   echo -e "$(tput setaf 10)\nUpdate and install packages (second pass):$(tput sgr0)"
   sudo apt-get update
   echo -e ""
   sudo apt-get install git build-essential libtool pkg-config automake autoconf ethtool net-tools \
   tasksel lzma-dev lzma cmake libuv1-dev libssl-dev msr-tools openssh-server -y
   echo -e ""
   sudo apt-get install zstd pixz pbzip2 pigz btrfs-progs \
   libcurl4-openssl-dev screen libudev-dev libjansson-dev libncurses5-dev libmicrohttpd-dev curl nvme-cli -y
   echo -e ""
   sudo apt-get install libglib2.0-dev libgtk2.0-dev htop vlc locate cmake -y
   echo -e "Done."
   ;;
2)
   if [ $Cuda = "YES" ]
   then
   echo -e "$(tput setaf 10)\nInstall Cuda packages:$(tput sgr0)"
   sudo apt-get install libgmp-dev libnuma-dev cmake libuv1-dev nvidia-cuda-dev libmicrohttpd-dev gcc-8 g++-8 nvidia-cuda-toolkit -y
   fi
   echo -e "Done.\n"
   ;;
esac
}

function kernel_check_ {
unamestr=$(uname -r)
if [ -f /tmp/ksource.txt ]; then rm /tmp/ksource.txt;fi
wget -c -q http://192.168.1.8:3000/wareck/custom_kernel/raw/master/ksource.txt -O /tmp/ksource.txt
source /tmp/ksource.txt
if ! [[ "$unamestr" == $KLversion ]]
then
echo -e "\n$(tput setaf 10)Custom kernel install $(tput setaf 9)$KLversion$(tput setaf 10) (fix DKMS/WOL) :$(tput sgr0)"
cd /tmp/
wget -c -q --show-progress http://folivier.homelinux.org/cube/pack/custom_kernel/$kernel_version
chmod +x $kernel_version
sudo ./$kernel_version
if ! [ -f /etc/modprobe.d/blacklist-nvidia-nouveau.conf ]
then
echo "Blacklist nvidia-nouveau driver..."
echo "System will reboot"
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
fi
fi
}

function nvidia_driver_ {
if [ $passe = "1" ]
then
	if ! [ -f /etc/modprobe.d/blacklist-nvidia-nouveau.conf ]
	then
        echo "Blacklist nvidia-nouveau driver..."
        echo "System will reboot"
        sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
        sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
	fi
	if [ $Cuda = "NO" ]
	then
	sudo apt-get install build-essential libglvnd-dev cmake -y
	else
	sudo apt-get install build-essential libglvnd-dev cmake libhugetlbfs-dev libc-dev libc6-dev g++ -y
	fi
	echo "passe=2" > /home/wareck/.ipass
	decompte_
fi
if [ $passe = "2" ]
then
case $Cuda in
NO)
	echo -e "$(tput setaf 10)\nInstall NVIDIA T4:$(tput sgr0)"
	sleep 3
	wget -c http://folivier.homelinux.org/cube/pack/NVIDIA-Linux-x86_64-550.90.07_dc.run
        chmod +x NVIDIA-Linux-x86_64-550.90.07_dc.run
	sudo ./NVIDIA-Linux-x86_64-550.90.07_dc.run --silent --driver
	sudo rm NVIDIA-Linux-x86_64-550.90.07_dc.run
	echo "passe=3" > /home/wareck/.ipass
	decompte_
	;;
YES)
	echo -e "$(tput setaf 10)\nInstall CUDA Drivers :$(tput sgr0)"
	cd /home/wareck/
	echo -e "Download MegaDownload:"
	git clone https://github.com/wareck/megadown.git
	sudo cp /home/wareck/megadown/megadown /usr/local/bin/megadown
	sudo rm -r /home/wareck/megadown
	wget -c https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run
	chmod +x cuda_12.4.1_550.54.15_linux.run
	sudo ./cuda_12.4.1_550.54.15_linux.run --silent --driver --toolkit
	sudo rm cuda_12.4.1_550.54.15_linux.run
	echo "passe=3" > /home/wareck/.ipass
	decompte_
;;
esac
fi
}

function download_packs_ {
echo -e "$(tput setaf 10)\nDownload complement packs:$(tput sgr0)"
wget -c -q --show-progress http://folivier.homelinux.org/cube/pack/chia-miner.tar.xz -O /home/wareck/Build_Cube/pack/chia-miner.tar.xz
wget -c -q --show-progress http://folivier.homelinux.org/cube/pack/xmrig.tar.xz -O /home/wareck/Build_Cube/pack/xmrig.tar.xz
wget -c -q --show-progress http://folivier.homelinux.org/cube/pack/gpu-miners.tar.xz -O /home/wareck/Build_Cube/pack/gpu-miners.tar.xz

cp /home/wareck/Build_Cube/pack/gpu-miners.tar.xz /home/wareck
cp /home/wareck/Build_Cube/pack/pack1.tar.xz /home/wareck
cp /home/wareck/Build_Cube/pack/pack2.tar.xz /home/wareck
cp /home/wareck/Build_Cube/pack/pack3.tar.xz /home/wareck
cp /home/wareck/Build_Cube/pack/xmrig.tar.xz /home/wareck
echo -e "Done."

echo -e "$(tput setaf 10)\nDownloading miners:$(tput sgr0)"
cd /home/wareck
if ! [ -d miners ]; then mkdir -p miners;fi
cd /home/wareck/miners

if ! [ -d xmrig ]
then
git clone https://github.com/xmrig/xmrig.git
echo -e ""
fi
}

function build_miners_ {
cmake_ #check cmake version
cd /home/wareck
tar xfJ gpu-miners.tar.xz
cd /home/wareck/miners

echo -e "$(tput setaf 10)\nUncompress xmr files:$(tput sgr0)"
tar xfJ /home/wareck/xmrig.tar.xz --checkpoint=.100
echo "Done."
echo -n -e "\n"
echo -e "$(tput setaf 10)\nBuild xmrig:$(tput sgr0)"

cd xmrig
git config --global --add safe.directory /home/wareck/miners/xmrig
git pull
sed -i "s/kDefaultDonateLevel = 5;/kDefaultDonateLevel = 0;/g" src/donate.h
sed -i "s/kMinimumDonateLevel = 1;/kMinimumDonateLevel = 0;/g" src/donate.h
cd scripts
./build_deps.sh
cd ..
cd build
cmake .. -DXMRIG_DEPS=scripts/deps
make -j$((`nproc`))
cd ..
echo "Done."

if [ -d /home/wareck/miners/xmrig-upx ];then rm -r /home/wareck/miners/xmrig-upx;fi
if [ -d /home/wareck/miners/xmr-stak ];then rm -r /home/wareck/miners/xmr-stak;fi
if [ -d /home/wareck/miners/xmr-stak-rx ];then rm -r /home/wareck/miners/xmr-stak-rx;fi
sudo chmod -R 775 /home/wareck/miners
}

function configure_ {
echo -e "$(tput setaf 10)\nConfig files:$(tput sgr0)"
cd /home/wareck/
zip="['firefox.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Terminal.desktop']"
cat <<'EOF'>> zap
#!/bin/bash
gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 32
gsettings set org.gnome.desktop.background picture-uri /home/wareck/Images/mr-robot-wallpapers.jpg
gsettings set org.gnome.shell favorite-apps "XXX"
#su wareck -c 'gsettings set org.gnome.shell.extensions.dash-to-dock show-mounts false'
dconf load /org/gnome/terminal/ < /usr/local/bin/zap2
EOF
sed -i "s/XXX/$zip/g" zap

UUID=$(gsettings get org.gnome.Terminal.ProfilesList default | tr -d \')
cat <<'EOF'>> zap2
[legacy/profiles:/:XXX]
default-size-columns=110
font='Monospace 9'
use-system-font=false
use-theme-colors=false
EOF
sed -i "s/XXX/$UUID/g" zap2
chmod +x zap
sudo cp zap /usr/local/bin
sudo cp zap2 /usr/local/bin
sudo rm zap
sudo rm zap2
sleep 1

sudo rm -r -f /etc/update-motd.d/*
tar xfJ pack1.tar.xz --checkpoint=.10
echo -n -e "\n"
sudo cp /home/wareck/pack2.tar.xz /
sudo cp /home/wareck/pack3.tar.xz /
cd /
sudo tar xfJ pack2.tar.xz --checkpoint=.10
sudo tar xfJ pack3.tar.xz --checkpoint=.10
echo -n -e "\n"
cd /home/wareck

sudo sed -i -e "s/# set constantshow/set constantshow/g" /etc/nanorc

if ! grep "wareck" /etc/sudoers >/dev/null
then
sudo sh -c "echo \"wareck ALL=(ALL) NOPASSWD: ALL\" >> /etc/sudoers"
fi

echo -e "$(tput setaf 10)\nBashrc mod:$(tput sgr0)"
if [ $Cuda = "YES" ]
then
if ! grep "#mod for cuda" /home/wareck/.bashrc >/dev/null
then
echo '#mod for cuda' >>/home/wareck/.bashrc
echo 'export PATH=/usr/local/cuda-12.3/bin/:$PATH'>>/home/wareck/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.3/lib64:$LD_LIBRARY_PATH'>>/home/wareck/.bashrc
echo '' >>/home/wareck/.bashrc
fi
fi
if ! grep "#mod for tightvncserver" /home/wareck/.bashrc >/dev/null
then
echo '#mod for tightvncserver' >>/home/wareck/.bashrc
echo 'cd ~' >>/home/wareck/.bashrc
fi
echo "Done."

echo -e "$(tput setaf 10)\nDisable IPv6:$(tput sgr0)"
if ! grep "ipv6.disable=1" /etc/default/grub >/dev/null
then
sed -i -e "s/quiet splash/quiet splash ipv6.disable=1/g" /etc/default/grub
sed -i -e "s/GRUB_CMDLINE_LINUX=\"/GRUB_CMDLINE_LINUX=\"ipv6.disable=1 acpi_enforce_resources=lax/g" /etc/default/grub
sudo update-grub2
fi
sudo chown -R wareck:wareck /home/wareck/miners/xmr*
sudo apt-get remove light-locker* -y
echo "Done."
echo "passe=4" >/home/wareck/.ipass
decompte_
}

function cleaning_ {
echo -e "$(tput setaf 10)\nCleaning install files:$(tput sgr0)"
if [ -f /pack2.tar.xz ]; then sudo rm /pack2.tar.xz ;fi
if [ -f /pack3.tar.xz ]; then sudo rm /pack3.tar.xz ;fi
if [ -f /home/wareck/pack1.tar.xz ]; then rm /home/wareck/pack1.tar.xz ;fi
if [ -f /home/wareck/pack2.tar.xz ]; then rm /home/wareck/pack2.tar.xz ;fi
if [ -f /home/wareck/pack3.tar.xz ]; then rm /home/wareck/pack3.tar.xz ;fi
if [ -f /home/wareck/xmrig.tar.xz ]; then rm /home/wareck/xmrig.tar.xz ;fi
if [ -f /home/wareck/gpu-miners.tar.xz ]; then rm /home/wareck/gpu-miners.tar.xz;fi
if [ -r /home/wareck/Music ]; then sudo rm -r -f /home/wareck/Music ;fi
if [ -r /home/wareck/Public ]; then sudo rm -r -f /home/wareck/Public ;fi
if [ -r /home/wareck/Templates ]; then sudo rm -r -f /home/wareck/Templates ;fi
if [ -r /home/wareck/Vidéos ]; then sudo rm -r -f /home/wareck/Vidéos ;fi
if [ -f /home/wareck/NVIDIA-Linux-x86_64-470.74.run ]; then rm /home/wareck/NVIDIA-Linux-x86_64-470.74.run ;fi
if [ -f /home/wareck/NVIDIA-Linux-x86_64-470.82.00.run ]; then rm /home/wareck/NVIDIA-Linux-x86_64-470.82.00.run ;fi
if [ -f /home/wareck/.ipass ]; then rm /home/wareck/.ipass ;fi
if [ -f /usr/local/bin/zap ]; then sudo rm /usr/local/bin/zap* ;fi
if [ -f /home/wareck/.config/autostart/install_os.desktop ];then sudo rm /home/wareck/.config/autostart/install_os.desktop;fi
if [ -f /home/wareck/.config/autostart/zappy.desktop ];then sudo rm /home/wareck/.config/autostart/zappy.desktop;fi
if [ -r /lib/modules/5.15.0-60-generic ]; then sudo rm -r /lib/modules/5.15.0-60-generic ;fi
if [ -r /lib/modules/5.15.0-46-generic ]; then sudo rm -r /lib/modules/5.15.0-46-generic ;fi
if [ -r /lib/modules/5.15.0-70-generic ]; then sudo rm -r /lib/modules/5.15.0-70-generic ;fi
cd /home/wareck/Build_Cube/pack
sudo chown -R wareck:wareck /home/wareck/miners
sudo chmod -R 775 /home/wareck/miners
./clean.sh
echo -e "Done. \n"

echo `date` "install/update" >/home/wareck/.buildcube
sudo apt-get autoremove -y
sleep 1
}

function autoroot_ {
if ! grep "#color putty" ~/.bashrc >/dev/null
then
echo "#color putty" >> ~/.bashrc
echo "export TERM=xterm-256color" >> ~/.bashrc
fi
if [ ! -d /home/wareck/.config/autostart ]
then
echo -e "$(tput setaf 10)\nInit install & autostart:$(tput sgr0)"
mkdir /home/wareck/.config/autostart
echo -e "Done."
sleep 1
fi

if [ ! -f /home/wareck/.config/autostart/install_os.desktop ]
then
cat <<'EOF'>> /home/wareck/.config/autostart/install_os.desktop
[Desktop Entry]
# VERSION=3.36.2
Name=Terminal
Comment=Use the command line
Keywords=shell;prompt;command;commandline;cmd;
TryExec=gnome-terminal
Exec=gnome-terminal -- bash -c "sudo /home/wareck/Build_Cube/miner.sh; exec bash"
Icon=org.gnome.Terminal
Type=Application
Categories=GNOME;GTK;System;TerminalEmulator;
StartupNotify=true
X-GNOME-SingleWindow=false
OnlyShowIn=GNOME;Unity;
Actions=new-window;preferences;
X-Ubuntu-Gettext-Domain=gnome-terminal

[Desktop Action new-window]
Name=New Window
Exec=gnome-terminal --window

[Desktop Action preferences]
Name=Preferences
Exec=gnome-terminal --preferences
EOF
chmod +x /home/wareck/.config/autostart/install_os.desktop
fi

if [ ! -f /home/wareck/.config/autostart/zappy.desktop ]
then
cat <<'EOF'>> /home/wareck/.config/autostart/zappy.desktop
[Desktop Entry]
# VERSION=3.36.2
Name=Terminal
Comment=Use the command line
Keywords=shell;prompt;command;commandline;cmd;
TryExec=gnome-terminal
Exec=gnome-terminal -- bash -c "/usr/local/bin/zap"
Icon=org.gnome.Terminal
Type=Application
Categories=GNOME;GTK;System;TerminalEmulator;
StartupNotify=true
X-GNOME-SingleWindow=false
OnlyShowIn=GNOME;Unity;
Actions=new-window;preferences;
X-Ubuntu-Gettext-Domain=gnome-terminal

[Desktop Action new-window]
Name=New Window
Exec=gnome-terminal --window

[Desktop Action preferences]
Name=Preferences
Exec=gnome-terminal --preferences
EOF
chmod +x /home/wareck/.config/autostart/zappy.desktop
fi
if ! grep "wareck" /etc/sudoers >/dev/null
then
sudo sh -c "echo \"wareck ALL=(ALL) NOPASSWD: ALL\" >> /etc/sudoers"
fi
if [ $passe="2" ]
then
echo -e "$(tput setaf 10)\nUpdate and install packages:$(tput sgr0)"
sudo apt-get update
sleep 1
fi
}

function cmake_ {
pids=""
/home/wareck/Build_Cube/options/tools/_cmake.sh rollback & pids="$pids $!"
wait $pids
sudo ldconfig
}

intro_
case $passe in
1)
  autoroot_
  ubuntu_version_check
  update_
  kernel_check_
  nvidia_driver_
  ;;
2)
  nvidia_driver_
  update_
  ;;
3)
  download_packs_
  build_miners_
  configure_
  ;;
4)
  cleaning_
  dynmotd
  ;;
*) ;;
esac

echo -e "$(tput setaf 10)\nEnd of script:$(tput sgr0) \n"
echo -e "$(tput setaf 7)Need to install webmin manually (reboot required)$(tput sgr0)"
echo -e "$(tput setaf 7)after install webmin, reboot is required $(tput sgr0)"
echo -e ""
