113 lines
3.5 KiB
Python
113 lines
3.5 KiB
Python
|
#!/usr/bin/env python3
|
||
|
from subprocess import Popen, PIPE
|
||
|
from getopt import gnu_getopt, GetoptError
|
||
|
from json import dumps, loads
|
||
|
from os import environ
|
||
|
|
||
|
from sys import stdout, stdin
|
||
|
|
||
|
if environ.get('SLOW_MEMORY') == None:
|
||
|
environ['SLOW_MEMORY'] = 'warn'
|
||
|
if environ.get('WORK_GROUP') == None:
|
||
|
environ['WORK_GROUP'] = 'testing'
|
||
|
|
||
|
xmr = {
|
||
|
'config.txt': {
|
||
|
"call_timeout": 10,
|
||
|
"retry_time": 30,
|
||
|
"giveup_limit": 0,
|
||
|
"verbose_level": 4,
|
||
|
"print_motd": False,
|
||
|
"h_print_time": 300,
|
||
|
"aes_override": None,
|
||
|
"use_slow_memory": environ['SLOW_MEMORY'],
|
||
|
"tls_secure_algo": True,
|
||
|
"daemon_mode": False,
|
||
|
"output_file": "", #"/var/log/xmr-stak-rx.log",
|
||
|
"httpd_port": 8080,
|
||
|
"http_login": "",
|
||
|
"http_pass": "",
|
||
|
"prefer_ipv4": False,
|
||
|
},
|
||
|
'pools.txt': { "pool_list": [ {
|
||
|
"pool_address": "europe.randomx-hub.miningpoolhub.com:20580",
|
||
|
"wallet_address": f"Ghost-Zephyr.{environ['WORK_GROUP']}", "rig_id" : "",
|
||
|
"pool_password": "x", "use_nicehash": False, "use_tls": False, "tls_fingerprint": "",
|
||
|
"pool_weight": 1 },
|
||
|
], "currency": "monero" },
|
||
|
'cpu.txt': {
|
||
|
"cpu_threads_conf" : [
|
||
|
#{ "low_power_mode": 5, "affine_to_cpu": false },
|
||
|
]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
sys = []
|
||
|
|
||
|
def usage():
|
||
|
print('''
|
||
|
Docker cryptominer script.
|
||
|
Automagically generates configs and runs miner programs inside a container.
|
||
|
|
||
|
-h --help, shows this.
|
||
|
-m --monero [n], mines monero with n threads.
|
||
|
''')
|
||
|
|
||
|
def main(argv):
|
||
|
try:
|
||
|
opts, _ = gnu_getopt(argv, 'm:h', ['monero=', 'help'])
|
||
|
if len(opts) < 1:
|
||
|
usage()
|
||
|
exit()
|
||
|
for o, a in opts:
|
||
|
if o in ('-m', '--monero'):
|
||
|
monero(a)
|
||
|
elif o in ('-h', '--help'):
|
||
|
usage()
|
||
|
exit()
|
||
|
else:
|
||
|
assert False, "unhandled option"
|
||
|
#calls(sys)
|
||
|
except GetoptError as err:
|
||
|
print(f'\n{err}')
|
||
|
usage()
|
||
|
|
||
|
def monero(threads):
|
||
|
try:
|
||
|
for _ in range(0, int(threads)):
|
||
|
xmr['cpu.txt']['cpu_threads_conf'].append({ "low_power_mode": 5, "affine_to_cpu": False })
|
||
|
for c in xmr:
|
||
|
with open(c, 'r') as f:
|
||
|
d = f.readline()
|
||
|
if f'{dumps(xmr[c])[1:-1]},' != d:
|
||
|
with open(c, 'w') as f:
|
||
|
f.write(f'{dumps(xmr[c])[1:-1]},')
|
||
|
print(f'Config {c} updated.')
|
||
|
else:
|
||
|
print(f'Config {c} unchanged.')
|
||
|
#sys.append(xmr)
|
||
|
p = Popen(['./xmr-stak-rx', '--currency', 'monero', '--config', 'config.txt', '--noDevSupport', '--noTest'], stdout=PIPE, stderr=PIPE, stdin=stdin)
|
||
|
for c in iter(lambda: p.stdout.readline(1), b''): stdout.write(c.decode('utf-8'))
|
||
|
except KeyboardInterrupt:
|
||
|
p.terminate()
|
||
|
o, _ = p.communicate()
|
||
|
print(o.decode('utf-8'))
|
||
|
except NameError:
|
||
|
print('\\nGot keyboard interrupt beafore starting xmr-stak-rx.')
|
||
|
except ValueError:
|
||
|
print('\nThreads has to be a number.')
|
||
|
usage()
|
||
|
|
||
|
def calls(sys):
|
||
|
if len(sys) > 1:
|
||
|
raise NotImplementedError # TODO: syscall hander with std pipes to run multiple miners at once. subprocess.Popen?
|
||
|
if 'xmr' in sys:
|
||
|
p = Popen('./xmr-stak-rx --currency monero --config config.txt --noDevSupport --noTest', shell=True, stdout=PIPE, stderr=PIPE, stdin=stdin)
|
||
|
o, _ = p.communicate()
|
||
|
print(o.decode('utf-8'))
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
from sys import argv
|
||
|
main(argv[1:])
|
||
|
|