git.iko.soy/xmrig-bash-scripts
on 0c2d4ce help sign in
16 files changed+276−458
since splitsnapshots
unifiedsplit
.gitignore−3 README.md+25−40 build.sh+12−17 config.sh+56−2 crontab-off.sh−18 crontab-on.sh−20 crontab.sh+14−7 depends.sh+10−4 functions.sh+10−98 input.sh−61 install.sh+16−38 maintenance.sh+9−3 settings.sh+68−87 start.sh+30−52 stop.sh+10−2 update.sh+16−6
.gitignore−3
@@ -1,7 +1,4 @@
11xmrig-cpu/
22*.swp
33crontab
4−null
54config.json
6−myconfig.json
7−mysettings.sh
README.md+25−40
@@ -11,7 +11,6 @@ A set of convenience scripts, written in bash, to help manage installation, conf
1111There is allot to install so the install script will do most of the heavy lifting.
1212At the start the expectation is that you have:
1313* Computer running Ubuntu 18.04 (LTS)
14−* Bash shell
1514* User account with sudo privileges
1615* Installed git
1716* Optionally installed [xmrig-proxy](https://github.com/xmrig/xmrig-proxy)
@@ -20,80 +19,66 @@ At the start the expectation is that you have:
2019
2120Some knowledge of:
2221* Linux Command Line Interface
23−* Linux shell `bash`
22+* Unix shell `bash`
2423
25−### Installation
24+There is more to install but the install script will install the rest.
25+
26+### Installion
2627
27281. Change to your user home directory.
2829 `cd ~`
29−1. Install git.
30+
31+2. Install git.
3032 `sudo apt install git`
31−1. Clone this project.
33+
34+3. Clone this project.
3235 `git clone https://github.com/seanwhe/xmrig-bash-scripts`
33−1. Change into the cloned directory.
36+
37+4. Change into the cloned directory.
3438 `cd xmrig-bash-scripts`
35−1. Run the install script
39+
40+5. Edit the settings file to your preference.
41+ `vim settings.sh`
42+
43+6. Run the install script
3644 `./install.sh`
37−1. When prompted: "Enter your own settings?" enter 'y'es.
38−1. Enter values for your:
39− 1. Pool server URL
40− 1. Pool server TCP port
41− 1. Receive wallet address
42− 1. Email address
43− 1. Miner identifier name
44−1. After install is complete. Attach to the screen session created during the installation.
45+
46+7. Attach to the screen session created during the installation.
4547 `screen -r`
4648
4749### Operation
4850
49−Defaults - The settings.sh contains a number of variables. With the exception of the 'xmrig' binary, which is installed to `/usr/bin/xmrig`, all files remain in the cloned project directory `~/xmrig-bash-scripts`. Any files generated while running the scripts are also created in this directory.
50−
51−During install the folder source for [xmrig cpu](https://github.com/xmrig/xmrig) is cloned to `~/xmrig-bash-scripts/xmrig-cpu/`. The file `config.json`, used to configure xmrig, is also created in this path and is passed to xmrig at startup.
51+With the exception of the 'xmrig' binary, which is installed to `/usr/bin/xmrig`, all files remain in the cloned project directory `~/xmrig-bash-scripts`. Any files generated while running the scripts are created in this directory.
5252
53−During installation it is recomended to enter your own settings. This creates a file named 'mysettings.sh' which will not be overwritten during future installs or upgrades. Values for variables found in 'mysettings.sh' are used to create 'config.json'.
53+During install the folder source for [xmrig cpu](https://github.com/xmrig/xmrig) is cloned to `xmrig-cpu/`in the path. The `config.json` is also created in this path.
5454
55−This should work out the box, if you follow the installation steps and enter your own values for 'mysettings.sh.
55+This should work out the box, if you edit only the top section of `settings.sh`.
5656
5757Once you have a running xmrig then you can start playing around and tweaking to suite requirements.
5858
59−What follows is a brief of the shell scripts you will find. The names are mostly self explanatory.
60−Comments and notes are used liberally in the scripts to help give you hints as to how it works.
61−The scripts are designed to be modular to promote resuse, execute exclusion and standalone execution.
59+What follows is a brief of the shell scripts you will find. The names are mostly self explanatory. Comments and notes are used liberally in the scripts to help give you hints as to how it works. The scripts are designed to be modular to promote resuse, execute exclusion and standalone execution.
6260
6361* build.sh - clones xmrig to ``~/xmrig-bash-scripts`/xmrig-cpu`, configures, builds and copies xmrig to `/usr/bin/`
6462* config.sh - contains variables that aid in defining the values for the attributes found in config.json.
6563* crontab.sh - installs a cron to start and a cron to stop at specific times (Can be commented out of install if desired).
66−* crontab-off - removed the users crontab created during install.
67−* crontab-on.sh - redefines the users crontab as created during install.
6864* depends.sh - installs dependancies required by xmrig and these scripts.
6965* functions.sh - a collection of functions used in various of the scripts.
70−* input.sh - prompts to enter values for creating 'mysettings.sh'
7166* install.sh - the main entry point when first installing.
72−* maintenance.sh - performs apt update, upgrade, autoremove and autoclean operations.
67+* maintenance.sh - performs apt update and upgrade.
7368* settings.sh - contains variables used by these scripts.
7469* start.sh - starts xmrig in a screen session.
7570* stop.sh - stops xmrig screen session.
71+* update.sh - updates and existing installation.
7672
7773### Viewing the log
78−Default of the start script is to create a screen session named 'xmrig-cpu'.
79−This can be changed in the settings script if required.
80−To view the log after installation is finished or after running the start script, used the following command:
74+Default of the start script is to create a screen session named 'xmrig-cpu'. This can be changed in the settings script if required. To view the log after installation is finished or after running the start script, used the following command:
8175`screen -r xmrig-cpu`
8276
83−### Updating
84−A simple `git update` in `~/xmrig-bash-scripts` will update these scripts.
85−
86−The install script can be run at any time to update the xmrig source found `~/xmrig-bash-scripts/xmrig-cpu`.
87−The branch checkout is taken from the `_XMRIG_BRANCH` variable in `settings.sh`.
88−
89−A script named update.sh is provided to perform both these steps in a single command.
90−
9177## Reporting issues
9278
9379[xmrig cpu](https://github.com/xmrig/xmrig) and [xmrig bash scripts](https://github.com/seanwhe/xmrig-bash-scripts.git) are different projects run by different people.
9480
95−While the developers of both projects may be seen interacting with one another on either project, we ask that you report issues to the respective projects.
96−In other words, post issues for:
81+While the developers of both projects may be seen interacting with one another on either project, we ask that you report issues to the respective projects. In other words, post issues for:
9782* xmrig, the Monero (XMR) CPU miner, over at [xmrig issues tracker](https://github.com/xmrig/xmrig/issues)
9883* xmrig-bash-scripts, these conveniece scripts, over at [xmrig-bash-scripts](https://github.com/seanwhe/xmrig-bash-scripts/issues)
9984
build.sh+12−17
@@ -1,32 +1,25 @@
11#!/bin/bash
22
3−echo "${_GREEN}BUILD STARTED${_RESET}"
3+echo "#################################"
4+echo " BUILD STARTING"
5+echo "#################################"
46
57# Clone source
68if [ -d "$_XMRIG_CLONE_LOCATION" ]; then
9+ echo "Clone already exists"
710
811 # Change to clone directory
912 cd $_XMRIG_CLONE
1013
11− if git branch | grep -q -m1 "* $_XMRIG_BRANCH"; then
12− # Pull changes from source
13− git pull
14+ # Pull changes from source
15+ git pull
1416
15− # Call function
16− build_xmrig
17−
18− else
19− # Switch to required branch
20− git checkout $_XMRIG_BRANCH
21−
22− # Pull changes from source
23− git pull
17+ # Call function
18+ build_xmrig
2419
25− # Call function
26− build_xmrig
27− fi
2820else
2921 # Clone the source
22+ echo "Cloning source to $_WORK_DIR/$_XMRIG_CLONE"
3023 git clone $_XMRIG_REPO $_XMRIG_CLONE
3124
3225 # Change to clone directory
@@ -47,5 +40,7 @@ sudo cp $_XMRIG_BUILD_LOCATION/xmrig $_XMRIG_TARGET_LOCATION
4740
4841cd $_WORK_DIR
4942
50−echo "${_CYAN}BUILD STOPPED${_RESET}"
43+echo "#################################"
44+echo " BUILD COMPLETE"
45+echo "#################################"
5146
config.sh+56−2
@@ -1,8 +1,62 @@
11#!/bin/bash
22
3−echo "${_GREEN}CONFIG STARTED${_RESET}"
3+_API_ID="null"
4+_API_WORKER_ID="$HOSTNAME"
5+
6+_AUTOSAVE="true"
7+
8+_BACKGROUND="false"
9+
10+_COLORS="true"
11+
12+_CPU_ENABLED="true"
13+_CPU_HUGE_PAGES="true"
14+_CPU_HW_AES="$_AES_NI"
15+_CPU_PRIORITY="null"
16+_CPU_ASM="true"
17+_CPU_CN="0 1 2 3"
18+
19+_CPU_CN_0="false"
20+_CPU_CN_LITE_0="false"
21+
22+_DONATE_LEVEL="5"
23+
24+_DONATE_OVER_PROXY="1"
25+
26+_HTTP_ENABLED="true"
27+_HTTP_HOST=$(hostname --all-ip-addresses | awk '{print $1}')
28+_HTTP_PORT="8080"
29+_HTTP_ACCESS_TOKEN="null"
30+_HTTP_RESTRICTED="false"
31+
32+_LOG_FILE="null"
33+
34+_POOLS_ALGO="cn/r"
35+_POOLS_URL="$_POOL_SERVER_URL:$_POOL_SERVER_PORT"
36+_POOLS_USER="$_RECEIVE_WALLET"
37+_POOLS_PASS="$HOSTNAME:$_EMAIL"
38+_POOLS_RIG_ID="$HOSTNAME"
39+_POOLS_NICEHASH="true"
40+_POOLS_KEEPALIVE="true"
41+_POOLS_ENABLED="true"
42+_POOLS_TLS="null"
43+_POOLS_TLS_FINDERPRINT="null"
44+_POOLS_DAEMON="false"
45+
46+_PRINT_TIME="30"
47+
48+_RETRIES="5"
49+_RETRIES_PAUSE="5"
50+
51+_SYSLOG="false"
52+
53+_USER_AGENT="null"
54+
55+_WATCH="true"
56+
57+_CONFIG_JSON=$(jo -p -B api=$(jo id=$_API_ID worker-id=$_API_WORKER_ID) autosave=$_AUTOSAVE background=$_BACKGROUND colors=$_COLORS cpu=$(jo enabled=$_CPU_ENABLED huge-pages=$_CPU_HUGE_PAGES hw-aes=$_CPU_HW_AES priority=$_CPU_PRIORITY asm=$_CPU_ASM cn=$(jo -a $_CPU_CN) cn/0=$_CPU_CN_0 cn-lite/0=$_CPU_CN_LITE_0) donate-level=$_DONATE_LEVEL donate-over-proxy=$_DONATE_OVER_PROXY http=$(jo enabled=$_HTTP_ENABLED host=$_HTTP_HOST port=$_HTTP_PORT access-token=$_HTTP_ACCESS_TOKEN restricted=$_HTTP_RESTRICTED) logfile=$_LOGFILE pools=$(jo -a $(jo algo=$_POOLS_ALGO url=$_POOLS_URL user=$_POOLS_USER pass=$_POOLS_PASS rig-id=$_POOLS_RIG_ID nicehash=$_POOLS_NICEHASH keepalive=$_POOLS_KEEPALIVE enabled=$_POOLS_ENABLED tls=$_POOLS_TLS tls-fingerprint=$_POOLS_TLS_FINDERPRINT daemon=$_POOLS_DAEMON)) print-time=$_PRINT_TIME retries=$_RETRIES retry-pause=$_RETRIES_PAUSE syslog=$_SYSLOG user-agent=$_USER_AGENT watch=$_WATCH)
458
559echo "$_CONFIG_JSON" | tee config.json
660
7−echo "${_CYAN}CONFIG STOPPED${_RESET}"
61+
862
crontab-off.shdeleted−18
@@ -1,18 +0,0 @@
1−#!/bin/bash
2−
3−echo "${_GREEN}DISABLE CRONTAB STARTED${_RESET}"
4−
5−# Removes a user crontab
6−# Used in conjunction with crontab-on.sh to toggle user crontab between states:
7−# on - start/stop xmrig at specified times
8−# off - do not start/stop xmrig
9−
10−# Remove existing crontab
11−echo "Backup existing crontab"
12−crontab -l > crontab
13−
14−echo "Removing exiting crontab"
15−crontab -r
16−
17−echo "${_CYAN}DISABLE CRONTAB STOPPED${_RESET}"
18−
crontab-on.shdeleted−20
@@ -1,20 +0,0 @@
1−#!/bin/bash
2−
3−echo "${_GREEN}ENABLE CRONTAB STARTED${_RESET}"
4−
5−# Defines a user crontab with schedules as defined in settings.sh
6−# Used in conjunction with crontab-off.sh to toggle user crontab between states:
7−# on - start/stop xmrig at specified times
8−# off - do not start/stop xmrig
9−
10−# Get settings
11−. settings.sh
12−. functions.sh
13−sleep 5
14−
15−# Setup crontab for user
16−. crontab.sh
17−sleep 5
18−
19−echo "${_CYAN}ENABLE CRONTAB STOPPED${_RESET}"
20−
crontab.sh+14−7
@@ -1,22 +1,29 @@
11#!/bin/bash
22
3+# Set values in settings script
34
4−echo "${_GREEN}CRONTAB STARTED${_RESET}"
5+echo "#################################"
6+echo " UPDATING CRONTAB"
7+echo "#################################"
58
6−# Set values in settings script
79
810# Remove existing crontab
11+echo "Backup existing crontab"
912crontab -l > crontab
1013
14+echo "Removing exiting crontab"
1115crontab -r
1216
1317# Setup users contab
14−
15−crontab -l | { cat; echo "#Start at $_USER_CRONSTART on days $_USER_CRONDAYS
16−0 $_USER_CRONSTART * * $_USER_CRONDAYS screen -dmS $_XMRIG_SCREEN xmrig --config=$_XMRIG_CONFIG_LOCATION"; } | crontab -
18+crontab -l | { cat; echo "#Start at $_USER_TIMESTART on days $_USER_CRONDAYS
19+0 $_USER_CRONSTART * * $_USER_CRONDAYS $_WORK_DIR/start.sh"; } | crontab -
1720
1821crontab -l | { cat; echo "#Stop at $_USER_TIMESTOP on days $_USER_CRONDAYS
19−0 $_USER_CRONSTOP * * $_USER_CRONDAYS screen -S $_XMRIG_SCREEN -X kill"; } | crontab -
22+0 $_USER_CRONSTOP * * $_USER_CRONDAYS $_WORK_DIR/stop.sh"; } | crontab -
23+
24+crontab -l
2025
21−echo "${_CYAN}CRONTAB STOPPED${_RESET}"
26+echo "#################################"
27+echo " CRONTAB UPDATED"
28+echo "#################################"
2229
depends.sh+10−4
@@ -1,17 +1,23 @@
11#!/bin/bash
2+echo "#################################"
3+echo " INSTALLING DEPENDENCIES "
4+echo "#################################"
25
36# Install the software requirements
47
5−echo "${_GREEN}INSTALL DEPENDS STARTED${_RESET}"
6−
7−if [ "$_APT_DEPENDS" -eq "1" ]; then
8+if [ $_APT_DEPENDS = 1 ]; then
89
910 # Install xmrig depends
1011 sudo apt install -y software-properties-common git build-essential cmake libuv1-dev libssl-dev libmicrohttpd-dev libhwloc-dev gcc g++
1112
1213 # Install xmrig-bash-scripts depends
1314 sudo apt install -y jo cpuid screen
15+else
16+
17+ echo "Depend install is set to NO ($_APT_DEPENDS) Skipping"
1418
1519fi
1620
17−echo "${_CYAN}INSTALL DEPENDS STOPPED${_RESET}"
21+echo "#################################"
22+echo " DEPENDENCIES INSTALLED "
23+echo "#################################"
functions.sh+10−98
@@ -1,125 +1,37 @@
1−#!/bin/bash
2−
3−echo -e "${_GREEN}LOADING FUNCTIONS${_RESET}"
4−
5−function prompt_confirm() {
6− while true; do
7− read -r -n 1 -p "${1:-Continue?} [y/n]: " REPLY
8− case $REPLY in
9− [yY]) echo ; return 0 ;;
10− [nN]) echo ; return 1 ;;
11− *) printf " \033[31m %s \n\033[0m" "invalid input [y/n]"
12− esac
13− done
14−}
15−
16−function show_settings () {
17− echo "${_CYAN}Settings from loaded environment:${_RESET}"
18− echo "${_GREEN}Pool URL:${_RESET}: $_POOLS_URL"
19− echo "${_GREEN}Recieve Wallet:${_RESET}: $_POOLS_USER"
20− echo "${_GREEN}Email Address:${_RESET}: $_POOLS_PASS"
21−}
22−
23−function show_mysettings () {
24− if [ -f $_WORK_DIR/$_MYSETTINGS_FILE ]; then
25− load_mysettings
26− echo "${_CYAN}Settings from mysettings.sh:${_RESET}"
27− echo "${_GREEN}Pool URL:${_RESET}: $_POOLS_URL"
28− echo "${_GREEN}Recieve Wallet:${_RESET}: $_POOLS_USER"
29− echo "${_GREEN}Email Address:${_RESET}: $_POOLS_PASS"
30− fi
31−}
32−
33−function load_mysettings () {
34− if [ -f $_WORK_DIR/$_MYSETTINGS_FILE ]; then
35− . $_MYSETTINGS_FILE
36− fi
37−}
38−
39−function my_config_json () {
40−
41− _CONFIG_JSON=$(jo -p -B api=$(jo id=$_API_ID worker-id=$_API_WORKER_ID) autosave=$_AUTOSAVE background=$_BACKGROUND colors=$_COLORS cpu=$(jo enabled=$_CPU_ENABLED huge-pages=$_CPU_HUGE_PAGES hw-aes=$_CPU_HW_AES priority=$_CPU_PRIORITY asm=$_CPU_ASM cn=$(jo -a $_CPU_CN) cn/0=$_CPU_CN_0 cn-lite/0=$_CPU_CN_LITE_0) opencl=$(jo enabled=$_OPENCL_ENABLED cache=$_OPENCL_CACHE loader=$_OPENCL_LOADER platform=$_OPENCL_PLATFORM) donate-level=$_DONATE_LEVEL donate-over-proxy=$_DONATE_OVER_PROXY http=$(jo enabled=$_HTTP_ENABLED host=$_HTTP_HOST port=$_HTTP_PORT access-token=$_HTTP_ACCESS_TOKEN restricted=$_HTTP_RESTRICTED) log-file=$_LOG_FILE pools=$(jo -a $(jo algo=$_POOLS_ALGO url=$_POOLS_URL user=$_POOLS_USER pass=$_POOLS_PASS rig-id=$_POOLS_RIG_ID nicehash=$_POOLS_NICEHASH keepalive=$_POOLS_KEEPALIVE enabled=$_POOLS_ENABLED tls=$_POOLS_TLS tls-fingerprint=$_POOLS_TLS_FINDERPRINT daemon=$_POOLS_DAEMON)) print-time=$_PRINT_TIME retries=$_RETRIES retry-pause=$_RETRIES_PAUSE syslog=$_SYSLOG user-agent=$_USER_AGENT watch=$_WATCH)
42−
43−}
44−
45−function build_xmrig () {
1+build_xmrig () {
462 if [ -d $_XMRIG_BUILD_LOCATION ]; then
473 # Remove existing build directory
4+ echo "Found old build directory. Removing"
485 rm -rf $_XMRIG_BUILD_LOCATION
496
507 # Make new build directory
8+ echo "Creating a build directory"
519 mkdir $_XMRIG_BUILD_LOCATION
5210 else
5311 # Make new build directory
12+ echo "Creating a build directory"
5413 mkdir $_XMRIG_BUILD_LOCATION
5514 fi
5615
5716 # Change to build directory
17+ echo "Changing to build directory"
5818 cd $_XMRIG_BUILD_LOCATION
5919
6020 # Configure cmake scafolding
61− cmake ..
21+ echo "Configuring cmake scafolding"
22+ cmake .. -DCMAKE_C_COMPILER=gcc-7 -DCMAKE_CXX_COMPILER=g++-7
6223
6324 # Compile the software
25+ echo "Starting build"
6426 make
6527}
6628
6729
68−function start_xmrig () {
30+start_xmrig () {
6931 screen -dmS $_XMRIG_SCREEN xmrig --config=$_XMRIG_CONFIG_LOCATION
7032}
7133
7234
73−function stop_xmrig () {
35+stop_xmrig () {
7436 screen -S $_XMRIG_SCREEN -X kill
7537}
76−
77−function check_cpu () {
78− # Check if CPU supports AES-NI
79− cpuid | grep -i aes > hw-aes.txt
80− if grep -q true "hw-aes.txt"; then
81− _AES_NI=true
82− else
83− _AES_NI=false
84− fi
85− rm hw-aes.txt
86−
87− # Get number of available CPU Cores
88− _ENV_CORE=$(nproc --all)
89−
90− # Get CPU L3 cache value
91− _ENV_CORE_L3=$(getconf LEVEL3_CACHE_SIZE)
92−}
93−
94−function calc_threads () {
95− # Each thread needs 2048 byte (2 Megabyte)
96− # Calculate number of threads supported with L3 cache size
97−
98− _ENV_THREAD_QTY=$(( ($_ENV_CORE_L3/2048)/1000 ))
99−
100− # Affine number of threads for _CPU_CN
101− _COUNTER="$(( $_ENV_THREAD_QTY-1 ))"
102−
103− _ENV_CPU_THREAD_AFFINITY="$(seq -s " " 0 $_COUNTER)"
104−
105−}
106−
107−function calc_hugepages () {
108− # Setting according to cpu cores but xmrig will not use all
109− # change to make value use _ENV_CORE_THREADS
110− # Check that hugepages set in /etc/sysctl.conf
111−
112− _ENV_CHECK="nr_hugepages"
113−
114− if sudo grep -q $_ENV_CHECK /etc/sysctl.conf; then
115− sudo sysctl -p
116− else
117− # Set value in current env
118− sudo sysctl -w vm.nr_hugepages="$_ENV_THREAD_QTY"
119− # Add value to sysctl
120− sudo sysctl -p
121− fi
122−
123−}
124−
125−echo -e "${_CYAN}FUNCTIONS LOADED${_RESET}"
input.shdeleted−61
@@ -1,61 +0,0 @@
1−#!/bin/bash
2−
3−# Ask user questions
4−# Capture input
5−# if setting already exist use existing
6−
7−echo -e "${_GREEN}USER SETTINGS STARTED${_RESET}"
8−
9−if [ -f $_WORK_DIR/$_MYSETTINGS_FILE ]; then
10−
11− # Call function
12−
13− load_mysettings
14−
15− my_config_json
16−
17−else
18− echo -e " ${_YELLOW}Opt for default settings or enter your own.\n"
19−
20− echo -e " No - 'config.json' created with values from 'settings.sh'."
21− echo -e " Yes - 'config.json' created with values from 'mysettings.sh' (recomended).\n"
22−
23− echo -e " When 'mysettings.sh' exists this prompt will be skipped at furture installation."
24− echo -e " Own settings is recomended to avoid your settings being overidden in upgrades.${_RESET}\n"
25−
26−
27− prompt_confirm "Enter your own settings?"
28−
29− if [ "$?" -eq 0 ]; then
30−
31− # Create a file
32−
33− touch $_MYSETTINGS_FILE_LOCATION
34− chmod +x $_MYSETTINGS_FILE_LOCATION
35− echo "#!/bin/bash" > $_MYSETTINGS_FILE_LOCATION
36−
37− # Prompt user input
38−
39− echo "Current pool URL: $_POOLS_URL"
40− read -p "Enter new pool URL: " _POOLS_URL
41− echo "_POOLS_URL=\"$_POOLS_URL\"" >> $_MYSETTINGS_FILE_LOCATION
42−
43− echo "Current Receive Wallet address: $_POOLS_USER"
44− read -p "Enter new Receive Wallet address: " _POOLS_USER
45− echo "_POOLS_USER=\"$_POOLS_USER\"" >> $_MYSETTINGS_FILE_LOCATION
46−
47− echo "Current email address: $_POOLS_PASS"
48− read -p "Enter new email address: " _POOLS_PASS
49− echo "_POOLS_PASS=\"$_POOLS_PASS\"" >> $_MYSETTINGS_FILE_LOCATION
50−
51− fi
52−
53− # Call function
54−
55− load_mysettings
56−
57− my_config_json
58−
59−fi
60−
61−echo "${_CYAN}USER SETTINGS STOPPED${_RESET}"
install.sh+16−38
@@ -1,56 +1,32 @@
11#!/bin/bash
22
3−
4−# Colors
5−_CYAN=`tput setaf 1`
6−_GREEN=`tput setaf 2`
7−_YELLOW=`tput setaf 3`
8−_BLUE=`tput setaf 4`
9−_MAGENTA=`tput setaf 5`
10−_CYAN=`tput setaf 6`
11−_RESET=`tput sgr0`
12−
13−echo "${_GREEN}INSTALLATION STARTED${_RESET}"
14−
15−_DEBUG=$1
16−
17−if $_DEBUG; then
18− set +x
19−else
20− set -x
21−fi
22−
23−# Set that user passwdless sudo
24−if sudo grep -q $USER /etc/sudoers.d/README; then
25− echo -e "User $USER found in /etc/sudoers.d/README. All good!!\n"
26−else
27− echo -e "$USER does not have passwdles sudo. Fixing that!!\n"
28− echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/README
29−fi
30−
31−# Load functions
32−. functions.sh
33−
343# Get settings
354. settings.sh
5+. functions.sh
6+sleep 5
7+
8+# Stop running instance
9+. stop.sh
3610
3711# Update system
3812. maintenance.sh
13+sleep 5
3914
4015# Install dependencies
4116. depends.sh
42−
43−# User input
44−. input.sh
45−
46−# Stop running instance
47−. stop.sh
17+sleep 5
4818
4919# Get source and build by sourcing our build file
5020. build.sh
21+sleep 5
5122
5223# Create a config.json
5324. config.sh
25+sleep 5
26+
27+# Setup crontab for user
28+. crontab.sh
29+sleep 5
5430
5531# Unset REPO variable so start script will execute program
5632SCREEN=""
@@ -59,4 +35,6 @@ SCREEN=""
5935. start.sh
6036
6137
62−echo -e "${_CYAN}INSTALLATION COMPLETED${_RESET}"
38+echo "####################################"
39+echo "# ALL DONE - INSTALLATION COMPLETE #"
40+echo "####################################"
maintenance.sh+9−3
@@ -1,12 +1,18 @@
11#!/bin/bash
22
3−echo "${_GREEN}MAINTENANCE STARTED${_RESET}"
3+echo "####################################"
4+echo "# STARTING SYSTEM MAINTENANCE #"
5+echo "####################################"
46
5−if [ "$_APT_MAINETANCE" -eq "1" ]; then
7+if [ $_APT_MAINETANCE = 1 ]; then
68
79 sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt autoclean
810
11+else
12+ echo "Apt maintenance is set to NO ($_APT_MAINETANCE) Skipping"
913fi
1014
11−echo "${_CYAN}MAINTENANCE STOPPED${_RESET}"
15+echo "####################################"
16+echo "# SYSTEM MAINTENANCE COMPLETE #"
17+echo "####################################"
1218
settings.sh+68−87
@@ -1,130 +1,110 @@
11#!/bin/bash
22
3−echo -e "${_GREEN}LOADING DEFAULT SETTINGS${_RESET}"
3+echo "#################################"
4+echo " LOADING SETTINGS "
5+echo "#################################"
46
5−_EMAIL="spam@iko.soy"
7+_EMAIL="miners@prepaidmeters.com"
68
7−_RECEIVE_WALLET="44FADBDhNRvjJszF5mLS4VCwZ71mY7ftfUErEisPoT724hb5eYuvuFqWthniY8dGPBTcWuBoeLrLJVkxLHCb1Lsd4DdbZzZ"
9+_RECEIVE_WALLET="854sqm2Cm4TB2XgPHWqSPSbnFAe3SMzdEDzZHpukQ8NHBPFropbnkFmEKiZPgwjMFC9PTjaFscR2UU6ZwFCqJzGMUiZVbTM"
810
9−_POOL_SERVER_URL="xmrpool.eu"
10−_POOL_SERVER_PORT="5555"
11+_POOL_SERVER_URL="192.168.4.5"
12+_POOL_SERVER_PORT="3333"
1113
12−# Call function
13−show_settings
14−
15−#######################################################################
16−# DO NOT CHANGE AFTER THIS POINT UNLESS YOU KNOW WHAT YOU ARE DOING #
17−#######################################################################
18−
19−_API_ID='null'
20−_API_WORKER_ID="$HOSTNAME"
21−
22−_AUTOSAVE="true"
23−
24−_BACKGROUND="false"
25−
26−_COLORS="true"
27−
28−# call check_cpu
29−check_cpu
30−
31−# call calc_threads
32−calc_threads
33−
34−_CPU_ENABLED="true"
35−_CPU_HUGE_PAGES="true"
36−_CPU_HW_AES="$_AES_NI"
37−_CPU_PRIORITY='null'
38−_CPU_ASM="true"
39−_CPU_CN="$_ENV_CPU_THREAD_AFFINITY"
40−
41−_CPU_CN_0="false"
42−_CPU_CN_LITE_0="false"
43−
44−_OPENCL_ENABLED="false"
45−_OPENCL_CACHE="true"
46−_OPENCL_LOADER='null'
47−_OPENCL_PLATFORM="AMD"
48−
49−_DONATE_LEVEL="0"
50−
51−_DONATE_OVER_PROXY="1"
52−
53−_HTTP_ENABLED="true"
54−_HTTP_HOST=$(hostname --all-ip-addresses | awk '{print $1}')
55−_HTTP_PORT="8080"
56−_HTTP_ACCESS_TOKEN='null'
57−_HTTP_RESTRICTED="false"
58−
59−_LOG_FILE='null'
60−
61−_POOLS_ALGO="cn/r"
62−_POOLS_URL="$_POOL_SERVER_URL:$_POOL_SERVER_PORT"
63−_POOLS_USER="$_RECEIVE_WALLET"
64−_POOLS_PASS="$HOSTNAME:$_EMAIL"
65−_POOLS_RIG_ID="$HOSTNAME"
66−_POOLS_NICEHASH="true"
67−_POOLS_KEEPALIVE="true"
68−_POOLS_ENABLED="true"
69−_POOLS_TLS='null'
70−_POOLS_TLS_FINDERPRINT='null'
71−_POOLS_DAEMON="false"
72−
73−_PRINT_TIME="30"
74−
75−_RETRIES="5"
76−_RETRIES_PAUSE="5"
77−
78−_SYSLOG="false"
79−
80−_USER_AGENT='null'
81−
82−_WATCH="true"
14+#################################
8315
8416# Set working directory
8517_WORK_DIR="$(pwd)"
8618cd $_WORK_DIR
19+echo -e "Working directory: $_WORK_DIR\n"
8720
8821# Set repository from which to get the source
8922_XMRIG_REPO="https://github.com/xmrig/xmrig.git"
23+echo -e "Git source repo: $_XMRIG_REPO\n"
9024
9125# Set name of folder to create when cloning from REPO
9226_XMRIG_CLONE="xmrig-cpu"
27+echo -e "Source folder name: $_XMRIG_CLONE\n"
9328
9429# Set clone directory path
9530_XMRIG_CLONE_LOCATION="$_WORK_DIR/$_XMRIG_CLONE"
31+echo -e "Source folder location: $_XMRIG_CLONE_LOCATION\n"
9632
9733# Set branch from which to build
98−_XMRIG_BRANCH="master"
34+_XMRIG_BRANCH="beta"
35+echo -e "Build branch: $_XMRIG_BRANCH\n"
9936
10037# Set build directory
10138_XMRIG_BUILD="build"
39+echo -e "Build directory: $_XMRIG_BUILD\n"
10240
10341# Set build directory location
10442_XMRIG_BUILD_LOCATION="$_XMRIG_CLONE_LOCATION/$_XMRIG_BUILD"
43+echo -e "Build directory location: $_XMRIG_BUILD_LOCATION\n"
10544
10645# Set where to install binary
10746_XMRIG_TARGET_LOCATION="/usr/bin/"
108−
109−# Set mysettings file
110−_MYSETTINGS_FILE="mysettings.sh"
111−
112−# Set mysettings file location
113−_MYSETTINGS_FILE_LOCATION="$_WORK_DIR/$_MYSETTINGS_FILE"
47+echo -e "Install path: $_XMRIG_TARGET_LOCATION\n"
11448
11549# Set the config file name
11650_XMRIG_CONFIG="config.json"
51+echo -e "Config file: $_XMRIG_CONFIG\n"
11752
11853# Set config location
11954_XMRIG_CONFIG_LOCATION="$_WORK_DIR/$_XMRIG_CONFIG"
55+echo -e "Config file location: $_XMRIG_CONFIG_LOCATION\n"
12056
12157# Set values for crontab
122−_USER_CRONSTART="17"
123−_USER_CRONSTOP="8"
58+_USER_CRONSTART="18"
59+_USER_CRONSTOP="6"
12460_USER_CRONDAYS="1-5"
61+echo -e "Cron job start: $_USER_CRONSTART\n"
62+echo -e "Cron job stop: $_USER_CRONSTOP\n"
63+echo -e "Cron on days: $_USER_CRONDAYS\n"
12564
12665# Set the name of the screen created by start script
12766_XMRIG_SCREEN="xmrig-cpu"
67+echo -e "Screen session name: $_XMRIG_SCREEN\n"
68+
69+# Set that user passwdless sudo
70+#sudo grep $USER /etc/sudoers.d/README
71+
72+if sudo grep -q $USER /etc/sudoers.d/README; then
73+ echo -e "User $USER found in /etc/sudoers.d/README. All good!!\n"
74+else
75+ echo -e "$USER does not have passwdles sudo. Fixing that!!\n"
76+ echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/README
77+fi
78+
79+# Get number of available CPU Cores
80+_ENV_CORE=$(nproc --all)
81+echo -e "CPU Cores: $_ENV_CORE\n"
82+
83+# Check that hugepages set in /etc/sysctl.conf
84+_ENV_CHECK="nr_hugepages"
85+
86+if sudo grep -q $_ENV_CHECK /etc/sysctl.conf; then
87+ echo "Found nr_hugepages in /etc/sysctl.conf. All good!!"
88+ echo -e "Refreshing sysctl configuration just to be sure.\n"
89+ sudo sysctl -p
90+else
91+ # Set value in current env
92+ echo -e "Did not find nr_hugepages in /etc/sysctl.conf. Fixing that!!\n"
93+ sudo sysctl -w vm.nr_hugepages="$_ENV_CORE"
94+ sudo sysctl -p
95+
96+ # Add value to sysctl
97+ echo "vm.nr_hugepages=$_ENV_CORE" | sudo tee -a /etc/sysctl.conf
98+fi
99+
100+# Check if CPU supports AES-NI
101+cpuid | grep -i aes > hw-aes.txt
102+if grep -q true "hw-aes.txt"; then
103+ _AES_NI=true
104+else
105+ _AES_NI=false
106+fi
107+rm hw-aes.txt
128108
129109# Run apt maintenance
130110# 1 = yes 0 = no
@@ -134,6 +114,7 @@ _APT_MAINETANCE="1"
134114# 1 = yes 0 = no
135115_APT_DEPENDS="1"
136116
137−
138−echo -e "${_CYAN}DEFAULT SETTINGS LOADED${_RESET}"
117+echo "#################################"
118+echo " SETTINGS LOADED"
119+echo "#################################"
139120
start.sh+30−52
@@ -1,59 +1,37 @@
11#!/bin/bash
22
3−echo "${_GREEN}MINING STARTED${_RESET}"
4−
53# When this script is:
64# * run by crontab, load the settings
75# * run by install, do not load settings
86
9−# Reload settings and functions for when running standalone
10−. functions.sh
11−. settings.sh
12−
13−# if ! screen -list | grep -q "$_XMRIG_SCREEN"; then
14−
15− # Call functions
16− show_settings
17− show_mysettings
18− # start_xmrig
19−
20− # List screen
21− # screen -ls
22−# else
23−
24− # List screen
25− # screen -ls
26−
27−# fi
28−echo "[Unit]" | sudo tee /etc/systemd/system/xmrig.service
29−echo "Description=XMRIG service" | sudo tee -a /etc/systemd/system/xmrig.service
30−echo "After=network.target" | sudo tee -a /etc/systemd/system/xmrig.service
31−echo "StartLimitIntervalSec=0" | sudo tee -a /etc/systemd/system/xmrig.service
32−echo "[Service]" | sudo tee -a /etc/systemd/system/xmrig.service
33−echo "Type=simple" | sudo tee -a /etc/systemd/system/xmrig.service
34−echo "Restart=always" | sudo tee -a /etc/systemd/system/xmrig.service
35−echo "RestartSec=3" | sudo tee -a /etc/systemd/system/xmrig.service
36−echo "User=root" | sudo tee -a /etc/systemd/system/xmrig.service
37−echo "ExecStart=$_XMRIG_BUILD_LOCATION/xmrig --config=$_XMRIG_CONFIG_LOCATION" | sudo tee -a /etc/systemd/system/xmrig.service
38−echo "" | sudo tee -a /etc/systemd/system/xmrig.service
39−echo "[Install]" | sudo tee -a /etc/systemd/system/xmrig.service
40−echo "WantedBy=multi-user.target" | sudo tee -a /etc/systemd/system/xmrig.service
41−
42−echo "STARTING XMRIG/SERVICES"
43−
44−sudo service logrotate start
45−sudo service ntp start
46−sudo service xmrig start
47−
48−echo "STARTING XMRIG/SERVICES @ BOOT"
49−
50−sudo systemctl enable logrotate
51−sudo systemctl enable ntp
52−sudo systemctl enable xmrig
53−
54−echo "${_CYAN}MINING RUNNING${_RESET}"
55−echo "${_YELLOW} The process is running in a screen session."
56−echo "${_YELLOW} The screen session is named:${_RESET} $_XMRIG_SCREEN"
57−echo "${_YELLOW} Command to view process:${_RESET} screen -r $_XMRIG_SCREEN"
58−echo "${_MAGENTA} ENJOY!!!${_RESET}"
7+echo "####################################"
8+echo " STARTING "
9+echo "####################################"
10+
11+if [ -z "$_XMRIG_SCREEN" ]; then
12+ # Load settings when run by crontab
13+ # Also ensures vm.nr_hugepages is set
14+ . settings.sh
15+ . functions.sh
16+
17+ # Check another instance is not already running
18+ if ! screen -list | grep -q "$_XMRIG_SCREEN"; then
19+ # Call function
20+ start_xmrig
21+ fi
22+else
23+ # Call function
24+ start_xmrig
25+
26+ # Unset _XMRIG_SCREEN variable.
27+ # The start script will have to load settings on next start
28+ $_XMRIG_SCREEN=""
29+fi
30+
31+# List screen
32+screen -ls
33+
34+echo "####################################"
35+echo " STARTED - use screen -r to view "
36+echo "####################################"
5937
stop.sh+10−2
@@ -4,10 +4,13 @@
44# * run by crontab, load the settings
55# * run by install, do not load settings
66
7−echo "${_GREEN}END MINING STARTED${_RESET}"
7+echo "#################################"
8+echo " KILLING SCREEN"
9+echo "#################################"
810
911if [ -z "$_XMRIG_SCREEN" ]; then
1012 # Load settings when run by crontab
13+ echo "Loading settings and functions"
1114 . settings.sh
1215 . functions.sh
1316
@@ -18,5 +21,10 @@ else
1821 stop_xmrig
1922fi
2023
21−echo "${_CYAN}END MINING STOPPED${_RESET}"
24+# Check results
25+echo "Screen listing"
26+screen -ls
2227
28+echo "#################################"
29+echo " SCREEN KILLED"
30+echo "#################################"
update.sh+16−6
@@ -1,11 +1,21 @@
11#!/bin/bash
22
3−echo "${_GREEN}UPDATE STARTED${_RESET}"
3+# Set get xmrig repository and version by sourcing our version file
4+. settings.sh
45
5−git pull
6+# Kill any current xmrig process
7+. stop.sh
68
7−# install
8−. install.sh
9−sleep 5
9+# Get source and build by sourcing our build file
10+. build.sh
11+
12+# Clean users contab
13+crontab -r $USER
14+
15+# Source our start script to start process again in a screen
16+. start.sh
17+
18+echo "####################################"
19+echo "# ALL DONE - UPDATE COMPLETE #"
20+echo "####################################"
1021
11−echo "${_CYAN}UPDATE COMPLETE${_RESET}"