Releases: retrixe/octyne
1.3.0
🎉
Minor Changes
- Auto generate users.json on start and fix nits: 927132f
- Transition passwords to Argon2id from SHA256: cf2be06
- Send console error responses over the WebSocket: 41a1d36
- Add transactional file API for mv/cp/rm operations: 61837e2
- Cleanup Quick Start in README: a4fb61c
Patches
- Update Actions, require Go 1.22 to drop mux: 37a2a66
- Add dedicated Validate function for authentication: 28aecc5
- Bump golang.org/x/crypto from 0.25.0 to 0.31.0: 52faa29
- Prerequisite cleanups for transactional file API: 212c871
- Fix macOS CI: 867b678
- Fix deepsource warnings: 796a43a
- Switch to modern Go build constraints: ebc72ec
- Add missing bulk mass action logs to README: e71270c
1.2.1
🎉 Various bug fixes for octynectl + added --config
and --users
CLI options!
Patches
- Log basePath when compressing files: b5006a8
- Support alternate config/users.json locations: 1445d4c
- Fix issue breaking octynectl console commands: edd1623
- Make copy function atomic: e664bba
- Allow multiple consoles per process from a session. Fixes octynectl with multiple consoles, and is the user-friendly option: 6882608
1.2.0
🎉 Octyne 1.2 introduces a brand new Unix socket API which makes the new octynectl
CLI tool for managing Octyne possible! It also:
- adds comments to the configuration file;
- marks servers for deletion when removed from config (instead of simply killing them);
- tracks users.json so users that are deleted can no longer use Octyne's API;
- overhauls the compression API with tar.gz/xz/bz2 support, ability to set
basePath
and async compression (so no more HTTP timeouts when compressing lots of files!); - The API documentation is also fully complete now, along with advice on reverse proxying and security measures to take! Errors are still not fully documented, though, but this is something that can be safely put on the backburner.
v1.2 also ships some bug fixes (e.g. better handling of when gracefully stopped, concurrent safety bugs fixed) which make it highly recommended to upgrade.
Minor Changes
- Implement Unix socket API for local actions: #14
- Support changing group ownership of Unix socket: b0ecf0d
- Support comments in config.json w/ hujson: c57f8f7
- Mark process for deletion, not killing on reload: 4ac4d17
- Stabilise extrainfo API, use object response: 82a80bc
- Invalidate tokens of deleted users: b26d929
- Add API to rename accounts: 372ea55
- Add missing API endpoints, version info to docs: f5277ae
- Add lines between endpoints, descriptions to docs: c0d486b
- Document more endpoints, reverse proxying: c712742
- Finish documenting all endpoints incl files: b85ef9a
- Document advice for account renaming API: 3be6959
- Fix documentation error, note security practices: 2df5b08
- Add tar archive de/compression support to API: c04ce2c
- Add /compress/v2 API endpoint to help clients: 30f9c99
- Add new basePath query param to compression API: 1bbfd2a
- Add new async compression API: c69506b
Patches
- Handle SIGINT/SIGTERM, gracefully stop correctly: 5d28b75
- Disable authentication endpoints over UDS: 8b5f031
- Update README, fix config reload w/ comments: 5155a07
- Fix JSON comments being stripped by PATCH /config: d8079d4
- Yay, concurrent safe
process
properties now. How these flew under the radar, I have no idea, since I tested Octyne with the Golang race detector before too, but well: a56a2ff - Store users.json in memory instead: c665136
- Rename online to status in /servers?extrainfo=true: 78ee131
- Set Content-Type on HTTP JSON responses (fix #16): 1b107cd
- Fix zip vuln, prepare for tar archive support: 2197a47
- Fix broken Redis authentication: 78177cc
x86_64 and 64-bit ARMv8 binaries can be downloaded below for Windows, macOS and Linux (built on Ubuntu 20.04), as well as a 32-bit ARMv6 Linux build. Octyne can also be compiled for other architectures like s390x, PowerPC and i386, and other Unix-like OSes supported by Golang (untested, but if you run into issues, let me know!).
1.1.0
🎉 1.1.0 is a massive release with new features and a plethora of bug fixes and improvements! 🎊
The main highlights are listed below under Minor Changes.
Minor Changes
- Increase upload limit to 5 GB, fix auth response: 7160c2f
- Write native CopyDir implementation: 9934157
- Print logs to stdout and stderr appropriately: 1f83d01
- Add account management: #9
- Add config reload API: #8
- Require Go 1.18+, use Go 1.19 in CI, drop ioutil: 117f2a7
- Made root endpoint return octyne version: c3ba8ab
- Improve Octyne README: e8ea2be
- Support JSON req body for moving/copying files: c2d5d1b
- Add cookie authentication support (closes #10): 6018854
- Add improved console v2 API, console timeouts: 47a8283
- Support gracefully stopping processes through API: 9eac136
- Add action logging: #13
- Support compressing folders in ZIP files: d6599c6
- Add GET /accounts, atomically save users.json: 06bc891
- Add GET and POST /config endpoints: a9e1c39
Patches
- Replace "server" with "process" in most code: 75121df
- Fix deepsource errors, more "server" -> "process": 6aba18d
- Improve error logs, revert console process->server: 3f316c4
- Pass config as pointer, work on more docs: 7827608
- Make authenticator replaceable, add more API docs: 7436b56
- Clean some comments/variables, fix log message: c35dc6e
- Add Close() to Authenticator, fix Redis close: ea1e7ea
- Use fmt.Fprintln for HTTP responses, move code: ac48e84
- Log reloads, fix logout, stats endpoint error: 3cff3da
- Fix errors pointed out by deepsource. Fix file permissions. Silence warning for ZIP file DoS. Silence SendConsoleOutput warning. Add 5s timeout for HTTP requests. Remove unnecessary reference from MemoryAuthenticator function: 242f7c2
- Update GitHub Actions, add Quick Start to README: c32bac6
- Refactor authentication to its own package: 14e7c17
- Split endpoints into more files, httpError util: 234e9e1
- Improve file endpoint sanitation, fix panic: 7ac6704
- Fix endpoint path validation on Windows: 7d302cd
- Don't put token in body when using cookie auth: f78f891
- Return username from authenticator.Validate: 142b114
- Use xsync.MapOf + Go 1.18 generics: e6ce011
- Fix zip compression API, enable caching in CI: 21316b9
- Return errors from authenticator directly: a265b21
- Fix console read timeout, write synchronisation: 76286f6
- Add ARMv6/ARMv8 builds to CI, fix caching: d45cdc7
- Fix console v1 API being broken by last commit: 90879cc
- Fix SIGTERM incorrectly marking process offline: 0e710f6
Credits
Huge thanks to @Sanguineous1 for helping!
x86_64 and 64-bit ARMv8 binaries can be downloaded below for Windows, macOS and Linux (built on Ubuntu 20.04), as well as a 32-bit ARMv6 Linux build. Octyne can also be compiled for other architectures like s390x, PowerPC and i386, and other Unix-like OSes supported by Golang (untested, but if you run into issues, let me know!).
1.0.2
🐛 This is an important bug fix release that you should update to if you are suffering from bugs with in-memory authentication. This also enhances Redis authentication.
- Fixed a deadlock in
/logout
that would break authentication entirely after calling the endpoint when using memory authentication. - Prefix tokens stored in Redis with
octyne-token:
prefix. - Validate token length/encoding before checking with Redis/map to save time.
Patches
- Add prefix to Redis tokens. Allows the Redis database to be used for multiple purposes: 609998d
- Validate token, change Redis prefix. Also silence Deepsource issues: 0e7ee61
- Use Ubuntu 18.04 LTS for Actions, fix in-mem auth. Fix a really interesting accidental deadlock. Store tokens in a map instead of array that doesn't fit the purpose: 3b0f7f9
x86_64 binaries for Windows, macOS and Linux (built on Ubuntu 16.04) are provided, as well as a 32-bit ARMv6 Linux build (built on Raspbian 10 Buster), but octyne can also be compiled for other architectures like 64-bit ARMv8, s390x, PowerPC and i386. It should also work on other Unix-like OSes supported by Golang (untested, but if you run into issues, let me know!).
1.0.1
🎉 1.0.1 is a major milestone, with lots of stability and fixes 🎉
It is recommended to update to 1.0.1 immediately to do away with a lot of bugs. While 1.0.1 is a patch release, it is fairly significant, as Octyne got massive internal changes to make the code far cleaner and resilient. Many bugs have been fixed and many hidden bugs may have been inadvertently fixed. The highlights:
- Bump the requirement in
go.mod
to Go 1.14 since Octyne needed it anyway. - Use Ubuntu 16.04 and Go 1.16 to build Octyne in GitHub Actions.
- Update the Godocs and clean them up.
- Fix race conditions in
connector.Tickets
,server.Clients
,server.Console
andMemoryAuthenticator.tokens
using async.RWMutex
. - Remove unnecessary log to console in
StopProcess
. - Fix the
GET /server/{server}
endpoint being broken. - Convert Authenticator to an interface implemented by MemoryAuthenticator and RedisAuthenticator.
- Fix Redis errors potentially leaving the HTTP client's request open without a response.
- Handle JSON errors correctly when reading
users.json
. - Fix race conditions in
connector.Processes
using async.Map
. - Fix errors being handled incorrectly in ZIP endpoints.
- Fix HTTP requests being failed fast if the Redis pool has no free connections (wait for one to free instead).
- Synchronize writes to console WebSockets and enhance performance using Buffered Channels.
- Use defer to free all mutexes to ensure no deadlocks occur.
- Fix long lines being printed to console causing
scanner
to error, by expanding the line limit to 1 MB and restartingscanner
if it errors.
The changelog is quite big, but overall, 1.0.1 ensures that errors and failures are handled correctly and does away with almost all race conditions \o/ only Process
is not yet fully safe, but work is underway to fix that as well. You can now make more than 5 requests at a time to Octyne+Redis without worrying about a request being dropped, console will no longer break if you print a long line (although over 1 MB it may only print an incomplete line) and you don't have to worry about Octyne crashing, improperly handling an error or needing a restart anymore.
Patches
- Require Go 1.14, use Ubuntu 16.04, update godoc. It required Go 1.14 anyway, since redigo and handlers do too. It also used Go 1.12's ProcessState.ExitCode + mux and websocket libs. Hence, it never actually ran on Go 1.11 properly. Update godoc to remove unnecessary dots and use cleaner language. GitHub Actions: Use Ubuntu 16.04 to ensure the build artifacts work on LTS OSes. Use Go 1.16 to compile octyne for better performance/file size: eb41918
- Fix GitHub Actions, update some comments: 15bdbcf
- Fix races for server.Clients/Console and Tickets. Commented an unnecessary log in StopProcess, Monitor already does it: 74f7a61
- Remove a panic, fix statistics endpoint: ba04daf
- Convert Authenticator to an interface. Create MemoryAuthenticator and RedisAuthenticator. Apart from interfaces: Fix internal server errors with Redis leaving client without response. Use ioutil.ReadFile and handle JSON errors in users.json. Rename connector variable in InitializeAuthenticator. Use sync.RWMutex to control access to Tokens array: 1ce2b5e
- Fix Deepsource, use sync.Map in connector: 5cade33
- Handle zip endpoint errors, wait for Redis conn. Currently, if no Redis connection in pool is free, request fails fast.: f7bf84b
- Fix zip, use channels for fast and safe console. Always use defer to free mutexes. Deadlocks should no longer occur in console. Console performance no longer hampered by slow connections: bb6f37f
- Remove serverVer, fix long lines breaking console: efee897
x86_64 binaries for Windows, macOS and Linux (built on Ubuntu 16.04) are provided, as well as a 32-bit ARMv6 Linux build (built on Raspbian 10 Buster), but octyne can also be compiled for other architectures like 64-bit ARMv8, s390x, PowerPC and i386. It should also work on other Unix-like OSes supported by Golang (untested, but if you run into issues, let me know!).
1.0.0
🎉 Octyne 1.0 is out 🎉
Yes, I promised 1.0 in 2020 :( but master
was already up to date, it was just needing a version bump, then my PC broke, so that delayed the release quite a bit. However, it's out now with a bunch of final refinements 🎊
This release supports configuring ports, finishes the statistic endpoint, uses Go to copy files, fixes copying folders on Windows, adds a compression API and adds a one-time ticket system for browsers to use when connecting to console WebSocket and downloading files. It contains a new system
package for process statistics, copying and zipping files.
Changelog
- Add config option for Octyne port.
- Add a compression API for
zip
files. - Fix
robocopy
to copy folders on Windows. - Use Go to copy files directly on all platforms.
robocopy /E
andcp -r
still used for folders. - Complete statistics endpoint with memory usage, total memory and CPU usage on Windows/macOS/Unix.
- Add one-time ticket authentication system for
WS /server/{server}/console
andGET /server/{server}/file
.
x86_64 binaries for Windows, macOS and Linux are provided, as well as a 32-bit ARMv6 Linux build, but octyne can also be compiled for other architectures like 64-bit ARMv8, s390x, PowerPC and i386. It should also work on other Unix-like OSes supported by Golang (untested, but if you run into issues, let me know!).
1.0.0-beta.2
🎉 Another long overdue release of Octyne (I promise octyne 1.0 before the year ends though)!
Octyne is pretty straightforward, so I don't really work on it very often, so releases are fairly delayed, however recently I've definitely picked up the pace since I use this project a LOT and can use a 1.0 release :^) This one is fairly monumental feature wise, and 1.0 is rather imminent now.
This release incorporates Redis support to share auth tokens between Octyne instances, a lot of security hardening like vulnerability fixes and HTTPS support, ability to disable servers from being auto-started, and fixes to file locking so that Octyne releases files correctly. This is especially important on Windows where mandatory file locking is used and Octyne works perfectly there now.
Changelog
- Added Redis support \o/
- Release file locks correctly in the files API (fixes it on Windows 🎉 )
- Add HTTPS support \o/ (although reverse proxies are preferred due to easy restarts to update cert)
- GET
/servers/{id}
now returns uptime and server status, totalMemory is no longer a bool (wut). - Downloading files is now a secure endpoint, was previously insecure due to Ecthelion.
- Redis connections are now closed properly when Octyne's HTTP server encounters a problem.
- Patched security vulnerability allowing authenticated users to access files outside an app's folder.
./octyne -v
is now aliased to./octyne --version
.- Auto-start when Octyne starts can now be disabled for individual servers.
- Added GitHub Actions and Deepsource (had to add a lot of skip comments).
What's missing for 1.0
- Copying on Windows.
- Alternate token authentication.
- Configurable crash limits and ports.
- Compression endpoints not complete.
- Statistics endpoint to get data like CPU and RAM usage of processes not complete.
x86_64 binaries for Windows, macOS and Linux are provided, but octyne works on other architectures like ARM as well. It should work on other architectures and Unix-like OSes supported by Golang as well (untested, but if you run into issues, let me know!).
1.0.0-beta.1
🎉 first release of octyne (long overdue)!
Octyne allows running multiple apps on a remote server and providing an HTTP API to manage them. This allows for hosting many web servers, game servers, bots and so on on remote servers without having to mess with SSH, using screen
and systemd
whenever you want to make any change, in a highly manageable and secure way.
It incorporates the ability to manage files and access the terminal output and input over HTTP remotely. For further security, it is recommended to use an HTTPS reverse proxy to ensure end-to-end secure transmission.
retrixe/ecthelion complements octyne by providing a web interface to control servers on octyne remotely.
What's missing:
- Windows support not fully tested. Deleting and move/copy not working.
- Redis integration to sync Octyne auth across systems needs to be added.
- Statistics endpoint to get data like CPU and RAM usage of processes not implemented.
- Configurable crash limits and option to prevent some servers from starting by default.
- Compression endpoints not complete.
x86_64 binaries for Windows and Linux are provided, but octyne can be compiled for and will work on macOS. It should work on other architectures supported by Golang as well.