Release: brig 0.2.0: distributed, versioned & secure file synchronization

Hello IPFS folks,

I’m finally releasing my synchronisation application »brig« which is build on-top of IPFS in version 0.2.0.
It has been a bumpy road development-wise and it took me longer than anticipated, since development
turned out to be quite exhausting. It’s still in some sort of open beta phase (it’s 80% finished!),
but unless you trust it all your files it shouldn’t do any harm. It has quite a few rough edges,
but now it needs YOU (yes, you!) to make it past the beta phase.

What is brig?

If you’re wondering what the heck »brig« is, here’s a line from the docs:

»brig is a distributed & secure file synchronization tool with version control.
It is based on IPFS, written in Go and will feel familiar to git users.«

You can find more details (including a feature list) in the documentation.

Future

The development of brig has reached a point where it does not make any sense
anymore to develop it without any help from the community. I hope to find some
users (read: crash dummies) that help me see issues with the current design of
brig, its ongoing development and my possible tunnel vision. I’m of course also
happy with any help regarding development, be it pull requests or discussions.

There are currently many areas that deserve to be worked on:

  • Validate how IPFS is used and fix any bad usage patterns.
  • Error handling regarding remotes and network timeouts.
  • Performance in transferring files can have big timeouts.
  • Making progress information available when “downloading” a file.
  • Feature: Live-changes through PubSub. The base for this feature is already implemented.
  • For more and “bigger” ideas, see the ROADMAP.

Performance is currently really a constraint to make it a smooth sail.
A lot of brig was developed while commuting in the train, therefore I spend more time on
offline operations than on fiddling with network setups (try that while sitting in a train :wink:).
I’m sure you guys will find quite a lot for improvement, especially regarding transfer speed.

Enough talk, go to the documentation and see if »brig« is interesting to you.

Looking forward to any feedback or help,
~Chris

P.S: Feel free to email me at “ed.enilno@bihas” (reversed for spam protection) for any questions.
Anything that should be visible in public (like bug reports etc.) should go to the issue tracker.

6 Likes

hi,

maybe you can propose promote your product in this platform https://github.com/ipfs/awesome-ipfs.

Regards.

@josselinchevalay: There is already a PR for this. It has not been accepted yet.

hi,

yep need reviewers on that

Regards

I’ll try to help. I might find uses for it and blog about it.

1 Like

@godparticle: Thanks. Would be glad to see a blog article.

Hi Chris @sahib , thanks for the great effort on brig!

One specific question: Does it work on OSX already?

From the official documentation, I only get this:
“Implement alternative to fuse: FUSE currently only works on Linux and is therefore not usable outside of that.”

PS: IPFS FUSE supports MAC OSX through OSXFUSE

Hi @HenryFMa,

Does it work on OSX already?

I did not test it on OSX. I tried making FUSE optional with the use of Go’s build tags though,
so it’s worth to just trying to compile it and see if it breaks. If not, I encourage to open an issue on GitHub.

“Implement alternative to fuse: FUSE currently only works on Linux and is therefore not usable outside of that.”

I currently only list Linux there, since it is the only platform I can test on, since I don’t down any OSX compatible device.
For everything else I have to rely on input from the community.

PS: IPFS FUSE supports MAC OSX through OSXFUSE

IPFS actually use the same library (bazil/fuse). So it might be relatively easy to support OSX.

@sahib, thanks for the clear reply.

Here’s some input from my try:

  • The initial installation gave error.

$ go get -d -v -u GitHub - sahib/brig: File synchronization on top of ipfs with git like interface & web based UI
$ cd $GOPATH/src/github.com/sahib/brig
$ make
time go install -ldflags
"
-X “github.com/sahib/brig/version”.Major=0
-X “github.com/sahib/brig/version”.Minor=3
-X “github.com/sahib/brig/version”.Patch=0
-X “github.com/sahib/brig/version”.ReleaseType=
-X “github.com/sahib/brig/version”.BuildTime=date -u '+%Y-%m-%dT%H:%M:%S%z'
-X “github.com/sahib/brig/version”.GitRev=git rev-parse HEAD
"
brig.go
github.com/sahib/brig/server
server/base.go:462:32: too many arguments in call to fuse.NewMountTable
have (github.com/sahib/brig/catfs”.FS, mountNotifier)
want (
github.com/sahib/brig/catfs”.FS)
real 0m5.557s
user 0m0.862s
sys 0m0.764s
make: *** [build] Error 2
$ go version
go version go1.11.5 darwin/amd64

PS: go get … didn’t work in my environment, and i tried to git clone it directly. Not sure whether they are somehow different.

$ go get -d -v -u GitHub - sahib/brig: File synchronization on top of ipfs with git like interface & web based UI
GitHub - sahib/brig: File synchronization on top of ipfs with git like interface & web based UI (download)
cd .; git clone GitHub - sahib/brig: File synchronization on top of ipfs with git like interface & web based UI ~/go/src/github.com/sahib/brig
Cloning into ‘~/go/src/github.com/sahib/brig’…
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
package github.com/sahib/brig: exit status 128


