Skip to content

v1

Choose a tag to compare

@github-actions github-actions released this 26 Oct 14:30
· 16 commits to develop since this release

Added

  • Support relative file paths for the Wings config (#180)

Fixed

  • Folders not being sorted before files properly (#5078

Fixed

Fixed

  • Archives randomly ignoring files and directories (#5027)
  • Crash when deleting or transferring a server (#5028)

Changed

  • Release binaries are now built with Go 1.20.10 (resolves CVE-2023-44487)
  • Updated Go dependencies

Fixed

Fixed

Fixed

  • Backups being restored from remote storage (s3) erroring out due to a closed stream.
  • Fix IP validation logic for activity logs filtering out valid IPs instead of invalid IPs

Added (since 1.7.2)

  • More detailed information returned by the /api/system endpoint when using the ?v=2 query parameter.

Changed (since 1.7.2)

  • Send re-installation status separately from installation status.
  • Wings release versions will now follow the major and minor version of the Panel.
  • Transfers no longer buffer to disk, instead they are fully streamed with only a small amount of memory used for buffering.
  • Release binaries are no longer compressed with UPX.
  • Use POST instead of GET for sending the status of a transfer to the Panel.

Fixed (since 1.7.2)

  • Fixed servers outgoing IP not being updated whenever a server's primary allocation is changed when using the Force Outgoing IP option.
  • Fixed servers being terminated rather than gracefully stopped when a signal is used to stop the container rather than a command.
  • Fixed file not found errors being treated as an internal error, they are now treated as a 404.
  • Wings can be run with Podman instead of Docker, this is still experimental and not recommended for production use.
  • Archive progress is now reported correctly.
  • Labels for containers can now be set by the Panel.
  • Fixed servers becoming deadlocked when the target node of a transfer goes offline.

Changed

  • Wings release versions will now follow the major and minor version of the panel.
  • Transfers no longer buffer to disk, instead they are fully streamed with only a small amount of memory used for buffering.
  • Release binaries are no longer compressed with UPX.

Fixed

  • Wings can be run with podman instead of Docker, this is still experimental and not recommended for production use.
  • Archive progress is now reported correctly.
  • Labels for containers can now be set by the Panel.

Fixed

Fixed

  • The S3 backup driver now supports Cloudflare R2

Added

  • During a server transfer, there is a new "Archiving" status that outputs the progress of creating the server transfer archive.
  • Adds a configuration option to control the list of trusted proxies that can be used to determine the client IP address.
  • Adds a configuration option to control the Docker username space setting when Wings creates containers.

Changed

  • Releases are now built using Go 1.18 — the minimum version required to build Wings is now Go 1.18.

Fixed

  • Fixes multi-platform support for Wings' Docker image.

Added

  • Adds support for tracking of SFTP actions, power actions, server commands, and file uploads by utilizing a local SQLite database and processing events before sending them to the Panel.
  • Adds support for configuring the MTU on the pterodactyl0 network.

Fixed

  • Fixes SFTP authentication failing for administrative users due to a permissions adjustment on the Panel.

Fixed

  • Fixes error that would sometimes occur when starting a server that would cause the temporary power action lock to never be released due to a blocked channel.
  • Fixes a bug causing the CPU usage of Wings to get stuck at 100% when a server is deleted while the installation process is running.

Changed

  • Cleans up a lot of the logic for handling events between the server and environment process to make it easier to make modifications to down the road.
  • Cleans up logic handling the StopAndWait logic for stopping a server gracefully before terminating the process if it does not respond.

Fixed

  • Rewrote handler logic for the power actions lock to hopefully address issues people have been having when a server crashes and they're unable to start it again until restarting Wings.
  • Fixes files uploaded with SFTP not being owned by the Pterodactyl user.
  • Fixes excessive memory usage when large lines are sent through the console event handler.

Changed

  • Replaced usage of encoding/json throughout the codebase with a more performant encoder (goccy/go-json) to hopefully improve overall performance for JSON operations.
  • Added custom ContainerInspect function to handle direct calls to Docker's CLI and make use of the new JSON encoder logic. This should reduce the total number of memory allocations and be more performant overall in a hot pathway.

Fixed

  • Fixes SSL paths being improperly converted to lowercase in environments where the path is case-sensitive.
  • Fixes a memory leak due to the implemention of server event processing.

Changed

  • Selecting to redact information now redacts URLs from the log output when running the diagnostic command.

Added

  • Adds support for modifying the default memory overhead percentages in environments where the shipped values are not adequate.
  • Adds support for sending the Access-Control-Request-Private-Network header in environments where Wings will be accessed over a private network. This is defaulted to off.

Fixed

  • Fixes servers not properly re-syncing with the Panel if they are already running causing them to be hard-stopped when terminated, rather than stopped with the configured action.

Changed

  • Changes SFTP server implementation to use ED25519 server keys rather than deprecated SHA1 RSA keys.

Added

  • Adds server uptime output in the stats event emitted to the websocket.

Fixed

  • Fixes a race condition when setting the application name in the console output for a server.
  • Fixes a server being reinstalled causing the file_denylist parameter for an Egg to be ignored until Wings is restarted.
  • Fixes YAML file parser not correctly setting boolean values.
  • Fixes potential issue where the underlying websocket connection is closed but the parent request context is not yet canceled causing a write over a closed connection.
  • Fixes race condition when closing all active websocket connections when a server is deleted.
  • Fixes logic to determine if a server's context is closed out and send a websocket close message to connected clients. Previously this fired off whenever the request itself was closed, and not when the server context was closed.

Added

  • Exposes 8080 in the default Docker setup to better support proxy tools.

Changed

  • Releases are now built using Go 1.17 — the minimum version required to build Wings remains Go 1.16.
  • Simplifed the logic powering server updates to only pull information from the Panel rather than trying to accept updated values. All parts of Wings needing the most up-to-date server details should call Server#Sync() to fetch the latest stored build information.
  • Installer#New() no longer requires passing all of the server data as a byte slice, rather a new Installer#ServerDetails struct is exposed which can be passed and accepts a UUID and if the server should be started after the installer finishes.

Removed

  • Removes complicated (and unused) logic during the server installation process that was a hold-over from legacy Wings architectures.
  • Removes the PATCH /api/servers/:server endpoint — if you were previously using this API call it should be replaced with POST /api/servers/:server/sync.

Fixed

  • Environment variable starting with the same prefix no longer get merged into a single environment variable value (skipping all but the first).
  • The start_on_completion flag for server installs will now properly start the server.
  • Fixes socket files unintentionally causing backups to be aborted.
  • Files extracted from a backup now have their preior mode properly set on the restored files, rather than defaulting to 0644.
  • Fixes logrotate issues due to a bad user configuration on some systems.

Updated

  • The minimum Go version required to compile Wings is now go1.16.

Deprecated

Both of these deprecations will be removed in Wings@2.0.0.

  • The Server.Id() method has been deprecated in favor of Server.ID().
  • The directory field on the /api/servers/:server/files/pull endpoint is deprecated and should be updated to use root instead for consistency with other endpoints.

Added

  • [security] Adds support for limiting the total number of pids any one container can have active at once to prevent malicious users from impacting other instances on the same node.
  • Server install containers now use the limits assigned to the server, or a globally defined minimum amount of memory and CPU rather than having unlimited resources.

Fixed

  • Fixes the ~ character not being properly trimmed from container image names when creating a new server.

Changed

  • Implemented exponential backoff for S3 uploads when working with backups. This should resolve many issues with external S3 compatiable systems that sometimes return 5xx level errors that should be re-attempted automatically.
  • Implements exponential backoff behavior for all API calls to the Panel that do not immediately return a 401, 403, or 429 error response. This should address fragiligty in some API calls and address random call failures due to connection drops or random DNS resolution errors.

Fixed

  • [Breaking] Fixes /api/servers and /api/servers/:server not properly returning all of the relevant server information and resource usage.
  • Fixes Wings improperly reading WINGS_UID and not WINGS_GID when running in containerized environments.
  • Fixes a panic encountered when returning the contents of a file that is actively being written to by another process.
  • Corrected the handling of files that are being decompressed to properly support .rar files.
  • Fixes the error message returned when a server has run out of disk space to properly indicate such, rather than indicating that the file is a directory.

Changed

  • Improved the error handling and output when an error is encountered while pulling an image for a server.
  • Improved robustness of code handling value replacement in configuration files to not potentially panic if a non-string value is encountered as the replacement type.
  • Improves error handling throughout the server filesystem.

Added

  • Adds the ability to set the internal name of the application in response output from the console using the app_name key in the config.yml file.

Fixed

  • Fixes an error being returned to the client when attempting to restart a server when the container no longer exists on the machine.

Changed

  • Updated server transfer logic to use newer file archiving tools to avoid frequent errors when transferring symlinked files.

Fixed

  • [Security] Fixes a remaining security vulnerability in the code handling remote file downloads for servers relating to redirect validation.

Added

  • Adds a configuration key at api.disable_remote_download that can be set to true to completely download the remote download system.

Fixed

  • Fixes servers not be properly marked as no longer transfering if an error occurs during the archive process.
  • Fixes problems with user detection when running Wings inside a Docker container.
  • Fixes filename decoding issues with multiple endpoints related to the file manager (namely move/copy/delete).
  • [Security] Fixes vulnerability allowing a malicious user to abuse the remote file download utilitity to scan or access resources on the local network.
  • Fixes network tx stats not correctly being reported (was previously reporting rx for both rx and tx).

Changed

  • Cleans up the logic related to polling resources for the server to make a little more sense and not do pointless io.Copy() operations.

Fixed

  • Fixes archive/tar: write too long error when creating a server backup.
  • Fixes server installation docker images not using authentication properly during the pull.
  • Fixes temporary transfer files not being removed after the transfer is completed.
  • Fixes TLS certificate checking to be all lowercase to avoid any lookup issues when an all-caps domain is provided.
  • Fixes multiple interfaces with the same port not being publishable for a server.
  • Fixes errors encountered during websocket processes being incorrectly passed back to the Panel as a JWT error rather than a generic Wings error for admin users.

Added

  • Added logic to notify the Panel when archive generation fails.
  • Added endpoint to run chmod commands against server files and updated API response to include the mode bits when requesting files.

Changed

  • Updated internals to call Server.Environment.State() rather than deprecated Server.GetState() functions.
  • Improved error handling logic and massively simplified error passing around the codebase.

Fixed

  • Fixes certain files returning invalid data in the request due to a bad header set after sending data down the line.

Added

  • Adds support for ARM to build outputs for wings.

Fixed

  • Fixed a few docker clients not having version negotiation enabled.
  • Fixes local images prefixed with ~ getting pulled from remote sources rather than just using the local copy.
  • Fixes console output breaking with certain games when excessive line length was output.
  • Fixes an error when console lines were too long that would cause the console to stop updating until the server was restarted,

Changed

  • Simplified timezone logic for containers by properly grabbing the system timezone and then passing that through to containers with the TZ= environment variable.

Fixed

  • [Security] Prevents the allowed_mounts configuration value from being set by a remote API call.
  • Fixes an unexpected error when attempting to make a copy of an archive file.
  • Fixes certain expected filesystems errors being returned to the API as a 500 error rather than a 4XX series error.
  • Fixes a panic crash when there is no text on a line and the parser is attempting to determine if the line is a comment.
  • Fixes multiple filesystem operations to correctly check, increment, and decrement disk usage for a server.
  • Fixes a negative disk space usage issue when deleting a file due to a bad int swap.
  • Errors from a websocket connection being closed will no longer spam the console.
  • Fixes an extraneous . in the install script for servers causing errors in some scenarios.
  • Fixes unexpected error spam due to a change in how os.ErrNotExist is returned from some functions.

Changed

  • Stacktrace is no longer emitted when warning that an image exists locally.
  • Configuration parser now attempts to create the directory structure leading to a configuration file if it is missing.
  • If a file name is too long for the system a nice error is returned to the caller.
  • Enables client version negotiation for Docker to support more versions.
  • Disk space errors are no longer logged into the wings logs.
  • Servers can no longer be reinstalled while another power action is currently running. This avoids data collisions and wings running into issues with the container state.
  • Wings now uses 1024 rather than 1000 bytes when calculating the disk space usage for a server to match how the Panel reports usage.
  • JWT errors in the websocket are now sent back to the connection as a specific event type allowing them to be handled even if the timer fails to execute or executes but is not being listened for.
  • A server struct is no longer embedded in the virtual filesystem allowing for easier testing and modularization of the codebase.
  • Server websockets are now closed when a server is deleted, disconnecting any currently connected clients.

Removed

  • [Security] Removes the SafeJoin function which could wrongly assume the state of a file and allow a user to escape the root if the developer implementing the call calls Stat rather than Lstat.

Fixed

  • Fixes long standing bug with console output not properly sending back to the client with server stats in certain edge case scenarios. This was "fixed" in rc.4 but ended up breaking many servers in significantly more painful manners, but did allow us to better track down the issue.
  • Fixes build flags during release process to correctly strip unnessary code allowing the final binary size to be reduced back down to ~5MB
  • Fixes Wings returning the last 16384 lines of the log file when connecting to the websocket.
  • Fixes pre-boot actions always running for a server start event even if the server is already running.

Added

  • Adds support for configuring the amount of time that can elapse between server disk size checking before the value is considered stale.

Fixed

  • Errors during the backup process are now correctly reported to the Panel and logged into the output correctly.
  • Empty directories are no longer pushed into the backup file list (which was causing errors to occur previously).
  • Covered an edge case to prevent errors if a file gets deleted while a backup is in progress.
  • Fixed a bug causing Wings to panic and crash if an invalid environment variable value was passed through. These invalid values are now logged to the output to better detect and an empty string is returned in their place.
  • Fixed startup variables and other server information not properly being updated when a server is restarted.
  • Suspension state of a server is now properly returned by the API.
  • Fixes an error being thrown if a backup does not exist on the local machine. A 404 is now properly returned and handled by the Panel when this occurs.
  • Fixes an error when attempting to move or rename a folder due to the target being created accidentally before the rename occurred.
  • Fixes install scripts running even when the checkbox to not run them on installation was selected in the Panel.

Changed

  • Disk space checking modified to not block in as many parts of the codebase and allow returning a stale cache value where that is appropriate. Thanks @cyberkitsune!
  • SFTP package code is now merged into the codebase to make keeping up with all of the code simpler, and reduce the complexity of the SFTP server.

Added

  • Added the ability for a node to be configured to skip file permissions checking when starting a server.
  • Added console output message to indicate that server disk space checking is occurring rather than silently sitting there.

Fixed

  • Servers are no longer incorrectly marked as stopping when they are, in fact, offline.
  • Release build version is now correctly output when starting wings.
  • Termination signals can now always be sent to a server instance even if the instance is currently starting/stopping.
  • Removed the file chown on wings boot to avoid slowing down the boot process unnecessarily when working with hundreds of servers on a node.
  • Fixed a multitude of race conditions throughout the code that cropped up during testing and made power handling even more robust for server instances.
  • In general multiple fragile areas of the codebase have been improved and are more likely to return useful errors should they break.
  • Addressed serious CPU usage issues when generating backups, and additionally decreased the amount of time they take to generate.

Changed

  • Internal server now uses more secure and recommended TLS settings.
  • Environment handling is now completely separate from the server package itself, allowing the environments to no longer be tightly coupled to the server.
  • /tmp directory mounted into containers can now be programmatically managed and uses better defaults to avoid people even needing to edit it.

Added

  • Wings logs are now properly persisted to the disk.
  • Adds the ability for an egg to use ANSI-stripped matching when determining if a server is done booting.

Fixed

  • Server state is synced with the Panel before performing a reinstall to ensure that the latest information is used.
  • Wings no longer crashes when a non-string environment variable value is passed through.
  • SFTP server authentication no longer attempts to contact the Panel to validate credentials if the format is known to already be incorrect.
  • Some previously missing error stacks are now properly returned when encountered.
  • Renaming a file no longer triggers an error if the base path does not exist.
  • Disk space is now properly calculated for a server even if it is assigned unlimited space.
  • [Security] Prevent symlink files from unintentionally chmodding their target file when a server is booted when the target file resides outside the server data directory.
  • [Security] Cleans up multiple code pathways that may unintentionally allow a malicious user to impact files outside their home directory.
  • Fixes numerous race conditions during a server's boot process that may lead to unintended data states.
  • Fixes an error thrown when attempting to delete a file that points to a symlink outside the server data directory.
  • Deleting a symlink will no longer attempt to remove the source file, only the symlink itself.
  • Websocket no longer blocks when handling a long running process for a user.

Changed

  • Install log for servers is now more detailed and more useful for debugging what might be going wrong.
  • Certain file management API endpoints now support passing through multiple paths at once to make mass actions easier to perform.
  • Re-worked file walking implementation to not cause a server crash when working with very large directories, and avoid race conditions when recursively walking directories.
  • Server configuration structure re-worked to be more manageable in the code base and avoid additional race conditions and complexity while making on-the-fly changes to it.

Added

  • Support for configuring additional file mount points in a container via the Panel.
  • Support for automated SSL certificate generation when booting the Daemon.
  • Added wings diagnostics command.
  • New API endpoints to compress and decompress files on a server.

Fixed

  • Server status is no longer sent to all connected websocket clients when a new client connects to the socket.
  • Server disk usage is sent back over the socket when connecting.
  • Default configuration for the SFTP server is now properly returned to on rather than off
  • Server boot is no longer blocked if there is an error fetching the Docker image as long as that image exists on the host.
  • The websocket no longer gets locked up when Wings attempts to send an error to the client.
  • Fixed a crash loop when an error is thrown during pre-boot phase of server startup.
  • Errors with BindJSON in API endpoints are now properly handled and returned.
  • Fixed warning about Gin running in non-release mode, even when the binary is running in release mode.

Changed

  • Switched logging libraries to output data in a clearer format more suited to the CLI where this application runs.
  • Cleaner debug messaging in debug mode from the router.

Fixed

  • Fixes unexpected nil-pointer panic when attempting to start some newly created servers, or any server that was missing a container on the system.
  • Fixes memory usage of process being reported differently than the docker stats output leading to some confusion. These numbers should be more correct now.
  • Fixes possible nil-pointer panic when detecting a deleted container as being crashed.

Changed

  • Backup functionality made significantly more modular to ease adding additional methods in the future.
  • Websocket permissions changed to use same name as in panel.
  • Container memory hard-limits are now adjusted up by 15% (< 2G memory), 10% (< 4G memory), or 5% to avoid unexpected OOM crashes for memory heavy games.
  • Wings executable is now 80% smaller thanks to better compilation arguments.

Added

  • Adds support for ignoring files and directories when generating a new backup.
  • Added internal directory walker with callback-continue support.

Fixed

  • Fixed linux distro matching when booting the daemon.
  • Fixes DNS to be configurable for docker containers that are made for servers.
  • Fixes incorrect file truncation when making modifications to a server's configuration files.

Added

  • Ability to run an installation process for a server and notify the panel when completed.
  • Output from the installation process is now emitted over the server console for administrative users to view.

Fixed

  • Fixed bugs caused when unmarshaling data into a struct with default values.
  • Timezone is properly set in containers by using the TZ= environment variable rather than mounting timezone data into the filesystem.
  • Server data directly is now properly created when running the install process.
  • Time drift caused in the socket JWT is now handled in a better manner and less likely to unexpectedly error out.

SHA256 Checksum

14e6dd6f7392b0161a3261a3fe61aa1cbf392971777cc36d078823697fcfb3e8  wings_linux_amd64
2eb4ba1dc5edf5c36517ea6fed77b04d561ac91f4a2294f5e0f783104e976a8d  wings_linux_arm64