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 commands:
    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 (16.60 at the time of this guide) 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-16.60-379184.tar.xz
    tar -Jxvf amdgpu-pro-16.60-379184.tar.xz
    cd amdgpu-pro-16.60-379184
    ./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.0 at the time of this article):
    cd ~/Downloads
    wget https://github.com/nanopool/Claymore-Dual-Miner/releases/download/v9.0/Claymore.s.Dual.Ethereum.Decred_Siacoin_Lbry_Pascal.AMD.NVIDIA.GPU.Miner.v9.0.-.LINUX.tar.gz
    
  • Then create a new directory for it, and unpack it there:
    sudo mkdir /usr/local/claymore90
    sudo tar -xvf Claymore.s.Dual.Ethereum.Decred_Siacoin_Lbry_Pascal.AMD.NVIDIA.GPU.Miner.v9.0.-.LINUX.tar.gz -C /usr/local/claymore90
    
  • Then let’s head over to the installation directory and create a startup script:
    cd /usr/local/claymore90
    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. 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/claymore90
    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.

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

  1. sunshine says:

    THANKS and SOLUTION for small POOL-Problem:

    Thank you for your super-guide!

    It lasts four weeks to get all hardware (and still some gpu missing) and building the alu-case. Mounting and install was so fast, because of your very good explanation.

    I want to add a solution that worked for me: following your guide to create geth-account and participating at https://ethermine.org/ I had a little problem: I was mining a half day (successfully “Shares found and accepted by pool”) and at https://ethermine.org/miners/%5Bmy-eth-adress%5D nothing happened – there were no signs of my miningactivity.
    I thought a little bit and added a “0x” in front of my ether-adress.
    And magically now I see results and its working.

    Thank you again!

  2. Minerlai says:

    Every works out for me with the exception of the -tt command in claymore miner. I get an error message “Failed to set new fan speed, check if miner has root access!”

    a search via google didnt seems to return instructions on how to give root access to amd drivers.

    • CryptoBadger says:

      We give Claymore’s miner root privileges in step 6 with the “sudo chmod u+s ethdcrminer64” command. Try going back to your miner installation folder and entering that again.

      It’s not super important to set a fan speed target unless you’re keeping your miner somewhere where you can hear it. I find that 68C is the best balance between keeping things relatively cool, while also keeping the miner quiet enough to not be offensive (at least, once it’s undervolted). But the default fan speed setting should be ok too, if noise isn’t an issue for you.

  3. Asoul says:

    “and things like GPU undervolting are trickier (but still possible via BIOS mods).”

    Could you tell more detail about it? I use ubuntu and don’t know how to undervolt it. Thanks!

  4. Anonymous says:

    Thanks for all your work! It helped me get a small rig going! Any chance you might post instructions on how to mine ETC instead of ETH?

    • CryptoBadger says:

      Claymore’s miner supports ETC mining, so I believe that the only thing you’d need to do is replace the pool in your mine.sh script (step 6) with whatever ETC pool you want to use.

  5. napoleon says:

    >You should be able to SSH into your miner at any time and type miner to monitor the miner’s process

    I was unable to get this monitor command to work.

    Apart from that a smooth setup

  6. Charlie says:

    Hi there,
    awesome guide, thank you!
    For the longest time i see “Total Shares: 0”
    I am assuming this isn’t going well? Any ideas?

    • CryptoBadger says:

      You should see shares increasing over time, if they’re stuck at zero something is wrong. Can you take a screenshot of the output you see when Claymore starts up (everything from the initial launch to where you start seeing share messages)? You can use imgur.com to host your screenshot for free and link it here so we can take a look.

  7. Fabian says:

    Wow, it’s amazing. Thank You. I will try to build my rig with your advices.

  8. Dmytro says:

    Regarding Xubuntu version you’ve provided link for. This one is for AMD processor, if I understoof correctly. And if I have Intel processor shall I use 32-bit PC (i386) desktop image? Correct me if I am wrong.

    • CryptoBadger says:

      The link in the guide is for all 64-bit processors (the .iso filename has ‘AMD’ in it, so it can be a bit confusing). Definitely don’t get the 32-bit version, as the mining software requires a 64-bit OS.

  9. frank says:

    hoi i get following
    ./ethdcrminer64: error while loading shared libraries: libOpenCL.so.1: cannot open shared object file: No such file or directory
    I didnt install amd pro driver
    The last time i did i had to reinstall ubuntu. Driver from amd didnt work.
    My card is a radeon rx 550
    any solutions

    thanks in advance

    • CryptoBadger says:

      When you installed the AMD Pro GPU drivers, did you use the exact link in my guide (version 16.60, which was the latest when my guide was written, but I believe the RX 5xx series of GPUs had not yet been released)? Or did you download the latest version (17.10, which definitely does support your RX 550)?

      If you haven’t tried the latest version of the driver yet, I’d give that a go. You’ll just need to substitute the latest version of the driver in the first section of step 4:

      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

      • Frank says:

        Hoi. Thanks for the answer.
        I tried the exact one mentioned above.
        I also tried the newest one.
        Same thing. After reboot Black screen. Gonna try ubuntu 17.04 now.
        Maybe that works.
        Grts Frank

        • Dave says:

          I also get a black screen when rebooting after installing amd drivers. Tried both driver versions.

          • Dmytro says:

            Where did you connect you display? In my case there are two options:
            1) directly to motherboard VGA – internal graphic
            2) to RX xxx card – PCI-E graphic
            Before AMD dtriver installation I was connected to VGA on motherboard and BIOS setting preferred PCIE as a video output. Still I was getting picture on my display connected to motherboard. But as soon as I installed AMDGPU drivers and reboot Ubuntu only black screen is seen. I assume I should connect display to video card directly now but it does not support HDMI. Anyway OS boots up properly and after reboot I am able to ssh to rig and do all the activities remotely.

        • CryptoBadger says:

          Are you plugging your monitor into one of your GPUs, or your motherboard? If you’re plugged into your motherboard, switch to one of your GPUs.

  10. Dmytro says:

    Hi CryptoBadger,
    Could you please share some insite for how to control temperature of AMDGPU?
    I am using Sapphire Nitro RX470 4G and it gives 21.77Mh/s but temperature is 70 degree C. Is it safe? What is the optimum working temperature range for thus GPU? Any tricks or hints how to control it?

    • Ian says:

      70 degrees C is well within the card’s working temperature. Most cards can run up to 90 C. Nvidia even overclocks their cards until it hits around 90c

    • CryptoBadger says:

      In step 6 of the guide, we actually set a temperature target of 68C when we create our mine.sh script (it’s normal for GPUs to fluctuate a few degrees from the target, so 70C is normal and absolutely fine). You can set any value you like by changing the “-tt 68” switch to another value (-tt stands for “temperature target”). Look for the line that starts with “./ethdcrminer64” in your mine.sh script and just change the two numbers after -tt near the end of the line. Be warned that lowering your temperature target will increase the speed of your GPU fans which could make your rig quite a bit louder (it’ll use a bit of extra power, too)!

  11. hvalentino says:

    Hi CryptoBadger,

    first of all, thank you for this awesome guide! throw some beers for sure after my rig is up 🙂 I have a question tho, when we installing the xubuntu, are we right away plug 6 gpu? or using on board first and then after installing amd then plug all the PCIE, please let me know. thanks!

    • CryptoBadger says:

      You can do it either way. I find it’s easiest to just plug in one GPU, and get everything working with a single card, and then power down and add the remaining GPUs. But it won’t mess anything up if you start with all 6 GPUs attached. I typically like to disable onboard video and anything else that I don’t plan to use on the motherboard, though.

  12. Dmytro says:

    Hi,
    Do we have any recommendation about virual memory/swap size in Linux for mining? In Windows it has to be set to 16G.

  13. Grodge says:

    Thanks for he guide. After I install the AMD-GPU PRO and reboot the screen freezes on a blank screen with the following message: /dev/sda1: clean, x num blocks

    Any idea on what’s happening?

  14. corather says:

    I build a replica of Badger’s Litecoin mining rig a few years ago. It works a little slow for Ethereum, but if you don’t feel like spending money on new hardware, download Ubuntu 15.10 and use the litecoin mining guide on installing the video card drivers for linux (Windows will most likely work with any solution but I don’t have a hard drive for that machine and I never tested it). Install it on a USB 3.0 stick also or a hard drive. USB 2.0 will work, but very slow. You may get an error like X needs to be running or something on the last step to verify it’s working, but it’ll work. I also installed xrdp and mate desktop so I can log in with windows remote desktop and monitor things easier. Works great. The old MSI twin frozr III’s with the modified Badger bios settings do around 12 M/h per card with very light (about 10% on the core only) overclock. Claymore’s miner works great on the old litecoin miner also, and if you’re into zcash, silentarmy miner works best, but it’s not as profitable as ethereum right now.

  15. grodge says:

    After the “sudo usermod -a -G video $LOGNAME” step I rebooted as per instruction and my machine is now stuck on a black screen with

    /dev/sda1: clean, x/x num of files, x/x number of blocks

    It won’t do anything after that. Any suggestions?

  16. deadman.walking says:

    Hello, first that anything I have to thank you because I followed your guide and it’s the closest I had to mining in my actual PC (AMD CPU FX-8350 on a Gigabyte 990FXA-UD3 R5, 8Gb RAM with Asus Geforce GTX 760 2Gb GPU).

    Second, I have a big problem: apparently is related to the 2Gb in my GPU, I can run Claymore with the terminal commands:
    cd /usr/local/claymore90
    ./mine.sh

    But got 2 error messages:
    “CUDA error – cannot allocate big buffer for DAG. Check readme.txt for possible solutions.”
    “GPU 0, CUDA error 11 – cannot write buffer for DAG”
    (the readme.txt file mentioned in error message doesn’t exist)

    Tried using in the Claymore configuration the options:
    export GPU_FORCE_64BIT_PTR=0
    export GPU_MAX_HEAP_SIZE=100
    export GPU_USE_SYNC_OBJECTS=1
    export GPU_MAX_ALLOC_PERCENT=100
    export GPU_SINGLE_ALLOC_PERCENT=100

    but nothing changed… what can I do to run Claymore on my GTX760 2Gb video card?

    Third: I can’t get running Claymore automatically on Xubuntu startup (in conjunction with the problem mentioned before, but I don’t care if this GPU not worth it because its low Hash rates/high power consumption, because it’s for learning purposes), tried your’s guide steps, and adding it to app startup, but it wont start automatically neither.
    All that is important, because in my current PC maybe never work because GPU RAM limitations, but I plan to build a PC exclusively for mining. All this trouble is for learning before I purchase expensive new hardware that I can’t get working once assembled.

    • Mongoose1 says:

      the startup scripts aren’t going to work for you in your mine.sh bash script defined in this guide doesn’t work. As for 2gb cards I’ve had issue defining all those environment variables in unix but not windows maybe give that a try?

  17. Kelly Shaw says:

    I am a complete newb, and have an Nvidia GTX1060… any advice on how to get this to work? I’ve tried 4 builds so far and error out (no sufficient gpu or cpu) each time

Leave a Reply

Your email address will not be published.