git clone GitHub - sahib/brig: File synchronization on top of ipfs with git like interface & web based UI sahib/brig --verbose
Cloning into ‘sahib/brig’…
POST git-upload-pack (631 bytes)
remote: Enumerating objects: 414, done.
remote: Counting objects: 100% (414/414), done.
remote: Compressing objects: 100% (246/246), done.
remote: Total 32195 (delta 229), reused 287 (delta 167), pack-reused 31781
Receiving objects: 100% (32195/32195), 115.50 MiB | 3.57 MiB/s, done.
Resolving deltas: 100% (17772/17772), done.
Checking out files: 100% (10928/10928), done.
MaHenrys-iMac:workspaces mz$ cd sahib/brig/

  • After some troubleshooting, got some version installed:

$ brig version
Client Version: v0.2.0+88cb062
Client Rev: 88cb062b2154e493f5bfc2f132f6330d4591f3d8
Server Version: v0.2.0+88cb062
Server Rev: 88cb062b2154e493f5bfc2f132f6330d4591f3d8
Backend (ipfs) Version: 0.4.18
Backend (ipfs) Rev:
Build time: 2019-02-15T08:25:02+0000

Which gave something as below when trying to mount:

$brig mount ~/data
17.02.2019/12:16:43 :zap: Failed to mount: brig was compiled without fuse support

Conclusion so far: Not able to fully compile/install successfully.

The initial installation gave error.

My bad, updated the fuse part without updating the stub part. I pushed a fix to the master branch.

PS: go get … didn’t work in my environment, and i tried to git clone it directly. Not sure whether they are somehow different.

No idea about that. But might be related to slow/flaky internet connections. Does not look to me like it’s brig or even Go related (that’s only a gut feeling though).

Which gave something as below when trying to mount:

Currently the fuse mount is only built on linux, so this is kinda expected. Other platforms will only build a stub that will return the error you saw above on every call. I just enabled it to be build on other platforms. Please try again after a git pull.

Conclusion so far: Not able to fully compile/install successfully.

Thanks for trying though.

Currently the fuse mount is only built on linux, so this is kinda expected. Other platforms will only build a stub that will return the error you saw above on every call. I just enabled it to be build on other platforms. Please try again after a git pull.


Just tried with a new go get(which worked this time in a faster connection), but one new error unfortunately.

$ go get -d -v -u GitHub - sahib/brig: File synchronization on top of ipfs with git like interface & web based UI
GitHub - sahib/brig: File synchronization on top of ipfs with git like interface & web based UI (download)
$ cd $GOPATH/src/github.com/sahib/brig
$ make
time go install -ldflags
"
-X “github.com/sahib/brig/version”.Major=0
-X “github.com/sahib/brig/version”.Minor=3
-X “github.com/sahib/brig/version”.Patch=0
-X “github.com/sahib/brig/version”.ReleaseType=
-X “github.com/sahib/brig/version”.BuildTime=date -u '+%Y-%m-%dT%H:%M:%S%z'
-X “github.com/sahib/brig/version”.GitRev=git rev-parse HEAD
"
brig.go
github.com/sahib/brig/fuse
fuse/directory.go:87:15: undefined: fuse.ENODATA
fuse/directory.go:114:20: undefined: fuse.ENODATA
real 0m17.787s
user 0m1.673s
sys 0m1.606s
make: *** [build] Error 2

Thanks! And wish I have been familiar with Go already to help more. :slight_smile:

Just tried with a new go get(which worked this time in a faster connection), but one new error unfortunately.

Seems like ENODATA is not exposed on OSX by bazil/fuse.
I changed the error code to EIO for now. Please try again.

Good news that it seems like fully compiled/installed successfully now.

$ go get -d -v -u GitHub - sahib/brig: File synchronization on top of ipfs with git like interface & web based UI
GitHub - sahib/brig: File synchronization on top of ipfs with git like interface & web based UI (download)
$ cd $GOPATH/src/github.com/sahib/brig
$ make
time go install -ldflags
"
-X “github.com/sahib/brig/version”.Major=0
-X “github.com/sahib/brig/version”.Minor=3
-X “github.com/sahib/brig/version”.Patch=0
-X “github.com/sahib/brig/version”.ReleaseType=
-X “github.com/sahib/brig/version”.BuildTime=date -u '+%Y-%m-%dT%H:%M:%S%z'
-X “github.com/sahib/brig/version”.GitRev=git rev-parse HEAD
"
brig.go

real 0m28.764s
user 0m5.710s
sys 0m2.465s
$ brig help
NAME:
brig - Secure and decentralized file synchronization

USAGE:
brig [global options] command [command options] [arguments…]

VERSION:
v0.3.0+16ab7f2 [buildtime: 2019-02-20T01:01:33+0000] (client version)

Thanks a lot!