Getting cgminer on an RPi

July 19th, 2013

Last updated: 15-Jul-2014

Use arch linux, get it here: Downloads. I’ve tried:

  • ArchLinuxARM-2014.06-rpi.img.zip,
  • ArchLinuxARM-2014.01-rpi.img.zip,
  • archlinux-hf-2013-07-22.img.zip and
  • archlinux-hf-2013-06-06.zip
  • Follow the RPi SD setup/install instructions: RPi_Easy_SD_Card_Setup to create an SD ready to boot
    Make sure you use a Class 10 SD card of at least 4GB
    I’ve used SanDisk Ultra SDHC’s and Sony SDHC USH-I’s and so far (touch wood) had no problems with them
    I’ve had plenty of trouble with Class 6 SD cards

    Booting will get a DHCP IP address (check your router to find out what it got)
    Login with ssh root@IP (or on windows: Putty – download ‘here’)
    Login: root
    Password: root
    Change the password with
    passwd
    and remember it.

    The ArchLinux install guide is here:
    ArchLinux_Install_Guide
    You can skip most of that if you want, however you should set the timezone as explained at:
    Initial_Installation -> “Modify System Files”

    You now want to increase the size of the system partition since it will only have about 800MB left free.
    You’ll first need to work out the SD disk layout of the version of Arch you have. To see the layout:
    fdisk -l

    Layout “A”: ArchLinuxARM-2014.06, ArchLinuxARM-2014.01 and archlinux-hf-2013-07-22 have 1 primary, 1 extended and 1 logical partition – with the system partition being the logical partition, so it looks like 3 partitions:

            Device Boot      Start         End      Blocks   Id  System
    /dev/mmcblk0p1            2048      186367       92160    c  W95 FAT32 (LBA)
    /dev/mmcblk0p2          186368     3667967     1740800    5  Extended
    /dev/mmcblk0p5          188416     3667967     1739776   83  Linux

    Layout “B”: archlinux-hf-2013-06-06 has a layout with 2 primary partitions – the 2nd one is the system partition. It looks like:

            Device Boot      Start         End      Blocks   Id  System
    /dev/mmcblk0p1   *        2048      186367       92160    c  W95 FAT32 (LBA)
    /dev/mmcblk0p2          186368     3667967     1740800   83  Linux

    For Layout “A” you want to extend the “3rd” partition to the full size of the SD card, so you must also increase the size of the extended partition first then recreate the system logical partition inside the extended partition.
    fdisk /dev/mmcblk0
    In fdisk, just so you know, if you wish to quit without changing anything:
    q
    First look at the layout and remember the start of /dev/mmcblk0p5 (as I highlighted in red above) e.g. It may be 188416
    p
    Now delete both /dev/mmcblk0p5 and /dev/mmcblk0p2
    d
    5
    d
    2
    Still in fdisk, create the new larger extended partition ‘2’ using the previous + all unused space:
    n
    e
    [enter]
    [enter]
    [enter]
    Then recreate the system logical partition inside that to use all the space, starting at the same place where it did before (which will probably be the default value):
    n
    l
    188416
    [enter]
    Save the changes and exit fdisk
    w

    For Layout “B” you want to extend the 2nd partition to the full size of the SD card:
    fdisk /dev/mmcblk0
    In fdisk, just so you know, if you wish to quit without changing anything:
    q
    To view the parition layout:
    p
    Then delete the main system partition ‘2’:
    d
    2
    Still in fdisk, create the new larger primary partition ‘2’ using the previous + all unused space:
    n
    [enter]
    [enter]
    [enter]
    [enter]
    Save the changes and exit fdisk
    w

    Now for both Layout “A” and Layout “B”: Reboot:
    reboot
    (N.B. this can take a minute or 2 – be patient)

    And finally log back in and resize it.
    Layout “A”: resize2fs /dev/mmcblk0p5
    Layout “B”: resize2fs /dev/mmcblk0p2
    Done.

    When editing files on linux there are a few text editors.

    Two common ones people use are vi and nano.
    Using vi: http://www.cs.colostate.edu/helpdocs/vi.html
    Using nano: http://www.nano-editor.org/dist/v2.2/nano.html

    Arch uses pacman as the package management tool: Pacman

    Update the package list:
    pacman -Syy

    Install screen – always useful:
    pacman -S screen

    Install git to get cgminer:
    pacman -S git

    Install build tools (this will also install gcc):
    pacman -S base-devel
    N.B. you want the default ‘all’
    “base-devel” may download around 30MiB or more of package data, so it may take a while depending upon your internet connection

    Install cgminer dependencies:
    Update ncurses and curl:
    pacman -S ncurses curl
    curl versions just below v7.34.0-3 can give an error when you use the ‘git clone’ command, so make sure it is updated. I found I had to reboot after the curl update, to fix it completely
    You’ll see near the end of the pacman output “upgrading curl” if it was updated.

    Install Java (non-GUI version) for the cgminer API:
    pacman -S jre7-openjdk-headless

    Get and build cgminer:
    git clone https://github.com/ckolivas/cgminer.git
    cd cgminer
    You don’t need to have all the USB devices compiled in, but this is the full list:
    CFLAGS="-g -W -Wall" ./autogen.sh -enable-avalon -enable-bflsc -enable-bitforce -enable-bitfury -enable-drillbit -enable-hashfast -enable-icarus -enable-klondike -enable-modminer -enable-bab
    N.B. don’t enable bab unless you have V1 or V2 BlackArrowBitfury boards
    Also note that the autogen command will take about 20 minutes to run on an RPi
    make clean
    make

    Lastly to see that it actually runs:
    ./cgminer -n
    will report all your recognised USB mining devices.

    Now to set the RPi to always start cgminer when it starts or if the cgminer process disappears, restart it, see my git for the files and settings to do that:
    https://github.com/kanoi/cgminer-run

    If you want to use miner.php to view the status of cgminer from any web browser:
    pacman -S apache php-apache

    Copy miner.php from the (current) cgminer directory:
    cp miner.php /srv/http/

    Setup is also required after the apache install:

    Edit /etc/httpd/conf/httpd.conf
    About 60 lines down there is a whole selection of LoadModule commands.
    At the end of the LoadModules add one more:
    LoadModule php5_module modules/libphp5.so
    Also, towards the bottom of the file is a bunch of Includes
    At the top of the Includes add:
    Include conf/extra/php5_module.conf

    Edit /etc/php/php.ini
    Search for Date and below that edit date.timezone to match your time zone and also remove the semicolon at the front, like:
    e.g. date.timezone = "Australia/Perth"
    The list of time zones is here: List of Supported Timezones
    Search for extension=sockets.so and make sure it isn’t commented out with a semi-colon “;” in front of it.
    i.e. remove the “;” if it is there at the front of the line

    Enable apache to run at boot time:
    systemctl enable httpd.service -system
    Then start apache:
    systemctl start httpd.service
    If you get an error starting the web server e.g.
    Job for httpd.service failed. See …:
    Recently Arch decided to screw up the install of PHP and Apache so that they are two versions that no longer work together.
    The fix is:
    Edit /etc/httpd/conf/httpd.conf
    Around line 153? search for:
    LoadModule mpm_event_module modules/mod_mpm_event.so
    and change it to:
    LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
    Then again:
    systemctl start httpd.service

    To view the web page:
    http://RPiIPAdress/miner.php
    where of course RPiIPAddress is the IP Address of the RPi
    If you’re not sure what it is, you can also get it when logged into root using:
    ifconfig
    It will be the IP address on the 2nd line after inet

    You must of course start cgminer at least with api-listen
    Read API-README for more details about miner.php and the API