Build your own Ethereum Mining Rig, part 2: Linux Setup

In this second installment of our DIY Ethereum mining guide, we’ll look at how to install and configure Linux to setup your rig as an automated, remotely-manageable appliance. Don’t be dissuaded if you’ve never used Linux before—our step-by-step guide makes it simple!

Why Linux over Windows? First, it’s free—and saving ~$100 on the operating system is a big plus when you’re trying to maximize profitability. Other reasons include lesser hardware requirements (Linux is perfectly happy running from a USB stick plugged into ancient hardware!), simpler remote administration capabilities, and oftentimes better stability. The downside of running Linux is that video driver support isn’t on the same level as Windows, and things like GPU undervolting are trickier (but still possible via BIOS mods).

If you missed the hardware portion of our guide, make sure to check it out first. Otherwise, read on.

Build an Ethereum Mining Rig, part 2:  Linux Setup

The following is heavily adapted from my original 2013 Litecoin mining guide, updated for the latest Xubuntu LTS version, the new AMDGPU-PRO drivers, and necessary ethereum mining software. If you’re a bit nervous because you’ve a complete Linux newbie, don’t be. Simply follow the step-by-step instructions exactly as they’re written, and you’ll be fine. Even if you’ve never done anything like this before, you should be up and running in roughly an hour.

Step 1: Configure BIOS settings

Before we even get to Linux, let’s take a minute to make sure that your mining computer’s BIOS settings are in order. Power on your computer, and press the “delete” key a few times immediately after power on. You should end up in the BIOS configuration area. Do the following, then save & exit:

  • Change power options so that the computer automatically turns itself on whenever power is restored. The reason for this is two-fold: first, it’ll make sure that your miner automatically starts up after a power outage. Second, it makes powering the computer on much easier if you don’t happen to have a power switch connected to the motherboard.
  • Make sure that your USB stick is first in the boot-up order (you may need to have a USB stick attached).
  • Disable all components that you don’t plan to use. This may save a little bit of power, and since your miner will likely be running 24/7, it’ll add up. For me, that meant disabling onboard audio, one of the SATA controllers, the USB 3.0 ports (I only had a 2.0 USB stick), the Firewire port, and the serial port.
  • If you’re running a lot of GPUs (4+), additional tweaks might be necessary to ensure that they’re all recognized by the OS. Exact tweaks vary by motherboard, but setting the PCIe speed to Gen1 is usually a good place to start. No need to change anything now, but make a mental note that you may need to come back and play around a bit if all of your GPUs don’t show up in the OS later.

Step 2: Install Xubuntu Desktop on your miner

Xubuntu is a lightweight version of Ubuntu, a popular Linux distribution. Most other distros should work just fine, but be aware that the GPU drivers require the presence of Xorg, which means server distros that don’t have a GUI will not work properly.

  • Xubuntu 16.04.2 is the latest LTS release at the time of this guide, so that is what I recommend you use. You can download it here.
  • You’ll need to either write the installation ISO image to a USB stick (highly recommended), or burn it to a DVD. If you use a DVD, you’ll need to temporarily hook up a DVD drive to your mining rig for the installation (make sure you temporarily enable your SATA controller if you disabled it in step 1!).
  • Once you have the installation media prepared, you’re ready to install Xubuntu to your miner’s boot device (whether it’s an SSD, mechanical harddrive, or another blank USB stick). Boot using your new installation media (make sure it’s first in your miner’s BIOS boot order list). The Xubuntu installer should appear.
  • Follow the prompts, and make sure to click the “auto-login” box on the last step of the installer (otherwise, all of the default options are fine).
  • When the installation is complete, you should automatically boot into the Xubuntu desktop. Make sure to remove your installation media.

Step 3: Install SSH and package updates

At the Xubuntu desktop, press CTRL+ALT+T to open a terminal window.

  • Install SSH by typing:
    sudo apt-get install openssh-server

