git.iko.soy/xmrig-bash-scripts
on b293dd2 help sign in
17 files changed+273−591
since splitsnapshots
unifiedsplit
.gitignore−3 CONTRIBUTING.md−85 README.md+23−86 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+67−89 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
CONTRIBUTING.mddeleted−85
@@ -1,85 +0,0 @@
1−# Contributing
2−
3−When contributing to this repository, please first discuss the change you wish to make via issue with the owners of this repository before making a change.
4−
5−Please note we have a code of conduct, please follow it in all your interactions with the project.
6−
7−## Pull Request Process
8−
9−1. Ensure any install or build artifacts are not included or are removed.
10−2. Update the README.md with details of changes to the interface.
11−
12−## Code of Conduct
13−
14−### Our Pledge
15−
16−In the interest of fostering an open and welcoming environment, we as
17−contributors and maintainers pledge to making participation in our project and
18−our community a harassment-free experience for everyone, regardless of age, body
19−size, disability, ethnicity, gender identity and expression, level of experience,
20−nationality, personal appearance, race, religion, or sexual identity and
21−orientation.
22−
23−### Our Standards
24−
25−Examples of behavior that contributes to creating a positive environment
26−include:
27−
28−* Using welcoming and inclusive language
29−* Being respectful of differing viewpoints and experiences
30−* Gracefully accepting constructive criticism
31−* Focusing on what is best for the community
32−* Showing empathy towards other community members
33−
34−Examples of unacceptable behavior by participants include:
35−
36−* The use of sexualized language or imagery and unwelcome sexual attention or
37−advances
38−* Trolling, insulting/derogatory comments, and personal or political attacks
39−* Public or private harassment
40−* Publishing others' private information, such as a physical or electronic
41− address, without explicit permission
42−* Other conduct which could reasonably be considered inappropriate in a
43− professional setting
44−
45−### Our Responsibilities
46−
47−Project maintainers are responsible for clarifying the standards of acceptable
48−behavior and are expected to take appropriate and fair corrective action in
49−response to any instances of unacceptable behavior.
50−
51−Project maintainers have the right and responsibility to remove, edit, or
52−reject comments, commits, code, wiki edits, issues, and other contributions
53−that are not aligned to this Code of Conduct, or to ban temporarily or
54−permanently any contributor for other behaviors that they deem inappropriate,
55−threatening, offensive, or harmful.
56−
57−### Scope
58−
59−This Code of Conduct applies both within project spaces and in public spaces
60−when an individual is representing the project or its community. Examples of
61−representing a project or community include using an official project e-mail
62−address, posting via an official social media account, or acting as an appointed
63−representative at an online or offline event. Representation of a project may be
64−further defined and clarified by project maintainers.
65−
66−### Enforcement
67−
68−Instances of abusive, harassing, or otherwise unacceptable behavior may be
69−reported by contacting the project team at [INSERT EMAIL ADDRESS]. All
70−complaints will be reviewed and investigated and will result in a response that
71−is deemed necessary and appropriate to the circumstances. The project team is
72−obligated to maintain confidentiality with regard to the reporter of an incident.
73−Further details of specific enforcement policies may be posted separately.
74−
75−Project maintainers who do not follow or enforce the Code of Conduct in good
76−faith may face temporary or permanent repercussions as determined by other
77−members of the project's leadership.
78−
79−### Attribution
80−
81−This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
82−available at [http://contributor-covenant.org/version/1/4][version]
83−
84−[homepage]: http://contributor-covenant.org
85−[version]: http://contributor-covenant.org/version/1/4/
README.md+23−86
@@ -1,5 +1,5 @@
11# xmrig-bash-scripts
2−A set of convenience scripts, written in bash, to help manage installation, configuration and update of [xmrig cpu](https://github.com/xmrig/xmrig) across multiple hosts.
2+A simple collection of bash shell scripts to manage installation, update and configuration of [xmrig cpu](https://github.com/xmrig/xmrig) across multiple hosts.
33
44
55## Download
@@ -8,112 +8,49 @@ A set of convenience scripts, written in bash, to help manage installation, conf
88
99### Prerequisites
1010
11−There is allot to install so the install script will do most of the heavy lifting.
12−At the start the expectation is that you have:
13−* Computer running Ubuntu 18.04 (LTS)
14−* Bash shell
11+* Ubuntu Linux (or other Debian-based distribution)
1512* User account with sudo privileges
16−* Installed git
17−* Optionally installed [xmrig-proxy](https://github.com/xmrig/xmrig-proxy)
1813
19−### Agreeable
14+### Installion
2015
21−Some knowledge of:
22−* Linux Command Line Interface
23−* Linux shell `bash`
24−
25−### Installation
26−
27−1. Change to your user home directory.
28− `cd ~`
29−1. Install git.
30− `sudo apt install git`
31−1. Clone this project.
32− `git clone https://github.com/seanwhe/xmrig-bash-scripts`
33−1. Change into the cloned directory.
16+1. Change in to the cloned directory
3417 `cd xmrig-bash-scripts`
35−1. Run the install script
36− `./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− `screen -r`
46−
47−### Operation
48−
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.
52−
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'.
54−
55−This should work out the box, if you follow the installation steps and enter your own values for 'mysettings.sh.
56−
57−Once you have a running xmrig then you can start playing around and tweaking to suite requirements.
58−
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.
62−
63−* build.sh - clones xmrig to ``~/xmrig-bash-scripts`/xmrig-cpu`, configures, builds and copies xmrig to `/usr/bin/`
64−* config.sh - contains variables that aid in defining the values for the attributes found in config.json.
65−* 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.
68−* depends.sh - installs dependancies required by xmrig and these scripts.
69−* functions.sh - a collection of functions used in various of the scripts.
70−* input.sh - prompts to enter values for creating 'mysettings.sh'
71−* install.sh - the main entry point when first installing.
72−* maintenance.sh - performs apt update, upgrade, autoremove and autoclean operations.
73−* settings.sh - contains variables used by these scripts.
74−* start.sh - starts xmrig in a screen session.
75−* stop.sh - stops xmrig screen session.
76−
77−### 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:
81−`screen -r xmrig-cpu`
82−
83−### Updating
84−A simple `git update` in `~/xmrig-bash-scripts` will update these scripts.
8518
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`.
19+2. Edit the settings file to your preference.
20+ `vim settings.sh`
8821
89−A script named update.sh is provided to perform both these steps in a single command.
22+3. Run the install script
23+ `./install.sh`
9024
91−## Reporting issues
25+The install script do the following:
26+1. Load the settings ensuring that your user has passwordless sudo and that vm.nr_hugepages is set.
27+2. Stop any existing screen session runing xmrig.
28+3. Run apt update, upgrade, autoremove, autoclean on system.
29+4. Install required build dependencies.
30+5. Git clone xmrig source to ~/xmrig-bash-scripts/xmrig-cpui/ and change to specified branch
31+6. Build and install xmrig to /usr/bin
32+7. Start a screen named xmrig-cpu running xmrig
9233
93−[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.
34+## Viewing mining process
35+`screen -r xmrig-cpu`
9436
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:
97−* xmrig, the Monero (XMR) CPU miner, over at [xmrig issues tracker](https://github.com/xmrig/xmrig/issues)
98−* xmrig-bash-scripts, these conveniece scripts, over at [xmrig-bash-scripts](https://github.com/seanwhe/xmrig-bash-scripts/issues)
37+Please read [CONTRIBUTING.md](https://gist.github.com/PurpleBooth/b24679402957c63ec426) for details on our code of conduct, and the process for submitting pull requests to us.
9938
10039## Versioning
10140
10241We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/seanwhe/xmrig-bash-scripts/tags).
10342
104−## Contributing
105−Please read [CONTRIBUTING.md](https://gist.github.com/PurpleBooth/b24679402957c63ec426) for details on our code of conduct, and the process for submitting pull requests to us.
106−
107−See also the list of [contributors](https://github.com/seanwhe/xmrig-bash-scripts/CONTRIBUTORS)
108−
10943## Authors
11044
11145* **Sean Wheller** - *Initial work* - [seanwhe](https://github.com/seanwhe)
11246
47+## CONTRIBUTING
48+See also the list of [contributors](https://github.com/seanwhe/xmrig-bash-scripts/CONTRIBUTORS
49+
11350## License
11451
11552This project is licensed under the GNU General Public License v3.0 - see the [LICENSE.md](LICENSE.md) file for details
11653
11754## Acknowledgments
11855
119−* Thanks to [fireice-uk](https://github.com/fireice-uk) for developing and maintaining [xmrig products](https://xmrig.com/).
56+* Thanks to [fireice-uk](https://github.com/fireice-uk) for developing and maintaining xmrig
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 -p 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+67−89
@@ -1,139 +1,117 @@
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+# Get number of available CPU Cores
70+_ENV_CORE=$(nproc --all)
71+echo -e "CPU Cores: $_ENV_CORE\n"
72+
73+# Set that user passwdless sudo
74+#sudo grep $USER /etc/sudoers.d/README
75+
76+if sudo grep -q $USER /etc/sudoers.d/README; then
77+ echo -e "User $USER found in /etc/sudoers.d/README. All good!!\n"
78+else
79+ echo -e "$USER does not have passwdles sudo. Fixing that!!\n"
80+ echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/README
81+fi
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+
95+ # Add value to sysctl
96+ echo "vm.nr_hugepages=$_ENV_CORE" | sudo tee -a /etc/sysctl.conf
97+fi
98+
99+# Check if CPU supports AES-NI
100+cpuid | grep -i aes > hw-aes.txt
101+if grep -q true "hw-aes.txt"; then
102+ _AES_NI=true
103+else
104+ _AES_NI=false
105+fi
106+rm hw-aes.txt
128107
129108# Run apt maintenance
130−# 1 = yes 0 = no
131109_APT_MAINETANCE="1"
132110
133111# Run install of depends
134−# 1 = yes 0 = no
135112_APT_DEPENDS="1"
136113
137−
138−echo -e "${_CYAN}DEFAULT SETTINGS LOADED${_RESET}"
114+echo "#################################"
115+echo " SETTINGS LOADED"
116+echo "#################################"
139117
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}"