redundanet 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- redundanet/__init__.py +16 -0
- redundanet/__main__.py +6 -0
- redundanet/auth/__init__.py +9 -0
- redundanet/auth/gpg.py +323 -0
- redundanet/auth/keyserver.py +219 -0
- redundanet/cli/__init__.py +5 -0
- redundanet/cli/main.py +247 -0
- redundanet/cli/network.py +194 -0
- redundanet/cli/node.py +305 -0
- redundanet/cli/storage.py +267 -0
- redundanet/core/__init__.py +31 -0
- redundanet/core/config.py +200 -0
- redundanet/core/exceptions.py +84 -0
- redundanet/core/manifest.py +325 -0
- redundanet/core/node.py +135 -0
- redundanet/network/__init__.py +11 -0
- redundanet/network/discovery.py +218 -0
- redundanet/network/dns.py +180 -0
- redundanet/network/validation.py +279 -0
- redundanet/storage/__init__.py +13 -0
- redundanet/storage/client.py +306 -0
- redundanet/storage/furl.py +196 -0
- redundanet/storage/introducer.py +175 -0
- redundanet/storage/storage.py +195 -0
- redundanet/utils/__init__.py +15 -0
- redundanet/utils/files.py +165 -0
- redundanet/utils/logging.py +93 -0
- redundanet/utils/process.py +226 -0
- redundanet/vpn/__init__.py +12 -0
- redundanet/vpn/keys.py +173 -0
- redundanet/vpn/mesh.py +201 -0
- redundanet/vpn/tinc.py +323 -0
- redundanet-2.0.0.dist-info/LICENSE +674 -0
- redundanet-2.0.0.dist-info/METADATA +265 -0
- redundanet-2.0.0.dist-info/RECORD +37 -0
- redundanet-2.0.0.dist-info/WHEEL +4 -0
- redundanet-2.0.0.dist-info/entry_points.txt +3 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: redundanet
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: Distributed encrypted storage on a mesh VPN network
|
|
5
|
+
Home-page: https://github.com/alessandrodefilippo/redundanet
|
|
6
|
+
License: MIT
|
|
7
|
+
Keywords: distributed-storage,vpn,encryption,mesh-network,tahoe-lafs
|
|
8
|
+
Author: Alessandro De Filippo
|
|
9
|
+
Author-email: alessandro@example.com
|
|
10
|
+
Requires-Python: >=3.11,<4.0
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: System Administrators
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Security :: Cryptography
|
|
21
|
+
Classifier: Topic :: System :: Distributed Computing
|
|
22
|
+
Classifier: Topic :: System :: Networking
|
|
23
|
+
Requires-Dist: gitpython (>=3.1,<4.0)
|
|
24
|
+
Requires-Dist: httpx (>=0.26,<0.27)
|
|
25
|
+
Requires-Dist: jinja2 (>=3.1,<4.0)
|
|
26
|
+
Requires-Dist: jsonschema (>=4.21,<5.0)
|
|
27
|
+
Requires-Dist: psutil (>=5.9,<6.0)
|
|
28
|
+
Requires-Dist: pydantic (>=2.5,<3.0)
|
|
29
|
+
Requires-Dist: pydantic-settings (>=2.1,<3.0)
|
|
30
|
+
Requires-Dist: python-gnupg (>=0.5,<0.6)
|
|
31
|
+
Requires-Dist: pyyaml (>=6.0,<7.0)
|
|
32
|
+
Requires-Dist: rich (>=13.7,<14.0)
|
|
33
|
+
Requires-Dist: structlog (>=24.1,<25.0)
|
|
34
|
+
Requires-Dist: typer[all] (>=0.9.0,<0.10.0)
|
|
35
|
+
Requires-Dist: watchdog (>=4.0,<5.0)
|
|
36
|
+
Project-URL: Documentation, https://redundanet.readthedocs.io
|
|
37
|
+
Project-URL: Repository, https://github.com/alessandrodefilippo/redundanet
|
|
38
|
+
Description-Content-Type: text/markdown
|
|
39
|
+
|
|
40
|
+
# RedundaNet - Distributed Encrypted Storage Network
|
|
41
|
+
|
|
42
|
+
RedundaNet is a distributed, encrypted storage system built on a secure mesh VPN network. It enables users to contribute storage resources to a collective grid while maintaining privacy through end-to-end encryption.
|
|
43
|
+
|
|
44
|
+
## Features
|
|
45
|
+
|
|
46
|
+
- **Decentralized Architecture**: No central authority or single point of failure
|
|
47
|
+
- **End-to-End Encryption**: Data is encrypted before leaving the user's device using Tahoe-LAFS
|
|
48
|
+
- **GPG-Based Authentication**: Secure node identity verification
|
|
49
|
+
- **Private Networking**: Secure Tinc mesh VPN isolates the storage network from the public internet
|
|
50
|
+
- **Erasure Coding**: Data is split and distributed across multiple nodes (3-of-10 scheme by default)
|
|
51
|
+
- **Resource Sharing**: Users contribute resources and benefit from the collective capacity
|
|
52
|
+
- **Containerized Deployment**: Easy setup with Docker Compose
|
|
53
|
+
- **Python-Based CLI**: Modern CLI with Typer for easy management
|
|
54
|
+
|
|
55
|
+
## Architecture
|
|
56
|
+
|
|
57
|
+
```mermaid
|
|
58
|
+
graph TD
|
|
59
|
+
subgraph "User Node"
|
|
60
|
+
A[redundanet CLI] --> B[Tahoe Client]
|
|
61
|
+
B --> C[Tinc VPN]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
subgraph "Storage Node 1"
|
|
65
|
+
D[Tinc VPN] --> E[Tahoe Storage]
|
|
66
|
+
E --> F[Local Storage]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
subgraph "Storage Node 2"
|
|
70
|
+
G[Tinc VPN] --> H[Tahoe Storage]
|
|
71
|
+
H --> I[Local Storage]
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
subgraph "Introducer Node"
|
|
75
|
+
J[Tinc VPN] --> K[Tahoe Introducer]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
C -->|Encrypted VPN| D
|
|
79
|
+
C -->|Encrypted VPN| G
|
|
80
|
+
C -->|Encrypted VPN| J
|
|
81
|
+
|
|
82
|
+
K -.->|Introduction Services| B
|
|
83
|
+
K -.->|Introduction Services| E
|
|
84
|
+
K -.->|Introduction Services| H
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Quick Start
|
|
88
|
+
|
|
89
|
+
### Prerequisites
|
|
90
|
+
|
|
91
|
+
- Python 3.11+
|
|
92
|
+
- Docker and Docker Compose
|
|
93
|
+
- GPG (for key management)
|
|
94
|
+
|
|
95
|
+
### Installation
|
|
96
|
+
|
|
97
|
+
#### Using pip (recommended)
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
pip install redundanet
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### Using Poetry (for development)
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
git clone https://github.com/adefilippo83/project-earthgrid.git
|
|
107
|
+
cd project-earthgrid
|
|
108
|
+
poetry install
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Initialize a Node
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# Interactive setup
|
|
115
|
+
redundanet init
|
|
116
|
+
|
|
117
|
+
# Or with options
|
|
118
|
+
redundanet init --node-name my-node --vpn-ip 10.100.0.10
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Start Services with Docker
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# Start as a storage node
|
|
125
|
+
docker compose -f docker/docker-compose.yml --profile storage up -d
|
|
126
|
+
|
|
127
|
+
# Start as a client only
|
|
128
|
+
docker compose -f docker/docker-compose.yml --profile client up -d
|
|
129
|
+
|
|
130
|
+
# Start as an introducer (network coordinator)
|
|
131
|
+
docker compose -f docker/docker-compose.yml --profile introducer up -d
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Check Status
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
redundanet status
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## CLI Commands
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
redundanet --help
|
|
144
|
+
|
|
145
|
+
Commands:
|
|
146
|
+
init Initialize a new node
|
|
147
|
+
status Show node and network status
|
|
148
|
+
sync Sync manifest from repository
|
|
149
|
+
validate Validate manifest file
|
|
150
|
+
|
|
151
|
+
node Node management commands
|
|
152
|
+
list List all nodes in the network
|
|
153
|
+
info Show detailed node information
|
|
154
|
+
add Add a new node to manifest
|
|
155
|
+
remove Remove a node from manifest
|
|
156
|
+
|
|
157
|
+
network Network management
|
|
158
|
+
join Join an existing network
|
|
159
|
+
leave Leave the network
|
|
160
|
+
peers Show connected peers
|
|
161
|
+
vpn VPN management (start/stop/status)
|
|
162
|
+
|
|
163
|
+
storage Storage management
|
|
164
|
+
status Show storage status
|
|
165
|
+
mount Mount Tahoe filesystem
|
|
166
|
+
unmount Unmount filesystem
|
|
167
|
+
upload Upload a file
|
|
168
|
+
download Download a file
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Configuration
|
|
172
|
+
|
|
173
|
+
RedundaNet uses a YAML manifest file to define network configuration:
|
|
174
|
+
|
|
175
|
+
```yaml
|
|
176
|
+
network:
|
|
177
|
+
name: my-network
|
|
178
|
+
version: "1.0.0"
|
|
179
|
+
domain: redundanet.local
|
|
180
|
+
vpn_network: 10.100.0.0/16
|
|
181
|
+
|
|
182
|
+
tahoe:
|
|
183
|
+
shares_needed: 3
|
|
184
|
+
shares_happy: 7
|
|
185
|
+
shares_total: 10
|
|
186
|
+
introducer_furl: pb://...
|
|
187
|
+
|
|
188
|
+
nodes:
|
|
189
|
+
- name: node1
|
|
190
|
+
internal_ip: 192.168.1.10
|
|
191
|
+
vpn_ip: 10.100.0.1
|
|
192
|
+
public_ip: 1.2.3.4
|
|
193
|
+
gpg_key_id: ABCD1234
|
|
194
|
+
roles: [introducer, storage]
|
|
195
|
+
storage_contribution: 500GB
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Development
|
|
199
|
+
|
|
200
|
+
### Setup Development Environment
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
# Clone repository
|
|
204
|
+
git clone https://github.com/adefilippo83/project-earthgrid.git
|
|
205
|
+
cd project-earthgrid
|
|
206
|
+
|
|
207
|
+
# Install dependencies
|
|
208
|
+
make install
|
|
209
|
+
|
|
210
|
+
# Run tests
|
|
211
|
+
make test
|
|
212
|
+
|
|
213
|
+
# Run linting
|
|
214
|
+
make lint
|
|
215
|
+
|
|
216
|
+
# Run type checking
|
|
217
|
+
make type-check
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Project Structure
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
redundanet/
|
|
224
|
+
├── src/redundanet/ # Main Python package
|
|
225
|
+
│ ├── cli/ # Typer CLI commands
|
|
226
|
+
│ ├── core/ # Core business logic
|
|
227
|
+
│ ├── vpn/ # Tinc VPN management
|
|
228
|
+
│ ├── storage/ # Tahoe-LAFS integration
|
|
229
|
+
│ ├── auth/ # GPG authentication
|
|
230
|
+
│ ├── network/ # Network utilities
|
|
231
|
+
│ └── utils/ # Shared utilities
|
|
232
|
+
├── docker/ # Docker configurations
|
|
233
|
+
├── tests/ # Test suite
|
|
234
|
+
├── docs/ # Documentation
|
|
235
|
+
└── manifests/ # Example manifests
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## Documentation
|
|
239
|
+
|
|
240
|
+
- [Installation Guide](docs/installation.md)
|
|
241
|
+
- [Quick Start Guide](docs/quickstart.md)
|
|
242
|
+
- [Configuration Reference](docs/configuration.md)
|
|
243
|
+
- [Architecture Overview](docs/architecture.md)
|
|
244
|
+
|
|
245
|
+
## Contributing
|
|
246
|
+
|
|
247
|
+
1. Fork the repository
|
|
248
|
+
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
|
|
249
|
+
3. Make your changes
|
|
250
|
+
4. Run tests (`make test`)
|
|
251
|
+
5. Run linting (`make lint`)
|
|
252
|
+
6. Commit your changes (`git commit -m 'Add amazing feature'`)
|
|
253
|
+
7. Push to the branch (`git push origin feature/amazing-feature`)
|
|
254
|
+
8. Open a Pull Request
|
|
255
|
+
|
|
256
|
+
## License
|
|
257
|
+
|
|
258
|
+
This project is licensed under the GPL License - see the [LICENSE](LICENSE) file for details.
|
|
259
|
+
|
|
260
|
+
## Acknowledgments
|
|
261
|
+
|
|
262
|
+
- [Tahoe-LAFS](https://tahoe-lafs.org/) - Distributed storage system
|
|
263
|
+
- [Tinc VPN](https://www.tinc-vpn.org/) - Mesh VPN daemon
|
|
264
|
+
- [Typer](https://typer.tiangolo.com/) - CLI framework
|
|
265
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
redundanet/__init__.py,sha256=alb0XFwGxNY-c3R7wZtFBRluszSmqROQ-Vo7Um1F7Xc,398
|
|
2
|
+
redundanet/__main__.py,sha256=sI1D-Mn0JeICtGPuNLp-uthhIQxOB_6_9Avf1-iOXLQ,151
|
|
3
|
+
redundanet/auth/__init__.py,sha256=BlmLa620gKsRdiD3d8tsDDweA9kI_fTBY9bxM6jtiyU,202
|
|
4
|
+
redundanet/auth/gpg.py,sha256=OG6Gdo19TYzVsyfp9-a8BLxV79gX_P3GcyMe8H_rmh4,9098
|
|
5
|
+
redundanet/auth/keyserver.py,sha256=1zNIOIY62JaAPNWVjZaBHlx2fSN601WsGsR_KizdiAo,6502
|
|
6
|
+
redundanet/cli/__init__.py,sha256=4XqFI3iyLQO6ko2bcSq_OoMvlrk8voMK8twcsHgUziY,89
|
|
7
|
+
redundanet/cli/main.py,sha256=teFau_SP_rb5aDIBNH7vgwcOa8wjXoLW3SoL36kLQZ0,8129
|
|
8
|
+
redundanet/cli/network.py,sha256=K5d03q4t3CBJXEreAQ8WFAsWv2qBhQUIfCE1_1lQcY4,5796
|
|
9
|
+
redundanet/cli/node.py,sha256=z9JyrBdJfpqA7s65_TnyXI_70-7WpH1GlBhG13NfZyM,10161
|
|
10
|
+
redundanet/cli/storage.py,sha256=I-n8NO_x_v7vKp3bx3yxfYNLNHNyOOuXMpl0T4mmZzs,8054
|
|
11
|
+
redundanet/core/__init__.py,sha256=fOx3CxtyI4s2wPmBzAuqkcGq5JLKKS3BvebuUandNBQ,673
|
|
12
|
+
redundanet/core/config.py,sha256=ZlEaR9i1aVHtnWcTE-BHvu3vwpYxd5q0rhlwT6hKh3g,6328
|
|
13
|
+
redundanet/core/exceptions.py,sha256=sCeMw0YU7FFdpZkav5PW64-PTuGUPd2_7TaGlsJh9lY,1835
|
|
14
|
+
redundanet/core/manifest.py,sha256=nW0BEtKEwlh5QQPUCeR8Anya1a8CWJ5-JwBYNW18JBA,12257
|
|
15
|
+
redundanet/core/node.py,sha256=gMtsDVLz1gSZjttoU7jBUQfuQrHV3yDY2ts1yvZL780,4140
|
|
16
|
+
redundanet/network/__init__.py,sha256=8t1sNA9P7xOC_IHN_Tbo0qFakQBTmrriuh-M2fzB41Y,286
|
|
17
|
+
redundanet/network/discovery.py,sha256=37bu-EL5IKnYHxuup1wBJo3498q9stER-yRX3_6TKlk,6261
|
|
18
|
+
redundanet/network/dns.py,sha256=CneCQldM_QmRaJQJKx3YjygRKktfLjT6y3qJFb48tVc,5305
|
|
19
|
+
redundanet/network/validation.py,sha256=DhjnyknkiCd-FYDz30GcewYC-7lMZCfPGGrBm_DpnPg,8952
|
|
20
|
+
redundanet/storage/__init__.py,sha256=a3e4hfWqY-Gczpi-aMlXEKgQIXAO67K5xc3uBn8I1bI,353
|
|
21
|
+
redundanet/storage/client.py,sha256=FIrgpyZe2ovirvGApk73mtVycZDohuk6Dnnc0KxuCCo,9312
|
|
22
|
+
redundanet/storage/furl.py,sha256=z5s_5344JN6lYRxdt35d7PFL0wtLvBaWdG3Pw4ztLbo,5560
|
|
23
|
+
redundanet/storage/introducer.py,sha256=qhGI3lUOrxCYdx3anF8hFd5efSvDu_JKFPQFBcJI3yM,5483
|
|
24
|
+
redundanet/storage/storage.py,sha256=eedGkr4nr6wUHf4UxMOiI9iyhcq-QEba9qLwEL7kJyY,6495
|
|
25
|
+
redundanet/utils/__init__.py,sha256=gGWh6jgJZLZuRUBKXmIxbMMxsy0B6oU5p63UxUHFcO0,392
|
|
26
|
+
redundanet/utils/files.py,sha256=Mo-_TevoDgVpYo_qMvSLx8CBYXWltz66AOMtIJM6sQA,3761
|
|
27
|
+
redundanet/utils/logging.py,sha256=wvun1z7C2doOCDZHZGYLyW63h5V07TrfS9lH0nOeKOg,2779
|
|
28
|
+
redundanet/utils/process.py,sha256=TZQO9bfwKYOu4OApBEFypiQLyWAenowIu-6HVREACw0,6157
|
|
29
|
+
redundanet/vpn/__init__.py,sha256=MB3Bh4xrCCZUoj1d2BkfbbSbmwL7652lMO76Re6dEjk,283
|
|
30
|
+
redundanet/vpn/keys.py,sha256=yTfLpqguTNOZlsvgzMS4vq9WTgVL9AUVTcZbftY6a3w,5326
|
|
31
|
+
redundanet/vpn/mesh.py,sha256=EVdYcQY2reV_UESXRHEUKEIhhSSwaG7u1vvPtV6PDZI,6041
|
|
32
|
+
redundanet/vpn/tinc.py,sha256=u5j2ZMPOjTfXM4LPHjg7NZmYdTF51kg58qTuA7CDtTw,10288
|
|
33
|
+
redundanet-2.0.0.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
34
|
+
redundanet-2.0.0.dist-info/METADATA,sha256=x9hHnnwtCPaRwVWw2bGB0SHyUFs2IK6A6huPCpVH7pc,7252
|
|
35
|
+
redundanet-2.0.0.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
36
|
+
redundanet-2.0.0.dist-info/entry_points.txt,sha256=-0cdQEyYsTHavFdq-k_uws2bxnQrD2Ud0FfllcHGrcw,54
|
|
37
|
+
redundanet-2.0.0.dist-info/RECORD,,
|