With SSH installed, you can unplug the keyboard/mouse/monitor from your miner, and complete the rest of the installation from your desktop computer. Simply download Putty onto your desktop, run it, and enter the IP address of your mining rig (type ifconfig at the Xubuntu terminal to find your miner’s address if you don’t know it—it will probably look like 192.168.0.x). That should bring up a remote terminal session to your miner, which is more or less just like sitting at the keyboard in front of it.

If you plan to manage your mining rig remotely over the internet, you’ll need to forward port 22 on your router to your miner. Make sure that you use a strong Xubuntu password!

Setup should be pretty quick from this point, as now you can simply copy text from this webpage (highlight it and press CTRL+C) and then paste it into your Putty session by simply right-clicking anywhere inside the Putty window. I highly recommend that you complete the remainder of the guide in this manner, as it eliminates the risk of typos!

  • Install package updates by typing (or copying & pasting via right-click into Putty) the following command (8/14/2017: skip the following command until this known issue has been resolved):
    sudo apt-get dist-upgrade

Step 4: Install AMDGPU-PRO drivers

Next up, we’ll install AMD’s video drivers. I tested several versions and found that the latest release (17.10 as of 6/9/2017) gives the best performance. So that’s what we’ll use.

  • Type the following commands (press “enter” and wait for the operation to complete at the end of each line):
    cd ~/Downloads
    wget --referer=http://support.amd.com https://www2.ati.com/drivers/linux/ubuntu/amdgpu-pro-17.10-414273.tar.xz
    tar -Jxvf amdgpu-pro-17.10-414273.tar.xz
    cd amdgpu-pro-17.10-414273
    ./amdgpu-pro-install -y
  • Some of these steps may take a minute or two to complete. When the installation is complete, type the following:
    sudo usermod -a -G video $LOGNAME
    sudo reboot

The second command will reboot your rig, which will cause you to immediately lose your SSH (Putty) connection. Wait a few seconds to give the computer a chance to boot, and then re-establish a new connection via Putty, and re-login.

Step 5: Install Ethereum software

Next up, we’ll install the Ethereum software that will let us create a new wallet address. We’ll need this to store the coins we receive from mining.

  • Type the following to install the necessary ethereum packages:
    sudo add-apt-repository ppa:ethereum/ethereum
    sudo apt-get update
    sudo apt-get install ethereum geth
    
  • Now it’s time to create your Ethereum wallet address:
    geth account new

You’ll be prompted to enter a password, and then to confirm it (use a strong password!). The output will be a long string between two curly braces { }. That’s your new wallet address—make a note of it (highlight it within Putty to copy it to your clipboard).

Important: The combination of the password you just used to create this address *and* the associated encrypted key file is what gives you control over your new wallet address. If you lose either of these, you’ve also lost control of your wallet and all of the coins associated with it—and there is literally nothing that anyone will be able to do to help you. Remember your password, and keep multiple backups of your key file(s)!

Your key file(s) are stored in the ~/.ethereum/keystore directory. Copy the entire /keystore folder someplace safe to backup your wallet (I’ll cover backups in detail in a later section of this guide).

If you ever forget your wallet address, you can type geth account list to see your addresses and the location of their key files.

Step 6: Install Claymore’s Ethereum miner

There are several options as far as mining software, and I’ve experimented with all of the popular ones. I think Claymore’s miner is the best option, even if it does have two fairly significant downsides: it’s closed-source, and it’s not free (~1% of your mining time benefits the creator of the miner).

Two alternatives are the stock ethereum miner (ethminer) and Genoil’s fork of the stock miner. They’re both open-source and free, but they have pretty crippling downsides.

The stock ethminer is much slower than Claymore’s miner (by a margin of over 5% on my test rig). In addition, ethminer creates the Ethereum DAG file on disk instead of in GPU memory, which is slow and uses a lot of space (and if you’re running off a USB stick, all those writes may eventually wear it out).

