Running distributed.net’s dnetc client on a PPC (Dreambox)
What?: distributed.net was the Internet’s first general-purpose distributed computing project.
- Why not?
- The client uses idle CPU time only, so it doesn’t affect the way you use a computer.
- In the end, some money goes to some nice organizations, such as the EFF.
- More info, in their FAQ.
Why on a Dreambox?:
- A Dreambox is just another PC running a version of Embedded Linux called BusyBox.
- Since the dnetc client uses only idle time of its CPU, it does not affect your viewing experience on the Dreambox and you won’t even know it is running.
- You need root ssh access to your Dreambox. Getting this is beyond the scope of this article. I use the Gemini images on my boxes and instructions for enabling ssh for this image is available elsewhere on the net.
- Your Dreambox needs to be connected to the internet for the sending/receiving of the calculated keys.
- Basic knowlege of commands such as rm, tar, vi and wget.
So, let’s begin, commands that need to be typed are in bold…
[chris@r500 ~] $ ssh [email protected]
root@dm7020:/> cd /usr/bin
root@dm7020:/usr/bin> wget http://http.distributed.net/pub/dcti/current-client/dnetc-linux-ppc-uclibc.tar.gz
root@dm7020:/usr/bin> tar xzvf dnetc-linux-ppc-uclibc.tar.gz
root@dm7020:/usr/bin> rm -rf dnetc-linux-ppc-uclibc.tar.gz
We are now ready to perform our configuration for the client. This is only required to be done once and I’ll only cover the most basic and important parts of it.
root@dm7020:/usr/bin> cd dnetc[press TAB to autocomplete]
You are now presented with a menu from which you can configure the various settings.
- Press 1 to enter the ‘General Client Options’, then 1 again to enter your distributed.net ID (your e-mail address). This is the most important part of the whole process so make sure that you provide a valid e-mail address. Otherwise, if your client manages to break the code, you will never receive any credit for your efforts and contributions.
- You should now be back at the ‘General Client Options’ screen. Press 0 to return to the main menu.
Distributed.net are currently running two projects, RC5-72 and OGR-26. If for any reason you wish to participate in only one of the two projects, you may perform this extra step to concentrate on just the project of your choice:
- From the Main Menu, press 2 for ‘Buffer and Buffer Update Options’, then 9 for ‘Load-work precedence’.
- You might see something like this: Default Setting: OGR-NG,RC5-72, Current Setting: RC5-72,OGR-NG
- If you wanted to disable OGR for example, for ‘New Setting’, enter: RC5-72,OGR-NG:0
From the Main Menu, press 0 to ‘Save settings and exit’. It is important that you verify your settings, which you can easily do by typing cat dnetc.ini and briefly checking for obvious entries which reflect what you have done using the configuration utility. If you don’t then something might have gone wrong, so go back and check.
If your config file is there, then congratulations, you’re ready to begin crunching numbers! Another important thing to note is that once you have a working configuration then running the executable will actually start the client rather than offer the configuration menu. In other words, the configuration menu only appears in the absence of a working configuration file. Because of this, if you ever need to change the configuration, you may do so by passing the -config parameter like so: ./dnetc -config
Running the client for the first time. Once you’re happy with the configuration file, launch the client again with ./dnetc
When you do this for the first time, you should look out for a successful connect and retrieval of a working block to one of distributed.net’s servers. Otherwise, if you are just resuming operations, your output may look something like this:
[Jun 19 09:47:14 UTC] Automatic processor detection found 1 processor.
[Jun 19 09:47:14 UTC] Automatic processor type detection found
a PowerPC STB04xxx processor.
[Jun 19 09:47:14 UTC] RC5-72: Running micro-bench to select fastest core…
[Jun 19 09:47:36 UTC] RC5-72: using core #6 (MH 1-pipe 604e).
[Jun 19 09:47:36 UTC] RC5-72: Loaded CC:DAE3B743:00000000:1*2^32
[Jun 19 09:47:36 UTC] RC5-72: 18 packets (18.00 stats units) remain in
Projected ideal time to completion: 2.02:27:18.00
[Jun 19 09:47:36 UTC] RC5-72: 2 packets (2.00 stats units) are in
[Jun 19 09:47:36 UTC] 1 cruncher has been started.
Congratulations, it is working. It is still imperative however that you make sure that the client successfully connects to a server. If it doesn’t then you are just creating codes for no reason whatsoever. Another way to check this is to monitor the unprocessed and processed keys over a couple of days. As you can see from the above log, these are kept in two files, named buff-out.r72 and buff-in.r72. Generally speaking, buff-out.r72 should never exceed around 10,000 bytes. If it does, then maybe the Dreambox is unable to post keys to distributed.net’s servers.
Press Ctrl+C to stop the client and type ls -la to see the file sizes.
Getting the client to run in the background as a daemon process. You do not want to have to do all of this, everytime you power up your Dreambox. For this reason, you need to figure out how to start it automatically every time your turn on your Dreambox. For me it was as simple as adding an entry to the very bottom of a file located at /etc/init.d/rcS
Add the following line to the end of the file: /usr/bin/dnetc515-linux-ppc-uclibc/dnetc -quiet (making sure that the path matches your path from the previous steps).
Press F10 and choose Yes to save the changes to the file.
Reboot the Dreambox.
Checking if the client runs after a reboot. To do this, simply SSH back in to Dreambox where there are 2 ways to check if it is running.
- Use top and looking for the dnetc process running.
- Use ps aux | grep dnetc and look for output similar to this: 954 root 3448 R /usr/bin/dnetc515-linux-ppc-uclibc/dnetc -quiet
Welcome to distributed computing whilst you watch TV!