Borg
Borg is a command-line tool for collecting resources from various URIs (like Git repositories and websites) into a unified format.
Installation
You can install Borg using go install:
go install github.com/Snider/Borg@latest
Usage
Borg provides several subcommands for collecting different types of resources.
borg collect
The collect command is the main entry point for collecting resources. It has several subcommands for different resource types.
borg collect github repo
This command collects a single Git repository and stores it in a DataNode.
./borg collect github repo https://github.com/Snider/Borg --output borg.dat
borg collect github release
This command downloads and packages the assets from a GitHub release.
./borg collect github release https://github.com/Snider/Borg/releases/latest --output borg-release.dat
borg collect pwa
This command collects a Progressive Web App (PWA) from a given URI.
./borg collect pwa --uri https://squoosh.app --output squoosh.dat
borg collect website
This command collects a single website and stores it in a DataNode.
./borg collect website https://example.com --output example.dat
borg all
The borg all command collects all public repositories from a GitHub user or organization.
./borg all https://github.com/Snider --output snider.dat
borg compile
The borg compile command compiles a Borgfile into a Terminal Isolation Matrix.
./borg compile --file Borgfile --output a.tim
borg run
The borg run command executes a Terminal Isolation Matrix.
./borg run a.tim
borg serve
The borg serve command serves a DataNode or Terminal Isolation Matrix using a static file server.
./borg serve my-collected-data.dat --port 8080
borg decode
The borg decode command decodes a .trix or .tim file.
./borg decode my-collected-data.trix --output my-collected-data.dat
Formats
Borg supports three output formats: datanode, tim, and trix.
DataNode
The datanode format is a simple tarball containing the collected resources. This is the default format.
Terminal Isolation Matrix (TIM)
The Terminal Isolation Matrix (tim) is a runc bundle that can be executed in an isolated environment. This is useful for analyzing potentially malicious code without affecting the host system. A .tim file is a specialized .trix file with the tim flag set in its header.
To create a TIM, use the --format tim flag with any of the collect subcommands.
./borg collect github repo https://github.com/Snider/Borg --output borg.tim --format tim
Trix
The trix format is an encrypted and structured file format. It is used as the underlying format for .tim files, but can also be used on its own for encrypting any DataNode.
To create a .trix file, use the --format trix flag with any of the collect subcommands.
./borg collect github repo https://github.com/Snider/Borg --output borg.trix --format trix --password "my-secret-password"
Encryption
Both the tim and trix formats can be encrypted with a password by using the --password flag.
Decoding
To decode a .trix or .tim file, use the decode command. If the file is encrypted, you must provide the --password flag.
./borg decode borg.trix --output borg.dat --password "my-secret-password"
If you are decoding a .tim file, you must also provide the --i-am-in-isolation flag. This is a safety measure to prevent you from accidentally executing potentially malicious code on your host system.
./borg decode borg.tim --output borg.dat --i-am-in-isolation