3
3
4
4
** R** epeatable ** I** /** O** .
5
5
6
- Rio is part of the [ Timeless Stack] ( https://github.com/polydawn/timeless ) --
7
- it handles packing, unpacking, syncing, copying, and hashing of Filesets.
8
-
9
- In other words, Rio is tooling for repeatable, reproducible, filesystem I/O and transport.
6
+ Rio is tooling for repeatable, reproducible, filesystem I/O and transport.
10
7
It's both a command line tool, and usable as a series of libraries.
11
8
12
- (You may also want to check out [ Repeatr] ( https://github.com/polydawn/repeatr ) ,
13
- which is the container executor in the Timeless Stack -- it uses Rio under the hood
14
- to provide snapshotting and decentralized sync of container filesystem images.)
9
+ Rio is part of the [ Timeless Stack] ( https://repeatr.io ) --
10
+ it handles packing, unpacking, syncing, copying, and hashing of Filesets.
11
+
12
+ You may also want to check out [ Repeatr] ( https://github.com/polydawn/repeatr ) ,
13
+ which is the container executor in the Timeless Stack (it uses Rio under the hood
14
+ to provide snapshotting and decentralized sync of container filesystem images);
15
+ and [ Reach] ( https://github.com/polydawn/reach ) , which provides pipelining tooling
16
+ for managing both Rio and Repeatr with less copy-pasting of hashes.
15
17
16
18
17
19
What?
18
20
-----
19
21
22
+ ### example of packing
23
+
20
24
Okay, by example:
21
25
22
26
```
@@ -29,6 +33,8 @@ It also gave you a hash on stdout. That's a
29
33
[ content-addressable] ( https://en.wikipedia.org/wiki/Content-addressable_storage )
30
34
ID of the pack you just created.
31
35
36
+ ### example of unpacking
37
+
32
38
You can use that ID later to unpack things:
33
39
34
40
```
@@ -43,19 +49,20 @@ Why is this neat?
43
49
You can put that packed data on any server, anywhere, and fetch it again by hash.
44
50
The hash makes it immutable, and reproducible, even if you don't control the storage.
45
51
46
- Turning it up to 11
47
- -------------------
52
+ ### example of packing to remote storage and using content-addressing
48
53
49
54
```
50
- rio pack tar /tmp/something/ --target=ca+32 ://mybucket.s3.amazonaws.com/assets/
55
+ rio pack tar /tmp/something/ --target=ca+https ://mybucket.s3.amazonaws.com/assets/
51
56
```
52
57
53
58
Same drill except... we just:
54
59
55
60
- uploaded to a cloud storage host
56
- - without a specific name -- the hash is used to organize storage
61
+ - without a specific name -- the hash is used to organize storage (note the "ca+" segment of the url).
57
62
- and still got the same hash.
58
63
64
+ ### example of unpacking from remote storage while using content-addressing
65
+
59
66
Now, hand that hash to someone else:
60
67
61
68
```
@@ -64,3 +71,18 @@ rio unpack tar:879UrF8j7E[...]udF57KpF8 \
64
71
```
65
72
66
73
They get your files. Boom. Huge amounts of data. Just one handle to copypaste: that hash.
74
+
75
+
76
+ Building
77
+ --------
78
+
79
+ Rio is built in Golang and uses git submodules to track libraries by hash.
80
+
81
+ To build Rio, first get the submodules, then set up GOPATH, then use go:
82
+
83
+ ```
84
+ git submodule update --init
85
+ GOPATH=$PWD/.gopath go install ./...
86
+ ```
87
+
88
+ You may find the [ ` gof ` ] ( https://github.com/warpfork/gof ) script makes this more convenient.
0 commit comments