A mirror of late Dmitry Zuikov's hbs2 peer-to-peer storage. https://hbs2.net
Go to file
Dmitry Zuikov 76a5644edc updated readme 2023-03-25 07:49:25 +03:00
.fixme pr accepted 2023-03-25 06:39:16 +03:00
docs hbs2-git: lotsa stuff 2023-03-24 19:54:07 +03:00
hbs2 hbs-git alpha 2023-03-23 20:48:44 +03:00
hbs2-core hbs-git alpha 2023-03-23 20:48:44 +03:00
hbs2-git devlog 2023-03-24 20:49:30 +03:00
hbs2-peer hbs2-git: lotsa stuff 2023-03-24 19:54:07 +03:00
hbs2-storage-simple write optimization 2023-03-24 11:01:43 +03:00
hbs2-tests hbs-git alpha 2023-03-23 20:48:44 +03:00
nix/peer .fixme/log 2023-03-23 21:39:23 +03:00
.envrc init 2023-01-10 09:20:05 +03:00
.gitignore devlog 2023-02-12 08:47:59 +03:00
README.md updated readme 2023-03-25 07:49:25 +03:00
cabal.project peer credentials 2023-02-02 15:05:06 +03:00
code-of-conduct added CoC 2023-03-04 16:39:34 +03:00
flake.lock fixme/config 2023-02-28 08:11:17 +03:00
flake.nix github pr #7 accepted 2023-03-25 06:38:19 +03:00
hie.yaml peer credentials 2023-02-02 15:05:06 +03:00

README.md

How to run hbs2-peer

hbs2-peer run [-c config]

config is a path to a directory with hbs2-peer config.

By default it is $HOME/.config/hbs-peer

How make a pull request

Since the goal of this project is to move away from centralized services, pull requests should be done by decentralized fashion.

It may seem like there are too many steps here below, but it's a full setup for creating a new distributed repo, subscribing to changes and distributing your own changes. So its a complete setup from the scratch to use distributed repos with hbs2. You don't need them all if you have already set it up once.

In short:

  1. Setup the hbs2
  2. Make it listen the reflog for the repo
  3. Clone the repo from hbs2
  4. Create a new keypair
  5. Create a new reflog with the keypair
  6. Export the repo to a new reflog
  7. Add the repo as a new git remote
  8. Work with git as usuall, push to the new created repo

Each update is subscribed with the private key from the keypair, so only the person who has the private key may update the reflog. In fact, public key IS the reflog, and the private key is a proof of ownership.

Full procedure:

  1. Download, install and run hbs2 project. On this stage of the project it is supposed that you are able to install the project using the flake.nix.

    Right now, it will take a time, so be ready to it.

  2. Optional*. Make hbs2-peer poll this topic:

echo poll reflog 1 "2YNGdnDBnciF1Kgmx1EZTjKUp1h5pvYAjrHoApbArpeX" >> <your-hbs2-peer-config>

is typically ~/.config/hbs2-peer/config but it may vary up to setup

  1. Fetch the reflog (topic) for the repo:
hbs2-peer reflog fetch 2YNGdnDBnciF1Kgmx1EZTjKUp1h5pvYAjrHoApbArpeX

If you have the set up as in step 3, it will be done periodically and upon hbs2-peer start, so you don't have to bother. Also, hbs2-peer after step 3 will listen the reflog, so new pushes will be delivered automatically.

  1. Check the reflog is here:
hbs2-peer reflog get 2YNGdnDBnciF1Kgmx1EZTjKUp1h5pvYAjrHoApbArpeX

Note, that it may take time to all objects to deliver.

  1. Clone the project
git clone hbs2://2YNGdnDBnciF1Kgmx1EZTjKUp1h5pvYAjrHoApbArpeX hbs2
  1. Create your own topic
hbs2 keyring-new > my-keyring.key
hbs2 keyring-list my-keyring.key

[user@host:~]$ hbs2 keyring-list my-keyring.key
sign-key:  6CMRnptW8DjiW4S1kv3U6wEAUGwhZmG7522fsqi3SH2d
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
this is your new repo's relog (topic)
Of course, sign-key will be different.

Keep the keyring file private. It contains the key pair (private+public keys) that wilyl allow you to write to the reflog. If you lose it, you will lose the write access to your repo. It's not a big deal, creating keypairs is cheap. But you will need to tell anyone update theirs references to a new repo.

  1. Export the repo to the new reflog (topic).
git hbs2 export <sign-key> -k <keyring-file>

In this example, sign-key will be 6CMRnptW8DjiW4S1kv3U6wEAUGwhZmG7522fsqi3SH2d will be my-keyring.key

This step will export all objects to the new created topic.

It will take time. hbs2-git will copy all objects from the repository to a new reflog. Although it wan't create objects that are already in the hbs2, it takes time to calculate hashes and check it out. So be prepared to wait quite a while, but only for the first time.

  1. Locate the configuration file and add the keyring

Example:

[user@host:~]$ cat ~/.config/hbs2-git/w/hbs2/config

branch "master"

keyring "/home/user/secrets-dir/my-keyring.key"

Note, that keyring file must be absolute. And the location supposed to be safe.

In my case, it's a mounted encrypted directory, but it's up to you.

  1. Add the new repo to a git
git remote add mytopic hbs2://<sign-key>

Example:

git remote add mytopic hbs2://6CMRnptW8DjiW4S1kv3U6wEAUGwhZmG7522fsqi3SH2d

git fetch origin
git fetch mytopic

You may want to have your's topic as an origing, and other topic as something else. It's all up to you.

  1. Make your changes

  2. Commit

  3. Describe your changes somewhere, using PR: prefix

See .fixme/config file to get an idea what files are scanned for issues/pull requests/etc.

PR is a just a fixme entry (look for fixme description) which describes the pull requests. It just a text with textual references to a branch, commit and other information required for merging the changes.

Example:

docs/.../some-pr-file

PR: my-very-first-pr
  Just to test the concept. It may be merged from the
  branch

  branch: pr-XXX-my-very-first
  commit: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  1. Commit

  2. Push

git push mytopic

Now, if the author of the original topic (reflog, repo) is aware abour your topic and subscribed to if (added it as a remote to his/her git repo) they will be able to receive and merge your pull requests.

  1. Check the reflog (just for in case)
hbs2-peer reflog get <sign-key>

How to launch a peer

Example:


hbs2-peer run -p .peers/1  -k .peers/1/key -l addr:port -r rpcaddr:rpcport

Как сохранять зашифрованный файл

keyring-new > kr
keyring-list kr
; создаём файл со списком публичных ключей
; строчки из выхлопа команды keyring-list
groupkey-new path/to/file/with/list/of/pubkeys > groupkey
store --groupkey groupkey file/to/store
; получаем хэш
cat --keyring kr <хэш>