Genoil’s fork seems to be nearly as fast as Claymore’s, and it doesn’t use physical disk space for the DAG, but it’s not stable (at least not for me). It often crashes, especially on startup (whereas I have yet to see a single crash on Claymore’s miner after nearly a week of full-time mining). The author abandoned development months ago, so improvements are unlikely.

So, explanation aside, here is how to setup Claymore’s miner:

  • First return to your downloads directory and grab the latest version (9.5 as of 6/9/2017):
    cd ~/Downloads
    wget https://github.com/nanopool/Claymore-Dual-Miner/releases/download/v9.5/Claymore.s.Dual.Ethereum.Decred_Siacoin_Lbry_Pascal.AMD.NVIDIA.GPU.Miner.v9.5.-.LINUX.tar.gz
    
  • Then create a new directory for it, and unpack it there:
    sudo mkdir /usr/local/claymore95
    sudo tar -xvf Claymore.s.Dual.Ethereum.Decred_Siacoin_Lbry_Pascal.AMD.NVIDIA.GPU.Miner.v9.5.-.LINUX.tar.gz -C /usr/local/claymore95
    
  • Then let’s head over to the installation directory and create a startup script:
    cd /usr/local/claymore95
    sudo chmod u+s ethdcrminer64
    sudo nano mine.sh
    
  • Nano will open a new blank text file; enter the following into it:
    #!/bin/sh
    export GPU_MAX_ALLOC_PERCENT=100
    ./ethdcrminer64 -epool us1.ethermine.org:4444 -ewal YOUR_WALLET_ADDRESS.Miner01 -epsw x -mode 1 -tt 68 -allpools 1
    

    Where it says YOUR_WALLET_ADDRESS, use the address you created in step 5 (you’ll need to put “0x” in front of it). The “Miner01” following your address can be changed to any friendly label that you want to give your miner (only important if you plan to run multiple rigs). It’s easiest to copy the last line from my guide into something like notepad, then replace YOUR_WALLET_ADDRESS with your actual address there, and then copy the finished line into putty via right-click to get everything into nano without typos.

  • Save the file and quit nano by pressing CTRL+X and then answering (Y)es to save the changes, then enter the following to give your new script execute permission:
    sudo chmod +x mine.sh

Note that I’m using ethermine.org as the mining pool here. It’s a fairly typical ETH pool that seems to have good reliability, but feel free to pick your own pool. Most don’t require registration, and simply payout to whatever wallet address you supply whenever a certain threshold is met (usually whenever you accumulate 1+ ETH). Assuming you stick with ethermine.org, you’ll be able to check on your miner’s status by going to this URL after you start mining: https://ethermine.org/miners/[YOUR WALLET ADDRESS]

  • Now is a good time to test things. You can fire up your miner by typing:
    ./mine.sh

You should see the Claymore miner start up. It’ll take a minute or two before it actually starts mining, but it should get there eventually. When you see a scrolling log of outputs that includes non-zero hashrates (expect hashrates in the low to mid 20s for unoptimized GPUs), you’re good to go. If the script fails to start, or you see errors, make sure that you’ve created the script exactly as outlined in the guide.

Press CTRL+C to exit the miner when you’re satisfied that it’s working.

Step 7: Create auto-start scripts

We’re almost done! We want to set up our rigs automatically start mining whenever the rig is powered on. That way, we keep mining losses to a minimum whenever a power outage occurs, and we don’t have to worry about manually starting it back up in other situations.

  • First, install screen:
    sudo apt install screen
  • Then type the following to create a new script in your home directory and open it in nano:
    cd ~
    sudo nano miner_launcher.sh
  • Enter the following text into the editor (substitute your actual Xubuntu username for YOUR_XUBUNTU_USERNAME where necessary!):
    #!/bin/bash
    DEFAULT_DELAY=0
    if [ "x$1" = "x" -o "x$1" = "xnone" ]; then
       DELAY=$DEFAULT_DELAY
    else
       DELAY=$1
    fi
    sleep $DELAY
    cd /usr/local/claymore95
    su YOUR_XUBUNTU_USERNAME -c "screen -dmS ethm ./mine.sh"
  • Save and quit nano (CTRL+X), and then type:
    sudo chmod +x miner_launcher.sh
  • Now we need to call our new script during startup; we do that by adding it to /etc/rc.local. Type the following to open /etc/rc.local in nano:
    sudo nano /etc/rc.local
  • Add the following text, right above the line that reads “exit 0” (substitute your own username!):
    /home/YOUR_XUBUNTU_USERNAME/miner_launcher.sh 15 &

