2021-04-04 17:24:58 +00:00
[![Releases][releases-shield]][releases-url]
2020-07-31 08:57:51 +00:00
[![Contributors][contributors-shield]][contributors-url]
[![Forks][forks-shield]][forks-url]
[![Stargazers][stars-shield]][stars-url]
[![Issues][issues-shield]][issues-url]
[![GPL3 License][license-shield]][license-url]
2020-11-14 13:00:56 +00:00
[![Coveralls][coveralls-shield]][coveralls-url]
2021-04-04 17:24:58 +00:00
[![Docker Image][docker-pulls-shield]][docker-pulls-url]
2020-07-31 08:57:51 +00:00
<!-- PROJECT LOGO -->
< br / >
< p align = "center" >
< a href = "https://github.com/distribyted/distribyted" >
< img src = "docs/images/distribyted_icon.png" alt = "Logo" width = "100" >
< / a >
< h3 align = "center" > distribyted< / h3 >
< p align = "center" >
Torrent client with on-demand file downloading as a filesystem.
< br / >
< br / >
< a href = "https://github.com/distribyted/distribyted/issues" > Report a Bug< / a >
·
< a href = "https://github.com/distribyted/distribyted/issues" > Request Feature< / a >
< / p >
< / p >
<!-- TABLE OF CONTENTS -->
## Table of Contents
2020-09-27 19:23:47 +00:00
- [Table of Contents ](#table-of-contents )
- [About The Project ](#about-the-project )
- [Use Cases ](#use-cases )
2021-04-04 17:24:58 +00:00
- [Supported _Expandable_ File Formats ](#supported-expandable-file-formats )
2020-09-27 19:23:47 +00:00
- [Supported ](#supported )
- [To Be Supported ](#to-be-supported )
- [Not Supported ](#not-supported )
- [Getting Started ](#getting-started )
2020-11-01 11:23:39 +00:00
- [Prerequisites on windows ](#prerequisites-on-windows )
2020-09-27 19:23:47 +00:00
- [Usage ](#usage )
2020-11-14 15:28:50 +00:00
- [Docker ](#docker )
2020-09-27 19:23:47 +00:00
- [Configuration File ](#configuration-file )
- [Contributing ](#contributing )
- [License ](#license )
2020-07-31 08:57:51 +00:00
<!-- ABOUT THE PROJECT -->
## About The Project
![Distribyted Screen Shot][product-screenshot]
Distribyted tries to make easier integrations with other applications among torrent files, presenting them as a standard filesystem.
2020-08-03 09:21:12 +00:00
We aim to use some compressed file characteristics to avoid download it entirely, just the parts that we'll need.
2020-07-31 08:57:51 +00:00
Also, if the file format is not supported, distribyted can stream and seek through the file if needed.
**Note that distribyted is in alpha version, it is a proof of concept with a lot of bugs.**
2020-08-03 09:21:12 +00:00
### Use Cases
2020-08-03 09:26:39 +00:00
- Play **multimedia files** on your favorite video or audio player. These files will be downloaded on demand and only the needed parts.
2020-08-03 09:21:12 +00:00
- Explore TBs of data from public **datasets** only downloading the parts you need. Use **Jupyter Notebooks** directly to process or analyze this data.
- Play your **ROM backups** directly from the torrent file. You can have virtually GBs in games and only downloaded the needed ones.
### Supported _Expandable_ File Formats
Distribyted can show some kind of files directly as folders, making it possible for applications read only the parts that they need. Here is a list of supported, to be supported and not supported formats.
#### Supported
- zip: Able to uncompress just one file. The file is decompressed to a temporal file sequentially to make possible seek over it. The decompression stops if no one is reading it.
#### To Be Supported
- tar: Seek to any file and inside that files using a [modified standard library ](https://github.com/ajnavarro/go-tar ). Not useful on `.tar.gz` files.
- 7zip: Similar to Zip. Need for a library similar to [zip ](https://github.com/saracen/go7z ).
- xz: Only worth it when the file is created using blocks. Possible library [here ](https://github.com/ulikunitz/xz ) and [here ](https://github.com/frrad/bxzf ).
#### Not Supported
- gzip: As far as I know, it doesn't support random access.
## Getting Started
2020-08-03 17:44:08 +00:00
Get the latest release from [releases][releases-url] page or download the source code and execute `make build` .
2020-08-03 09:21:12 +00:00
2020-11-08 17:19:25 +00:00
Run the program: `./distribyted-[VERSION]-[OS]-[ARCH]`
2020-08-03 09:21:12 +00:00
2020-11-08 17:19:25 +00:00
Defaults are good enough for starters, but you can change them. Here is the output of `./distribyted -help` :
2020-11-13 11:06:33 +00:00
```text
2020-11-08 17:19:25 +00:00
NAME:
distribyted - Torrent client with on-demand file downloading as a filesystem.
USAGE:
2020-11-13 11:06:33 +00:00
distribyted [global options] [arguments...]
2020-11-08 17:19:25 +00:00
GLOBAL OPTIONS:
2020-11-13 11:06:33 +00:00
--config value YAML file containing distribyted configuration. (default: "./distribyted-data/config.yaml") [$DISTRIBYTED_CONFIG]
--http-port value HTTP port for web interface (default: 4444) [$DISTRIBYTED_HTTP_PORT]
--fuse-allow-other Allow other users to acces to all fuse mountpoints. You need to add user_allow_other flag to /etc/fuse.conf file. (default: false) [$DISTRIBYTED_FUSE_ALLOW_OTHER]
--help, -h show help (default: false)
2020-11-08 17:19:25 +00:00
```
2020-08-03 09:21:12 +00:00
2020-11-01 11:23:39 +00:00
### Prerequisites on windows
Download and install [WinFsp ](http://www.secfs.net/winfsp/ ).
2020-08-03 09:21:12 +00:00
## Usage
2020-11-08 17:19:25 +00:00
After executing and load all torrent or magnet files, a web interface will be available here: `http://localhost:4444`
It contains information about the mounted routes and torrent files like download/upload speed, leechers, seeders...
You can also modify the configuration file and reload the server from here: `http://localhost:4444/config` .
2020-08-03 09:21:12 +00:00
2020-11-14 15:28:50 +00:00
### Docker
Docker run example:
```shell
docker run \
2021-04-04 17:24:58 +00:00
--rm -p 4444:4444 -p 36911:36911 \
2020-11-14 15:28:50 +00:00
--cap-add SYS_ADMIN \
--device /dev/fuse \
--security-opt apparmor:unconfined \
2021-04-04 17:24:58 +00:00
-v /tmp/mount:/distribyted-data/mount:shared \
2020-11-14 15:28:50 +00:00
-v /tmp/metadata:/distribyted-data/metadata \
-v /tmp/config:/distribyted-data/config \
distribyted/distribyted:latest
```
Docker compose example:
```yaml
distribyted:
container_name: distribyted
image: distribyted/distribyted:latest
restart: always
ports:
- "4444:4444/tcp"
2021-04-04 17:24:58 +00:00
- "36911:36911/tcp"
2020-11-14 15:28:50 +00:00
volumes:
2021-04-04 17:24:58 +00:00
- /home/user/mount:/distribyted-data/mount:shared
2020-11-14 15:28:50 +00:00
- /home/user/metadata:/distribyted-data/metadata
- /home/user/config:/distribyted-data/config
security_opt:
- apparmor:unconfined
devices:
- /dev/fuse
cap_add:
- SYS_ADMIN
```
2020-08-03 09:21:12 +00:00
### Configuration File
2021-04-04 17:24:58 +00:00
You can see the default configuration file with some explanation comments [here ](templates/config_template.yaml ).
2020-08-03 09:21:12 +00:00
2020-07-31 08:57:51 +00:00
## Contributing
2020-08-03 09:21:12 +00:00
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated** .
2020-07-31 08:57:51 +00:00
1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
2020-08-03 09:21:12 +00:00
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
2020-07-31 08:57:51 +00:00
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request
## License
Distributed under the GPL3 license. See `LICENSE` for more information.
2021-04-04 17:24:58 +00:00
[releases-shield]: https://img.shields.io/github/v/release/distribyted/distribyted.svg?style=flat-square
[releases-url]: https://github.com/distribyted/distribyted/releases
[docker-pulls-shield]:https://img.shields.io/docker/pulls/distribyted/distribyted.svg?style=flat-square
[docker-pulls-url]:https://hub.docker.com/r/distribyted/distribyted
2020-07-31 08:57:51 +00:00
[contributors-shield]: https://img.shields.io/github/contributors/distribyted/distribyted.svg?style=flat-square
[contributors-url]: https://github.com/distribyted/distribyted/graphs/contributors
[forks-shield]: https://img.shields.io/github/forks/distribyted/distribyted.svg?style=flat-square
[forks-url]: https://github.com/distribyted/distribyted/network/members
[stars-shield]: https://img.shields.io/github/stars/distribyted/distribyted.svg?style=flat-square
[stars-url]: https://github.com/distribyted/distribyted/stargazers
[issues-shield]: https://img.shields.io/github/issues/distribyted/distribyted.svg?style=flat-square
[issues-url]: https://github.com/distribyted/distribyted/issues
2020-08-03 09:21:12 +00:00
[releases-url]: https://github.com/distribyted/distribyted/releases
2020-07-31 08:57:51 +00:00
[license-shield]: https://img.shields.io/github/license/distribyted/distribyted.svg?style=flat-square
[license-url]: https://github.com/distribyted/distribyted/blob/master/LICENSE
2021-01-02 19:09:05 +00:00
[product-screenshot]: docs/images/distribyted.gif
2020-08-03 17:44:08 +00:00
[example-config]: https://github.com/distribyted/distribyted/blob/master/examples/conf_example.yaml
2020-11-14 13:00:56 +00:00
[coveralls-shield]: https://img.shields.io/coveralls/github/distribyted/distribyted?style=flat-square
[coveralls-url]: https://coveralls.io/github/distribyted/distribyted