add ethminer
This commit is contained in:
parent
08ec3c079d
commit
92a1044b2a
7 changed files with 245 additions and 1 deletions
|
@ -31,7 +31,6 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
#nixpkgs.config.allowBroken = true;
|
#nixpkgs.config.allowBroken = true;
|
||||||
|
|
||||||
hardware.opengl = {
|
hardware.opengl = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraPackages = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
|
|
2
images/etherminer/.gitignore
vendored
Normal file
2
images/etherminer/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
parameters.nix
|
||||||
|
*.iso
|
16
images/etherminer/README.md
Normal file
16
images/etherminer/README.md
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# How to build
|
||||||
|
|
||||||
|
`cp parameters.nix.sample parameters.nix` and set file up.
|
||||||
|
|
||||||
|
```
|
||||||
|
nixos-generate \
|
||||||
|
-f iso \
|
||||||
|
-c configuration.nix \
|
||||||
|
-o image.iso \
|
||||||
|
```
|
||||||
|
|
||||||
|
# How to create USB-Stick
|
||||||
|
|
||||||
|
```
|
||||||
|
dd if=./image.iso of=/dev/sdXY bs=4096
|
||||||
|
```
|
52
images/etherminer/configuration.nix
Normal file
52
images/etherminer/configuration.nix
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# $ nixos-generator -f iso -c configuration.nix -o image.iso
|
||||||
|
{ pkgs, lib, ... }:
|
||||||
|
let
|
||||||
|
parameters = import ./parameters.nix;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./ethminer.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.overlays = [
|
||||||
|
(self: super: {
|
||||||
|
ethminer = super.lib.callPackageWith super ./ethminer-pkg.nix {
|
||||||
|
cudaSupport = true;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
# allow un-free
|
||||||
|
# -------------
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
environment.variables.NIXPKGS_ALLOW_UNFREE = "1";
|
||||||
|
|
||||||
|
time.timeZone = lib.mkDefault "Europe/Berlin";
|
||||||
|
|
||||||
|
networking.wireless = {
|
||||||
|
enable = true;
|
||||||
|
networks."${parameters.ssid}".psk = parameters.password;
|
||||||
|
};
|
||||||
|
|
||||||
|
# configure ethminer
|
||||||
|
own.services.ethminer = {
|
||||||
|
enable = true;
|
||||||
|
pool = "eu1.ethermine.org";
|
||||||
|
wallet = parameters.wallet;
|
||||||
|
rig = "usb-stick";
|
||||||
|
};
|
||||||
|
|
||||||
|
hardware.opengl = {
|
||||||
|
enable = true;
|
||||||
|
#extraPackages = with pkgs; [];
|
||||||
|
driSupport = true;
|
||||||
|
driSupport32Bit = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
go-ethereum
|
||||||
|
i7z # check temperature
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
64
images/etherminer/ethminer-pkg.nix
Normal file
64
images/etherminer/ethminer-pkg.nix
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
{ lib, stdenv, clangStdenv, fetchFromGitHub, opencl-headers, cmake, jsoncpp
|
||||||
|
, boost, makeWrapper, cudatoolkit, cudaSupport, mesa, ethash, opencl-info
|
||||||
|
, ocl-icd, openssl, pkg-config, cli11 }@args:
|
||||||
|
|
||||||
|
# Note that this requires clang < 9.0 to build, and currently
|
||||||
|
# clangStdenv provides clang 7.1 which satisfies the requirement.
|
||||||
|
let stdenv = if cudaSupport then clangStdenv else args.stdenv;
|
||||||
|
|
||||||
|
in stdenv.mkDerivation rec {
|
||||||
|
pname = "ethminer";
|
||||||
|
version = "0.19.0";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "ethereum-mining";
|
||||||
|
repo = "ethminer";
|
||||||
|
rev = "v${version}";
|
||||||
|
sha256 = "1kyff3vx2r4hjpqah9qk99z6dwz7nsnbnhhl6a76mdhjmgp1q646";
|
||||||
|
fetchSubmodules = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# NOTE: dbus is broken
|
||||||
|
cmakeFlags = [
|
||||||
|
"-DHUNTER_ENABLED=OFF"
|
||||||
|
"-DETHASHCUDA=ON"
|
||||||
|
"-DAPICORE=ON"
|
||||||
|
"-DETHDBUS=OFF"
|
||||||
|
"-DCMAKE_BUILD_TYPE=Release"
|
||||||
|
] ++ lib.optionals (!cudaSupport) [
|
||||||
|
"-DETHASHCUDA=OFF" # on by default
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeBuildInputs = [ cmake pkg-config makeWrapper ];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
cli11
|
||||||
|
boost
|
||||||
|
opencl-headers
|
||||||
|
mesa
|
||||||
|
ethash
|
||||||
|
opencl-info
|
||||||
|
ocl-icd
|
||||||
|
openssl
|
||||||
|
jsoncpp
|
||||||
|
] ++ lib.optionals cudaSupport [ cudatoolkit ];
|
||||||
|
|
||||||
|
preConfigure = ''
|
||||||
|
sed -i 's/_lib_static//' libpoolprotocols/CMakeLists.txt
|
||||||
|
'';
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
wrapProgram $out/bin/ethminer --prefix LD_LIBRARY_PATH : /run/opengl-driver/lib
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Ethereum miner with OpenCL${
|
||||||
|
lib.optionalString cudaSupport ", CUDA"
|
||||||
|
} and stratum support";
|
||||||
|
homepage = "https://github.com/ethereum-mining/ethminer";
|
||||||
|
platforms = [ "x86_64-linux" ];
|
||||||
|
maintainers = with maintainers; [ nand0p atemu ];
|
||||||
|
license = licenses.gpl3Only;
|
||||||
|
#broken = cudaSupport;
|
||||||
|
};
|
||||||
|
}
|
106
images/etherminer/ethminer.nix
Normal file
106
images/etherminer/ethminer.nix
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.own.services.ethminer;
|
||||||
|
poolUrl = "stratum1+tcp://${cfg.wallet}.${cfg.rig}@${cfg.pool}:${
|
||||||
|
toString cfg.stratumPort
|
||||||
|
}";
|
||||||
|
|
||||||
|
in {
|
||||||
|
|
||||||
|
###### interface
|
||||||
|
|
||||||
|
options = {
|
||||||
|
|
||||||
|
own.services.ethminer = {
|
||||||
|
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "Enable ethminer ether mining.";
|
||||||
|
};
|
||||||
|
|
||||||
|
recheckInterval = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 2000;
|
||||||
|
description = "Interval in milliseconds between farm rechecks.";
|
||||||
|
};
|
||||||
|
|
||||||
|
toolkit = mkOption {
|
||||||
|
type = types.enum [ "cuda" "opencl" ];
|
||||||
|
default = "cuda";
|
||||||
|
description = "Cuda or opencl toolkit.";
|
||||||
|
};
|
||||||
|
|
||||||
|
wallet = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
example = "0x0123456789abcdef0123456789abcdef01234567";
|
||||||
|
description = "Ethereum wallet address.";
|
||||||
|
};
|
||||||
|
|
||||||
|
pool = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
example = "eth-us-east1.nanopool.org";
|
||||||
|
description = "Mining pool address.";
|
||||||
|
};
|
||||||
|
|
||||||
|
stratumPort = mkOption {
|
||||||
|
type = types.port;
|
||||||
|
default = 4444;
|
||||||
|
description = "Stratum protocol tcp port.";
|
||||||
|
};
|
||||||
|
|
||||||
|
rig = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "rig01";
|
||||||
|
description = "Mining rig name.";
|
||||||
|
};
|
||||||
|
|
||||||
|
maxPower = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 113;
|
||||||
|
description = "Miner max watt usage.";
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
###### implementation
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
|
systemd.services.ethminer = {
|
||||||
|
path = [ pkgs.cudatoolkit ];
|
||||||
|
description = "ethminer ethereum mining service";
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "network.target" ];
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
DynamicUser = true;
|
||||||
|
ExecStartPre = "${pkgs.ethminer}/bin/.ethminer-wrapped --list-devices";
|
||||||
|
ExecStartPost = optional (cfg.toolkit == "cuda") "+${
|
||||||
|
getBin config.boot.kernelPackages.nvidia_x11
|
||||||
|
}/bin/nvidia-smi -pl ${toString cfg.maxPower}";
|
||||||
|
Restart = "always";
|
||||||
|
};
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
LD_LIBRARY_PATH = "${config.boot.kernelPackages.nvidia_x11}/lib";
|
||||||
|
};
|
||||||
|
|
||||||
|
script = ''
|
||||||
|
${pkgs.ethminer}/bin/.ethminer-wrapped \
|
||||||
|
--farm-recheck ${toString cfg.recheckInterval} \
|
||||||
|
--report-hashrate \
|
||||||
|
--${cfg.toolkit} \
|
||||||
|
--pool ${poolUrl}
|
||||||
|
'';
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
5
images/etherminer/parameters.nix.sample
Normal file
5
images/etherminer/parameters.nix.sample
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
ssid = "Your SSID";
|
||||||
|
password = "Your Password";
|
||||||
|
wallet = "Your ETH Wallet Address";
|
||||||
|
}
|
Loading…
Reference in a new issue