Then save and quit out of nano (CTRL+X).

Step 8: Create an alias to easily check on the Claymore miner process

We’re essentially done at this point, but you’ll probably want to manually SSH into your miner from time to time to manually check on your hashrates & GPU temperatures, etc. Creating an alias will make that easy.

  • Type:

    sudo nano .bashrc
  • Scroll to the end of the file, and then add this text above the line that reads “# enable programmable completion…”
    alias miner='screen -x ethm'
  • Save and quit out of nano.

That’s it—you’re done! You’ll probably want to run a full test now. The easiest way to do that is to close your Putty session and power down your miner. Turn it back on and the following should happen:

  1. Your miner should boot into Xubuntu. This may take up to a minute, depending on the speed of your boot device (it’ll be much faster on an SSD).
  2. 15 seconds after Xubuntu has loaded, the Claymore miner will automatically start and begin mining. You might notice the fans on your GPUs spin up a bit when this happens.
  3. You should be able to SSH into your miner at any time and type miner to monitor the miner’s process. To close the screen (but keep the miner running), press CTRL+A, then CTRL+D.
  4. If you ever need to start the Claymore miner manually (because you quit out of it, or kill it, etc), simply type ~/miner_launcher.sh

Output from a single budget RX 470 at stock settings running Claymore’s ETH miner. You should see something like this when connecting to your rig via SSH and running your “miner” alias.

Congratulations—you have your own headless linux ethereum miner!

The next section of this guide covers setup under Windows, and then we’ll take a look at optimizing miner settings for better performance.

