Folding@Home Desktop Client
===========================

Folding@home is a distributed computing project -- people from
throughout the world download and run software to band together to
make one of the largest supercomputers in the world. Every computer
takes the project closer to our goals. Folding@home uses novel
computational methods, coupled to distributed computing, to simulate
problems millions of times more challenging than previously achieved.

Protein folding is linked to disease, such as Alzheimer's, ALS,
Huntington's, Parkinson's disease, and many Cancers.

Moreover, when proteins do not fold correctly (i.e. "misfold"), there
can be serious consequences, including many well known diseases, such
as Alzheimer's, Mad Cow (BSE), CJD, ALS, Huntington's, Parkinson's
disease, and many Cancers and cancer-related syndromes.

# What is protein folding?
Proteins are biology's workhorses -- its "nanomachines." Before
proteins can carry out these important functions, they assemble
themselves, or "fold." The process of protein folding, while critical
and fundamental to virtually all of biology, in many ways remains a
mystery.

# This software
This repository contains a new [Open-Source](https://opensource.org/osd)
version of the Folding@home client software.  The complete client software
consists of a frontend and a backend.  This repository contains the backend.
The frontend is in a separate repository at
[fah-web-client-bastet](https://github.com/foldingathome/fah-web-client-bastet).
The backend can be configured to run on its own without any user interaction.
The frontend is a web application which normally will run at
https://app.foldingathome.org/ but can also be run locally for testing and
development purposes.

# Quick Start for Debian Linux

(see the [BUILDING-RPM.md](BUILDING-RPM.md) file for instructions on how to build the RPM package)

## Install the Prerequisites
```
sudo apt update
sudo apt install -y scons git npm build-essential fakeroot libssl-dev zlib1g-dev libbz2-dev liblz4-dev libsystemd-dev
```

## Get the code
```
git clone https://github.com/cauldrondevelopmentllc/cbang
git clone https://github.com/foldingathome/fah-client-bastet
git clone https://github.com/foldingathome/fah-web-client-bastet
```

## Build a specific version (Optional)
To checkout the code for a specific version of the client run:

```
git -C cbang checkout bastet-v<version>
git -C fah-client-bastet checkout v<version>
git -C fah-web-client-bastet checkout v<version>
```

Where ``<version>`` is a version number.

Run ``git -C fah-client-bastet tag`` to list available version numbers.

## Build the Folding@home Client
```
export CBANG_HOME=$PWD/cbang
scons -C cbang
scons -C fah-client-bastet
scons -C fah-client-bastet package
```

## Install the package
The last build step builds the Debian package.  You can then install it like this:

```
sudo apt install ./fah-client-bastet/fah-client_<version>_amd64.deb
```

Where ``<version>`` is the software version number.

Folding@home Client older than v8 will be automatically removed.

## Folding@home Client Service
After installation, the service runs and will automatically restart on startup.

**File storage locations:**
- Logs: `/var/log/fah-client`
- Data: `/var/lib/fah-client`

Related service commands for **Status, Start, Stop, Restart:**
```
systemctl status --no-pager -l fah-client
sudo systemctl start fah-client
sudo systemctl stop fah-client
sudo systemctl restart fah-client
```

NOTE: If the Folding@home Client is not being run as a service and is manually
run with `fah-client` in a terminal window, the data and log folders will be
created in the working directory where it is run from.

## Start the development web server
Use these commands to run your own frontend server for testing purposes.  In
production, this code will run at https://app.foldingathome.org/.

```
cd fah-web-client-bastet
npm i
npm run dev
```

With the development server running, open http://localhost:3000/ in a browser to
view the client frontend.
