diff --git a/README.md b/README.md index 43741a3..3145b56 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,105 @@ # netgiv -TBD +## What is this? + +`netgiv` is a single binary client and server to facilitate sending files across +your local network quickly and easily. + +It uses a familiar unix pipeline paradigm, so files can be moved between machines +as part of a pipeline, obviating the need for dealing with temporary files. + +`netgiv` automatically detects "copy" (stdin is a pipe) or "paste" (stdout is a pipe) modes, allowing intuitive use like: + + host-A$ pg_dumpall | netgiv + + host-B$ netgiv | psql restoredb + +Note that since netgiv uses a persistent server, there is no need to setup both ends +of the pipeline in advance. + +All data is encrypted in flight (though not in the temporary files on the server). Access to the server is granted by an authentication token (preshared key) of your +choice. + +## Install + +### Binary release + +Grab the appropriate version from https://github.com/tardisx/netgiv/releases, unzip +and place the binary somewhere on your $PATH. + +### Compiling from source + + go install github.com/tardisx/netgiv@latest + +`netgiv` should end up on your go binary path. + +### Compiling from source + +Clone this repository, run `go build`. + +## Configuration + +Configuration of `netgiv` is via a YAML configuration file in $HOME/.netgiv/config.yaml. + +Run `netgiv --help-config` for a sample config file. + +The server requires the 'authtoken' and 'port' configuration keys to be set. + +The client requires the 'authtoken', 'port' and 'address' configuration keys to be +set. + +* `authtoken` - this is any arbitrary string, you should choose something not easy to + guess or type +* `port` - this is the TCP port the server will listen on (and that the client will + connect to) +* `address` - the IP address or hostname of the `netgiv` server + +## Running + +To run a server, just run: + + netgiv --server + +`netgiv` will run in the foreground and log accesses to it. + +On any client, run: + + echo "Hello" | netgiv + +To check for success, try: + + netgiv | cat + +You should see "hello" echoed on your terminal. + +To check the list of files on the server: + + netgiv -l + +### Alternative ways of providing the authtoken + +It's possible that you do not trust the hosts you are running the `netgiv` client on, +or otherwise not want to store your authtoken in a file on there. If that is the case +there are a couple of alternate options: + +#### ENV var + +The environment variable NETGIV_AUTHTOKEN can be used to provide the authtoken. A +common way to leverage this is to send it when you ssh to a remote host via the SendEnv option of ssh. + +#### Interactive + +If the authtoken has not been set by any of the above methods, it will be prompted +for interactively (it will not be echoed to the screen). + +# Other notes + +## Temporary file storage + +The `netgiv` server will store files in your normal system temporary dir. They will +be deleted when the server shuts down (SIGTERM). + +## Window support + +Windows support is marginal, at best, mostly because of the lack of POSIX style +pipes. Bug reports and suggestions for workarounds are welcome.