419 Responses to Build your own Ethereum Mining Rig, part 2: Linux Setup

  1. HTT says:

    A real real fantastic tutorial and overview of the situation. There are always new things happening in hardware or driver or software, but I wished to had this 1-2 years before.

    But I want to give some addons:
    A normal windows 7 or 10 is about € 35,- / USD 50,- (HP, DELL whatever labeled).
    The cost of windows should not be the reason for taking linux.
    And yes, the windows driver out of the box and all tweaking and OC is much more easy with windows (for the start).

    But think a bit bigger:
    1000x Rigs => 1000x Windows Updates on the update day and maybe 1000x problems on same time. You need ActiveDirectory (AD) and much more managing.

    If you are once a bit more dedicated to linux (just 2-3%) and you mastered your first little scripts and cronjobs without any gui or desktop, then you will see, feel and like the advantages.
    1000x Linux Rig. 1x Test, 2x Test -> Distribute with own little stop all, copy all (or synch) and start all scripting.

    And last but not least: On our linux machines we use Genoil with no problems. The undervolting and overclocking of the needed parts was very hard to find out on linux (for me) because never needed such action before on a linux machine. LAMP is more easy for me, because using it since 20 years 😉

    And ethminer is creating the DAG on disk? Really? Always?
    Never tested around with it again, after the hashrate was 5-10% lower for me on a Ubuntu (CL, not GUI!)

    Great informations. Great overview. Great step-by-step.
    THANK YOU!

  2. Dave78704 says:

    Thank you for this great article on how to min Ether.
    I got mine running in one hour. I have a PC with two AMD RX580
    the setup so far only see one video card. I have looked on the internet about enabling the second RX580 for mining but I can not find a definitive answer.
    I would appreciate if you could give some pointer to run XUBUNTU with two AMD GPU with Claymore miner. Thank you

    Dave78701

    • deadman.walking says:

      Just follow this linux guide, it can run from 1 to 12 GPUs with no problem, no more steps nor secret commands, even if you add more cards later, just turn off, plug the new GPU ans restart the rig, when claymore start it autodetect all the GPUs plugged in

      • Dave78704 says:

        I changed the BIOS to GEN3 for PCI slots. I uninstalled and reinstalled AMDgpu-pro 17.x but it is still only see one AMD video
        lspci | grep VGA
        01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Device 67df (rev e7)

        dpkg -l amdgpu-pro
        Desired=Unknown/Install/Remove/Purge/Hold
        | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
        |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
        ||/ Name Version Architecture Description
        +++-=======================-================-================-====================================================
        ii amdgpu-pro 17.30-465504 amd64 Meta package to install amdgpu Pro components.

        Any pointer would be greatly appreciated
        Thank you in advance

        • deadman.walking says:

          Install only 1 GPU first, change PCI-E to gen 1, if everything goes fine, then add the second GPU, rinse ando repeat… Stick to PCI-E gen 1 to assure compatibility, you won’t get any extra benefit from gen 2 nor 3 in cryptomining

        • deadman.walking says:

          Was thinking about your issue, but you don’t mention what motherboard are you using, nor how many GPUs are you trying to install, few motherboards are more than 2 GPU compatible. Have properly powered PCI-E risers? (no more than 2 risers per PSU cable).
          Use the drivers install commands as follows:

          cd ~/Downloads
          wget –referer=http://support.amd.com https://www2.ati.com/drivers/linux/ubuntu/amdgpu-pro-17.10-414273.tar.xz
          tar -Jxvf amdgpu-pro-17.10-414273.tar.xz
          cd amdgpu-pro-17.10-414273
          ./amdgpu-pro-install -y

          Please post your results

  3. Moisés says:

    Amazing post, thanks for it.

    Question, is there anything else needed?
    I ask bacause I tried to check my balance after 4 days in https://etherchain.org/, also in console with “geth console” then “eth.getBalance(eth.coinbase)”, both times was 0.

    As I red, the payout comes only when I reach 1ETH.. so it’s gone take sometime, but I want to be sure that it will come. Is there anything else missing at all in the set up?

    Again, thanks for the amazing post.

    • deadman.walking says:

      You can check your balance in https://ethermine.org/ only if you are using that pool as described in the guide, you must input your wallet number in the balance page, as you say, only can get your ethereum transfered if you have more than 1 ethereum in pool balance

    • RobertMiner says:

      Hello,

      You didn’t say, but I believe you have to be synced on Geth before you can check you Wallet Balance.

      • deadman.walking says:

        To check how much the pool owes you before transferring the balance to your wallet, go to https://ethermine.org/ (if it’s the pool of your choice as in the guide), if you want to veryfy how much ethereum is actually in your wallet, then you check it in https://etherchain.org/ and as RobertMiner wrote, you must first sync your wallet (it takes like half day to be sync)

  4. Aleks says:

    Hey Guys!

    I’ve just picked up 2 x Sapphire RX Vega 64s.
    I can’t seem to get the Miner to recognize the cards at all.

    Does the Claymore miner not support them yet?
    Any feedback / help would be great.

    Thankyou!

    • Anonymous says:

      Did you try Claymore version 9.8? That’s supposed to support Vega cards.

      • Aleks says:

        Hey mate.

        Yes I did.
        I run all my other rigs on Claymore 9.8, with no issues.

        This Vega card has absolutely zero response.
        I’m going to try switch the motherboard & see if there is a change.

        What’s the next best option for mining Ethereum (in terms of a miner?)
        Or if anyone else has any feedback / ideas / guidance – would be awesome!

        Thanks in advance for the help 🙂

        Regards,
        Aleks

  5. Robert T says:

    Has anyone tried the AMD Blockchain driver for Linux? People are saying they are getting better hashrates.

    https://bitcointalk.org/index.php?topic=2102129.0

  6. Dave 78704 says:

    Hey, Sorry too so long to reply.
    I am running MSI Z87-GD65 Gaming motherboard with Pentium G3220 Haswell Dual-Core 3.0 GHz LGA 1150. It has 8 Gb RAM.
    I forgot to connect the power 8 pins connector to the second GPU, so It is working now but the Hash Rate for both GPU has dropped to 18 Mh/sec, It was running 23 Mh/sec with one GPU so I would expect to have 46Mh/sec with two.
    Both GPU are directly connected to the motherboard so it should be reliable without riser

    Thank you again for all your pointers
    Cheers!

  7. Dave 78704 says:

    I changed the PCI setting latency to 128 and GEN3 in the BIOS. Now my the two GPU running 46 Mh/sec 🙂
    my rig is running well !
    Thank you very much for your expertise!

  8. Louise says:

    I’m having trouble with the ./mine command.
    I appreciate any help pointing me in the right direction.

    This is what pops up when I enter it:

    This pool (eth-us-east1.nanopool.org) does not support Ethereum addresses as login (or requires worker name in “Login.Worker” format) and cannot be used for devfee mining, therefore it is not supported.
    However, you can mine on this pool if you specify “-allpools 1” option, default pools (different from this pool) will be used for devfee.
    Please read “Readme” file for details.This pool (eth-us-east1.nanopool.org) does not support Ethereum addresses as login (or requires worker name in “Login.Worker” format) and cannot be used for devfee mining, therefore it is not supported.
    However, you can mine on this pool if you specify “-allpools 1” option, default pools (different from this pool) will be used for devfee.
    Please read “Readme” file for details.Pool eth-us-east1.nanopool.org removed from the list
    ETH: 1 pool is specified
    Main Ethereum pool is us1.ethermine.org:4444
    Invalid MIT-MAGIC-COOKIE-1 keyNo AMD cards in the list.
    No NVIDIA CUDA GPUs detected.
    No AMD OPENCL or NVIDIA CUDA GPUs found, exit

  9. ealmeidaon says:

    Helo… tks a lot for your tutorial. Its amazing.
    I need help…

    fo me appear this erro msg:
    XXXXXXXXXXXXXXXX:/usr/local/claymore95$ ./mine.sh
    ./ethdcrminer64: error while loading shared libraries: libOpenCL.so.1: cannot open shared object file: No such file or directory

  10. Dogman says:

    How would I go about sending coins from the wallet that is created in the process that you have described to a wallet I already have elsewhere?

    And / or

    Can I enter an address eith say ‘coinbase’ and deposit my earning directly to that address?

    Thanks
    (Complete newbie)

  11. Alex says:

    Followed these steps to the letter and keep getting:
    amdgpu_device_initialize: DRM version is 2.49.0 but this driver is only compatible with 3.x.x.

    I’m using Radeon HD7950. Any advise?

  12. hellsen says:

    Thanks for the article. Especially step 7 and 8 really helped at all.
    Kepp writing this way! Greetings

  13. bomberb17 says:

    I have 4x Rx470 running Claymore v.9.0, only for Ethereum mining.
    I have observed that their hashrate is slowly decreasing over time.
    I remember back 3 months ago they were at 28Mh/s each, now they are at 25Mh/s each (without changing anything on my configuration of course).
    Here’s how I run Claymore:
    Code:

    ./ethdcrminer64 -epool eu2.ethermine.org:4444 -ewal -epsw x -mode 1 -tt 68 -allpools 1

    I’m running Ubuntu 16.04 – AMD drivers 16.60

    • Frank says:

      Claymore miner is at version 10 now. Might want to update. I had issues until I updated.

      • Anonymous says:

        Tested Claymore 10 but getting exactly the same results. I’ve seen somewhere that this is happening because of the increasing DAG, are you getting decreasing hashrates as well?

Leave a Reply

Your email address will not be published.