mirror of
https://github.com/GOSTSec/sgminer
synced 2025-03-10 12:41:02 +00:00
Merge pull request #80 from kanoi/master
Fix send() for JSON strings + HDD Install + API CPU code optional
This commit is contained in:
commit
6ab1f1c395
@ -214,7 +214,7 @@ int callapi(char *command, char *host, short int port)
|
||||
return 1;
|
||||
}
|
||||
|
||||
n = send(sock, command, strlen(command)+1, 0);
|
||||
n = send(sock, command, strlen(command), 0);
|
||||
if (SOCKETFAIL(n)) {
|
||||
printf("Send failed: %s\n", SOCKERRMSG);
|
||||
ret = 1;
|
||||
|
58
api.c
58
api.c
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2011 Andrew Smith
|
||||
* Copyright 2011-2012 Andrew Smith
|
||||
* Copyright 2011-2012 Con Kolivas
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
@ -150,7 +150,11 @@ static const char SEPARATOR = '|';
|
||||
#define _SUMMARY "SUMMARY"
|
||||
#define _STATUS "STATUS"
|
||||
#define _VERSION "VERSION"
|
||||
|
||||
#ifdef WANT_CPUMINE
|
||||
#define _CPU "CPU"
|
||||
#endif
|
||||
|
||||
#define _GPU "GPU"
|
||||
#define _CPUS "CPUS"
|
||||
#define _GPUS "GPUS"
|
||||
@ -170,7 +174,11 @@ static const char ISJSON = '{';
|
||||
#define JSON_STATUS JSON1 _STATUS JSON2
|
||||
#define JSON_VERSION JSON1 _VERSION JSON2
|
||||
#define JSON_GPU JSON1 _GPU JSON2
|
||||
|
||||
#ifdef WANT_CPUMINE
|
||||
#define JSON_CPU JSON1 _CPU JSON2
|
||||
#endif
|
||||
|
||||
#define JSON_GPUS JSON1 _GPUS JSON2
|
||||
#define JSON_CPUS JSON1 _CPUS JSON2
|
||||
#define JSON_BYE JSON1 _BYE JSON1
|
||||
@ -195,10 +203,14 @@ static const char *JSON_PARAMETER = "parameter";
|
||||
#define MSG_GPUREI 13
|
||||
#define MSG_INVCMD 14
|
||||
#define MSG_MISID 15
|
||||
#define MSG_CPUNON 16
|
||||
#define MSG_GPUDEV 17
|
||||
|
||||
#ifdef WANT_CPUMINE
|
||||
#define MSG_CPUNON 16
|
||||
#define MSG_CPUDEV 18
|
||||
#define MSG_INVCPU 19
|
||||
#endif
|
||||
|
||||
#define MSG_NUMGPU 20
|
||||
#define MSG_NUMCPU 21
|
||||
#define MSG_VERSION 22
|
||||
@ -219,7 +231,11 @@ enum code_parameters {
|
||||
PARAM_GPUMAX,
|
||||
PARAM_CPUMAX,
|
||||
PARAM_PMAX,
|
||||
#ifdef WANT_CPUMINE
|
||||
PARAM_GCMAX,
|
||||
#else
|
||||
PARAM_GMAX,
|
||||
#endif
|
||||
PARAM_CMD,
|
||||
PARAM_NONE
|
||||
};
|
||||
@ -238,26 +254,33 @@ struct CODES {
|
||||
{ SEVERITY_ERR, MSG_GPUNON, PARAM_NONE, "No GPUs" },
|
||||
{ SEVERITY_SUCC, MSG_POOL, PARAM_PMAX, "%d Pool(s)" },
|
||||
{ SEVERITY_ERR, MSG_NOPOOL, PARAM_NONE, "No pools" },
|
||||
#ifdef WANT_CPUMINE
|
||||
{ SEVERITY_SUCC, MSG_DEVS, PARAM_GCMAX, "%d GPU(s) - %d CPU(s)" },
|
||||
{ SEVERITY_ERR, MSG_NODEVS, PARAM_NONE, "No GPUs/CPUs" },
|
||||
#else
|
||||
{ SEVERITY_SUCC, MSG_DEVS, PARAM_GMAX, "%d GPU(s)" },
|
||||
{ SEVERITY_ERR, MSG_NODEVS, PARAM_NONE, "No GPUs" },
|
||||
#endif
|
||||
{ SEVERITY_SUCC, MSG_SUMM, PARAM_NONE, "Summary" },
|
||||
{ SEVERITY_INFO, MSG_GPUDIS, PARAM_GPU, "GPU %d set disable flag" },
|
||||
{ SEVERITY_INFO, MSG_GPUREI, PARAM_GPU, "GPU %d restart attempted" },
|
||||
{ SEVERITY_ERR, MSG_INVCMD, PARAM_NONE, "Invalid command" },
|
||||
{ SEVERITY_ERR, MSG_MISID, PARAM_NONE, "Missing device id parameter" },
|
||||
{ SEVERITY_ERR, MSG_CPUNON, PARAM_NONE, "No CPUs" },
|
||||
{ SEVERITY_SUCC, MSG_GPUDEV, PARAM_GPU, "GPU%d" },
|
||||
#ifdef WANT_CPUMINE
|
||||
{ SEVERITY_ERR, MSG_CPUNON, PARAM_NONE, "No CPUs" },
|
||||
{ SEVERITY_SUCC, MSG_CPUDEV, PARAM_CPU, "CPU%d" },
|
||||
{ SEVERITY_ERR, MSG_INVCPU, PARAM_CPUMAX, "Invalid CPU id %d - range is 0 - %d" },
|
||||
#endif
|
||||
{ SEVERITY_SUCC, MSG_NUMGPU, PARAM_NONE, "GPU count" },
|
||||
{ SEVERITY_SUCC, MSG_NUMCPU, PARAM_NONE, "CPU count" },
|
||||
{ SEVERITY_SUCC, MSG_VERSION, PARAM_CPU, "CGMiner versions" },
|
||||
{ SEVERITY_SUCC, MSG_VERSION, PARAM_NONE, "CGMiner versions" },
|
||||
{ SEVERITY_ERR, MSG_INVJSON, PARAM_NONE, "Invalid JSON" },
|
||||
{ SEVERITY_ERR, MSG_MISSCMD, PARAM_CMD, "Missing JSON '%s'" },
|
||||
{ SEVERITY_FAIL }
|
||||
};
|
||||
|
||||
static const char *APIVERSION = "0.7";
|
||||
static const char *APIVERSION = "0.8";
|
||||
static const char *DEAD = "Dead";
|
||||
static const char *SICK = "Sick";
|
||||
static const char *NOSTART = "NoStart";
|
||||
@ -278,7 +301,9 @@ static char *message(int messageid, int gpuid, bool isjson)
|
||||
{
|
||||
char severity;
|
||||
char *ptr;
|
||||
#ifdef WANT_CPUMINE
|
||||
int cpu;
|
||||
#endif
|
||||
int i;
|
||||
|
||||
for (i = 0; codes[i].severity != SEVERITY_FAIL; i++) {
|
||||
@ -319,6 +344,7 @@ static char *message(int messageid, int gpuid, bool isjson)
|
||||
case PARAM_PMAX:
|
||||
sprintf(ptr, codes[i].description, total_pools);
|
||||
break;
|
||||
#ifdef WANT_CPUMINE
|
||||
case PARAM_GCMAX:
|
||||
if (opt_n_threads > 0)
|
||||
cpu = num_processors;
|
||||
@ -327,6 +353,11 @@ static char *message(int messageid, int gpuid, bool isjson)
|
||||
|
||||
sprintf(ptr, codes[i].description, nDevs, cpu);
|
||||
break;
|
||||
#else
|
||||
case PARAM_GMAX:
|
||||
sprintf(ptr, codes[i].description, nDevs);
|
||||
break;
|
||||
#endif
|
||||
case PARAM_CMD:
|
||||
sprintf(ptr, codes[i].description, JSON_COMMAND);
|
||||
break;
|
||||
@ -423,6 +454,7 @@ void gpustatus(int gpu, bool isjson)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef WANT_CPUMINE
|
||||
void cpustatus(int cpu, bool isjson)
|
||||
{
|
||||
char buf[BUFSIZ];
|
||||
@ -448,6 +480,7 @@ void cpustatus(int cpu, bool isjson)
|
||||
strcat(io_buffer, buf);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void devstatus(SOCKETTYPE c, char *param, bool isjson)
|
||||
{
|
||||
@ -472,6 +505,7 @@ void devstatus(SOCKETTYPE c, char *param, bool isjson)
|
||||
gpustatus(i, isjson);
|
||||
}
|
||||
|
||||
#ifdef WANT_CPUMINE
|
||||
if (opt_n_threads > 0)
|
||||
for (i = 0; i < num_processors; i++) {
|
||||
if (isjson && (i > 0 || nDevs > 0))
|
||||
@ -479,6 +513,7 @@ void devstatus(SOCKETTYPE c, char *param, bool isjson)
|
||||
|
||||
cpustatus(i, isjson);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (isjson)
|
||||
strcat(io_buffer, JSON_CLOSE);
|
||||
@ -517,6 +552,7 @@ void gpudev(SOCKETTYPE c, char *param, bool isjson)
|
||||
strcat(io_buffer, JSON_CLOSE);
|
||||
}
|
||||
|
||||
#ifdef WANT_CPUMINE
|
||||
void cpudev(SOCKETTYPE c, char *param, bool isjson)
|
||||
{
|
||||
int id;
|
||||
@ -549,6 +585,7 @@ void cpudev(SOCKETTYPE c, char *param, bool isjson)
|
||||
if (isjson)
|
||||
strcat(io_buffer, JSON_CLOSE);
|
||||
}
|
||||
#endif
|
||||
|
||||
void poolstatus(SOCKETTYPE c, char *param, bool isjson)
|
||||
{
|
||||
@ -776,13 +813,18 @@ void gpucount(SOCKETTYPE c, char *param, bool isjson)
|
||||
void cpucount(SOCKETTYPE c, char *param, bool isjson)
|
||||
{
|
||||
char buf[BUFSIZ];
|
||||
int count = 0;
|
||||
|
||||
#ifdef WANT_CPUMINE
|
||||
count = opt_n_threads > 0 ? num_processors : 0;
|
||||
#endif
|
||||
|
||||
strcpy(io_buffer, message(MSG_NUMCPU, 0, isjson));
|
||||
|
||||
if (isjson)
|
||||
sprintf(buf, "," JSON_CPUS "{\"Count\":%d}" JSON_CLOSE, opt_n_threads > 0 ? num_processors : 0);
|
||||
sprintf(buf, "," JSON_CPUS "{\"Count\":%d}" JSON_CLOSE, count);
|
||||
else
|
||||
sprintf(buf, _CPUS ",Count=%d%c", opt_n_threads > 0 ? num_processors : 0, SEPARATOR);
|
||||
sprintf(buf, _CPUS ",Count=%d%c", count, SEPARATOR);
|
||||
|
||||
strcat(io_buffer, buf);
|
||||
}
|
||||
@ -814,7 +856,9 @@ struct CMDS {
|
||||
{ "gpudisable", gpudisable },
|
||||
{ "gpurestart", gpurestart },
|
||||
{ "gpu", gpudev },
|
||||
#ifdef WANT_CPUMINE
|
||||
{ "cpu", cpudev },
|
||||
#endif
|
||||
{ "gpucount", gpucount },
|
||||
{ "cpucount", cpucount },
|
||||
{ "quit", doquit },
|
||||
|
@ -12,6 +12,14 @@ The copy in cgminer (check to make sure it isn't older) is:
|
||||
The original old verion on bitcointalk is:
|
||||
https://bitcointalk.org/index.php?topic=28402.msg426741#msg426741
|
||||
|
||||
========
|
||||
|
||||
I have said to select English for the install process for 2 reasons:
|
||||
1) I don't know any other spoken language very well
|
||||
and
|
||||
2) I'm not sure what problems installing under a different language
|
||||
might cause (it will probably cause no problems but I don't know)
|
||||
|
||||
Software
|
||||
========
|
||||
Short hardware comment:
|
||||
@ -19,7 +27,10 @@ Your mining computer doesn't need any HDD or CD/DVD/BD as long as it has at
|
||||
least 2GB of RAM, can boot USB, has some network connection to the internet
|
||||
and of course a reasonable mining ATI graphics card
|
||||
... Or you can boot a windows PC with the USB to only do mining ... and ignore
|
||||
the system HDD ... wasting energy running the HDD :)
|
||||
the system HDD ... wasting energy running the HDD (roughly 10 Watts per HDD) :)
|
||||
|
||||
If you wish to install to an HDD instead of a USB,
|
||||
see the changes to the instructions at the end
|
||||
|
||||
To create the USB, you need of course a 4GB USB and temporarily need a PC
|
||||
with a CD (or DVD/BD) writer, a USB port and of course an internet
|
||||
@ -30,6 +41,9 @@ connection to the PC
|
||||
|
||||
2) Burn it to CD then boot that temporarily on any PC with a CD/DVD/BD and
|
||||
a USB port (this and the next 2 step won't effect that PC)
|
||||
Select "English" then select "Try Xubuntu without installing"
|
||||
and wait for the desktop to appear
|
||||
(this happens by default if you wait for the timeouts)
|
||||
|
||||
3) Plug in your 4GB USB device and it should appear on the desktop - you can
|
||||
leave it's contents as long as there is at least 2.8GB free
|
||||
@ -205,3 +219,87 @@ The fix is to simply link the old curses library to the new name e.g.:
|
||||
|
||||
cd /lib64/
|
||||
sudo ln -s libncurses.so.5 libtinfo.so.5
|
||||
|
||||
========
|
||||
|
||||
If you wish to install to an HDD instead of a USB:
|
||||
--------------------------------------------------
|
||||
|
||||
As per before:
|
||||
|
||||
1) Download the xubuntu 11.04 desktop live CD iso for amd64
|
||||
( look here for mirrors: http://www.xubuntu.org/getubuntu )
|
||||
|
||||
Then:
|
||||
|
||||
2) Burn it to CD then boot that on your new mining PC
|
||||
Select "English" then select "Install Xubuntu"
|
||||
(you have 30 seconds to do this)
|
||||
|
||||
3) When the Install window comes up - again select "English" and click "Forward"
|
||||
|
||||
4) The next page will show you if you meet certain install requirements
|
||||
(make sure you do meet them all)
|
||||
Don't select the download option
|
||||
The 3rd party option isn't needed for mining so ignore that also
|
||||
|
||||
Click "Forward"
|
||||
|
||||
5) With "Allocate drive space" it's probably easiest to say to use the
|
||||
"Erase" option.
|
||||
|
||||
This is just for mining right? :)
|
||||
|
||||
However, if you have anything on the HDD that you want to keep - the
|
||||
"Erase" install process will delete it - so back it up (quit the install)
|
||||
Also make sure there are no OTHER HDD attached that it may erase also
|
||||
i.e. only have attached the one HDD that you want to install onto unless
|
||||
you know exactly what you are doing
|
||||
|
||||
If you see the "Install Xubuntu 11.04 alongside 'something'" then that
|
||||
just means that the HDD wasn't blank.
|
||||
If you want to try this option - do that yourself and then skip to step
|
||||
7) below when you get to that.
|
||||
|
||||
There are plenty of other options available if you select "Something else"
|
||||
but I'm not going to go into all the details here other than to say that
|
||||
my preferred partioning is: /boot = 1GB = ext2, swap = twice memory size,
|
||||
/ = 100GB = ext3 and the rest: /extra = ext3
|
||||
|
||||
Click "Forward"
|
||||
|
||||
6) If you selected "Erase" then it allows you to choose the drive to install to
|
||||
Then click "Install Now"
|
||||
|
||||
7) "Where are you?" sort that out then click "Forward"
|
||||
|
||||
8) "Keyboard layout" sort that out (use the default) then click "Forward"
|
||||
|
||||
9) "Who are you?" The important one here is "Pick a username:" coz that's
|
||||
the name you will need to ssh into, to access it remotely (and of course
|
||||
the "Choose a Password" you set)
|
||||
|
||||
If you set the "username" to anything but "ubuntu" then: wherever in this
|
||||
document I have mentioned the username "ubuntu" you must of course use the
|
||||
username you chose here instead of "ubuntu"
|
||||
|
||||
Important: set it to "log in automatically" if you ever want to be able
|
||||
to start cgminer without being in front of the computer since 'X' must
|
||||
be running to use cgminer properly
|
||||
That does of course mean that the computer isn't secure from anyone who
|
||||
has access to it - but then again no computer that can automatically
|
||||
reboot is secure from anyone who has access to the actual computer itself
|
||||
|
||||
Then click "Forward"
|
||||
|
||||
10) Of course when it completes click on "Restart Now"
|
||||
... and remove the Xubuntu CD when it asks you
|
||||
|
||||
11) Wait for it to finish rebooting ... and it will auto login
|
||||
(unless you didn't do step 9) "Important:")
|
||||
|
||||
12) After it logs in, an upgrade popup for 11.10 (or later) will appear
|
||||
Select "Don't Upgrade"
|
||||
|
||||
13) Now go to step 6) of the USB script above for what to do next and that
|
||||
covers everything else needed
|
||||
|
Loading…
x
Reference in New Issue
Block a user