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/kanoi/cgminer.git
cd cgminer
You don’t need to have all the USB devices compiled in, but this is a useful list:
CFLAGS=”-g -W -Wall” ./autogen.sh -enable-icarus -enable-gekko
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