bit-backup/README.md
2023-08-08 18:24:48 +02:00

186 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# bit-inspector
"Bit Inspector" (Bir) is a tool to manage files.
* It is inspired by Git, but its goals are slightly different.
Features
* Tracking hash sum of files
* Backing up directory to another location (local, FTP(S), SFTP, HTTP(S), S3, Bir server
* Optionally you can set a password to protect your files (if a not trusted external location like FTP or S3 is used)
* Detecting bit rots (to keep your files forever) - found bit rots can be repaired.
* Files are handled in a "Bir repository"
* You can clone a remote repository
* You can save your local repository to a remote repository.
* Your files are versioned. You can travel in history and return to an older version of the whole repo or only a directory or one file.
What is not supported:
* Conflict resolution is not supported. "Bir" is not intended be used by more users at once.
* Several people changing one Bir repository must be avoided.
* One Bir repository can be used by more users, but only one user can change it.
* Branches are not supported
## Requirements
Requirements to run "Bit Inspector":
* Java 19
## How to build "Bit Inspector" on your own
Requirements to build "Bit Inspector:
* Java 19
* Maven
```
git clone https://code.nanoboot.org/nanoboot/bit-inspector
cd bit-inspector
mvn clean install
```
## How to setup your environment on Linux
Add to your .bashrc:
alias bir='java -jar {path to bit-inspector jar with dependencies file}/bit-inspector-0.0.0-SNAPSHOT-jar-with-dependencies.jar'
## Syntax
bir {command} [{arg1} {arg2} {argn}]
Example:
```
bir clone dir=/home/johndoe/mydir url={local path or s3 bucket or FTP server or website url}
```
### Arguments
dir={path to directory}
* default:. (current working directory)
## Bir repository
To use Bir, a Bir repository is needed.
You can:
* clone a remote Bir repository
* or use an existing local Bir repository
* or create a new empty Bir repository
* or create a new Bir repository using an existing directory
### Cloning a remote repo
#### Local
```
bir clone {path to local directory = Bir repository}
```
#### S3
```
bir clone s3://http[s]://{endpoint url}/{bucket name}
```
Then you will be asked for access key and secret key.
#### FTP/FTPS/SFTP
```
bir clone {protocol}://[{user}:{password}]@{host url}:{port}/{directory}
```
#### HTTP/HTTPS
```
bir clone http[s]://[{user}:{password}]@{host url}:{port}/{directory}
```
#### Bir server (via Rest api)
```
bir clone bir:://[{user}:{password}]@{host url}:{port}/[path to repository/]{repository name}
```
### Using an existing Bir repository
### Creating a new empty Bir repository
Go to wanted directory or use argument dir={path to wanted directory} and run:
```
bir init [dir to wanted directory]
```
### Creating a Bir repository using an existing directory
Go to wanted directory or use argument dir={path to wanted directory} and run:
```
bir init [dir to wanted directory]
```
### Commands
### init
Init commands creates new directory .bir with its structure
```
bir init [dir={path to directory}]
```
bir object storage local/s3/ftp
bir remote add {remote name}
bir clone {remote name}
bir save
bir push {remote name}
bir fetch
bir pull
bir status
directories:
.bir
.bir objects
Table FILE add new columns linux_rights, owner, group
###
## Structure of .bir directory
.bir
.bir/objects
.bir/bir.sqlite3 ... an SQLite database
.bir/.bir.sqlite3.sha512 ...last calculated hash sum of file ".bir.sqlite3".
## File .birignore
You can create file .birignore containing the names of the files/directories you wish to ignore
* each line should contain exactly one name
* lines starting with # are skipped
* you may use Unix shell-style wildcards
## Detection of bit rots
If the file last modification date in database and on the disk are the same, but the calculated checksum is different, then a bit rot was is probably detected.
New files are added to the database, deleted files are removed from the database.
This program cannot restore files with bitrot.
* You have to backup up your files (do snapshots).
It is inspired by:
* https://github.com/ambv/bitrot
* https://github.com/laktak/chkbit-py
## Todo
New tables: FILE_HISTORY