# Headless Ethereum Miner Setup - NVIDIA *Reed Slaby, March 2018* Having grown tired of wasting a perfectly good monitor on my ethereum mining rig, I finally decided to replace the Ubuntu Desktop 16.04 installation with Ubuntu Server 16.04. Many of the gtutorials available at the time of this writing range from unecessarily complicated to flat-out wrong. This guide is intended to address many of those shortfalls. ## Prerequisites To complete this guide, you should already have: * Basic knowledge of Linux * An Ethereum wallet ### Hardware Used * ASUS Z270-P Motherboard * Intel Celeron G3930 Processor * 8GB DDR4 RAM * 128GB HDD * EVGA SuperNOVA G3 750W ATX PSU * 2x NVIDIA GTX 1060 * 3x NVIDIA GTX 1070 * Monitor and Keyboard (for initial installation) ## Basic Setup ### Installing the Operating System I downloaded a copy of Ubuntu Server 16.04 (amd64) and copied it to a USB flash drive using dd. The hard drive was partitioned as follows: Partition 0: 256MB - EFI Partition 1: 8GB - swap Partition 2: 40GB - / Partition 3: 30GB - /home Note: There is plenty of room for optimization in this partitioning scheme. Only about ~3GB of the root partition will be used in the end. Reduce at your own risk! If you receive an error that a file system could not be created on the EFI partition, try deleting and recreating the partition. Also ensure that no other EFI hard drives are connected. ### Installing Necessary Utilities The first order of business after logging in the first time is to update and install SSH: sudo apt update sudo apt upgrade sudo apt install openssh-server Take note of the IP address: ip addr show At this point, the monitor and keyboard can be disconnected. I then connected over SSH to ensure that I was not inadvertently relying on a connected monitor in any way while performing the rest of the setup. These utilities will be required to install and run the NVIDIA driver/utilities: sudo apt install build-essential libgtk-3-0 xorg ### Installing the NVIDIA driver Go to the [NVIDIA website](http://www.nvidia.com/Download/index.aspx?lang=en-us) and download the latest Linux 64-bit driver. Extract the archive and execute the installation script: gzip -d NVIDIA-Linux-x86_64-xxx.xx.tar.gz tar -xvf NVIDIA-Linux-x86_64-xxx.xx.tar chmod +x NVIDIA-Linux-x86_64-xxx.xx.run sudo ./NVIDIA-Linux-x86_64-xxx.xx.run Feel free to answer 'Yes' to running nvidia-xconfig, though it will probably only pick up the first card at this time. Run nvidia-smi to ensure that all the GPUs are visible. If some or all are missing, stop and troubleshoot. Reboot the machine: sudo init 6 Run nvidia-xconfig to enable overclocking and allow things to work without a real monitor connected: sudo nvidia-xconfig --cool-bits=31 --allow-empty-initial-configuration Check the /etc/X11/xorg.conf file to ensure all GPUs have been configured. Each GPU should have a Device, Monitor, and Screen section. The Screens should show the following options: Section "Screen" Identifier "ScreenX" Device "DeviceX" Monitor "MonitorX" DefaultDepth 24 **Option "AllowEmptyInitialConfiguration" "True" Option "Coolbits" "31"** SubSection "Display" Depth 24 EndSubSection EndSection ### Miscellaneous Adjustments Annoyingly enough, you will need to start an X server in order to overclock the GPUs. Doing this also requires root privileges, so I updated my sudoers file to slightly ease the pain. Using visudo, I added the following lines to sudoer: USERNAME HOST = (root) NOPASSWD: /usr/bin/xinit USERNAME HOST = (root) NOPASSWD: /usr/bin/nvidia-smi Note: replace USERNAME and HOST with your specific info. For example, joe@glados would use "joe glados =..." ## Overclocking Start an X server and push it into the background: sudo xinit & export DISPLAY=:0.0 Enable persistence mode on the GPUs: sudo nvidia-smi -pm 1 Helpful overclocking commands: // Set GPU 0 power level to 100W sudo nvidia-smi -i 0 -pl 100 // Enable GPU 0 manual fan control and set to 50% nvidia-settings -a '[gpu:0]/GPUFanControlState=1' -a '[fan:0]/GPUTargetFanSpeed=50' // Increase GPU 0 memory clock by 1000Hz nvidia-settings -a '[gpu:0]/GPUMemoryTransferRateOffset[3]=1000' ## Set Up Ethminer TODO