A Go implementation of distribusi
Go to file
decentral1se 9a58f7fd7c
refactor: be explicit with Required
2022-02-06 03:32:08 +01:00
.gitea/issue_template refactor: less bureaucracy, just use labels 2022-02-04 12:04:44 +01:00
.gitignore feat: run web server first 2022-02-04 19:27:50 +01:00
.goreleaser.yaml build: ignore other types of commit message 2022-02-04 19:53:38 +01:00
AUTHORS.md docs: quote & sort 2022-02-04 13:38:54 +01:00
LICENSE docs: add new authors to license 2022-02-04 13:43:25 +01:00
Makefile feat: x-platform publishing 2022-02-04 17:01:30 +01:00
README.md feat: support scp publishing 2022-02-06 03:31:47 +01:00
distribusi.go refactor: be explicit with Required 2022-02-06 03:32:08 +01:00
distribusi_test.go test: start on the test suite 2022-02-05 18:04:12 +01:00
go.mod feat: support scp publishing 2022-02-06 03:31:47 +01:00
go.sum feat: support scp publishing 2022-02-06 03:31:47 +01:00

README.md

distribusi-go

This is still very experimental, please take a backup of your archives if you are running it on files you care about. It hasn't been tested on large archives. There are probably some pretty bad bugs lurking in there. It may still thrash files. Please report issues as you find them 💯 Thanks for testing!

A Go implementation of distribusi.

If you're migrating from the Python version or have experience using it, here are the differences in distribusi-go:

  • It's simpler to install on your computer, just download the binary, chmod +x and run it 💯

  • There is no need to install Pillow for handling images, that is now built-in. The only external dependency is exiftool for image captions from embedded metadata. If you don't have exiftool installed, then it gracefully skips that feature. So, you don't need to install anything else to run distribusi now 🙏

  • The command-line interface is quite different. There are less optional flags and more defaults. I shuffled a number of things around according to my preferences (open to changes, please open a ticket). For example, I always like my images to be thumbnail'd. There's a handy web server built-in now, just run with -s 🤘

Install

🍾 distribusi-go has enterprise cross-platform support! 🍾

If your platform isn't listed below, please see the entire listing. If you can't find it there, we can probably add support for it (see $GOOS/$GOARCH on go.dev), please open a ticket. Package manager installation methods are planned for Some Time Soon ™️ (e.g. apt install distribusi, see this ticket to track)

GNU/Linux

GNU/Linux (amd64)
curl https://vvvvvvaria.org/~decentral1se/distribusi-go/0.1.0-alpha/distribusi_linux_amd64/distribusi -o distribusi
chmod +x distribusi
./distribusi -h # check things work
GNU/Linux (386)
curl https://vvvvvvaria.org/~decentral1se/distribusi-go/0.1.0-alpha/distribusi_linux_386/distribusi -o distribusi
chmod +x distribusi
./distribusi -h # check things work
GNU/Linux (arm64)
curl https://vvvvvvaria.org/~decentral1se/distribusi-go/0.1.0-alpha/distribusi_linux_arm64/distribusi -o distribusi
chmod +x distribusi
./distribusi -h # check things work

Mac OS X

Mac OS X (amd64)
curl https://vvvvvvaria.org/~decentral1se/distribusi-go/0.1.0-alpha/distribusi_darwin_amd64/distribusi -o distribusi
chmod +x distribusi
./distribusi -h # check things work
Mac OS X (arm64)
curl https://vvvvvvaria.org/~decentral1se/distribusi-go/0.1.0-alpha/distribusi_darwin_arm64/distribusi -o distribusi
chmod +x distribusi
./distribusi -h # check things work

Windows

Windows (amd64) I've no idea how you even install this on Windoze! Maybe you can help by sending a documentation patch? 🙏

https://vvvvvvaria.org/~decentral1se/distribusi-go/0.1.0-alpha/distribusi_windows_amd64/distribusi.exe

Windows (386) I've no idea how you even install this on Windoze! Maybe you can help by sending a documentation patch? 🙏

https://vvvvvvaria.org/~decentral1se/distribusi-go/0.1.0-alpha/distribusi_windows_386/distribusi.exe

Quick start

Run distribusi-go on <path> and serve it locally for viewing:

./distribusi -p <path> -s

If you want to ignore certain paths, you can use -i/--ignore:

./distribusi -p <path> -s -i '*.gif, *.md, mydir'

It supports a list of patterns in a comma separated list, wildcards work, more on pkg.go.dev.

If you run into issues, run with -d/--debug. All debug logs are stored in a time stamped log file under /tmp/.

ls /tmp/ | grep -i distribusi
distribusi-go-20-25-492637114356

If you have SSH access to a server, you can publish your files with -P/--publish.

It works just like scp does:

./distribusi -p <path> -P <server>:<remote-path>

See this short guide for help with SSH issues.

✌️

Hacking

You'll need Go >= 1.11 installed. Run make to build a new ./distribusi executable.

If you wanna learn Go, I've got this book, feel free to take a loan of it 😀

Release

Currently, you have to be @decentral1se to do this:

git tag <version>
VERSION=<version> make release

You can build a local-only release by running this:

goreleaser release --snapshot --rm-dist

Binaries are in dist/.

Acknowledgements

AUTHORS.md

License

LICENSE

Tips

SSH guide for -P/--publish

If you already know & use scp then -P/--publish should Just Work ™️ If not, read on for some tips on how to configure your SSH client to help distribusi-go make SSH connections successfully.

The simplest way to make sure distribusi can make an SSH connection with your server is to match a ~/.ssh/config entry with the -P <server>:... server value you pass on the command-line.

If you want to run ./distribusi -p <path> -P varia.zone:/var/www/, then a matching ~/.ssh/config entry might look like this:

Host varia.zone
  Hostname varia.zone
  User decentral1se
  Port 22
  IdentityFile ~/.ssh/<ssh-secret-key-part>

This tells distribusi-go everything it needs to know to make a successful SSH connection. Run with -d/--debug for extra help figuring out what connection details are being used.

If you have a secret protected SSH key then make sure you've got a running ssh-agent and have added the key with the following:

eval $(ssh-agent -k)
ssh-add ~/.ssh/<ssh-secret-key-part>
ssh-add -L # see loaded keys