## Planned ahead ! Operation center must be able to create scheduled tasks for every operation ! Optional repo check before doing retention operations ## 3.0.0 - This is a major rewrite that allows using multiple repositories, adds repository groups and implements repository settings inheritance from group settings ## Features - New viewer mode allowing to browse/restore restic repositories without any NPBackup configuation - Allows setting repository via environment variables, config file or directly in GUI - Multi repository support - Group settings for repositories - Operation center - GUI operation center allowing to mass execute actions on repos / groups - CLI operation center via `--group-operation --repo-group=somegroup` - Implemented retention policies - Optional time server update to make sure we don't drift before doing retention operations - Operation planifier allows to create scheduled tasks for operations - Implemented repo quick check / full check / repair index / repair snapshots / unlock / forget / prune / dump / stats commands - Implemented new housekeeping command which is a shorthand for check, forget and prune commands - Added per repo permission management - Repos now have backup, restore and full privileges, optionally allowing to restrict access for end users - Added snapshot tag to snapshot list on main window - Split npbackup into separate CLI and GUI - Status window has been refactored so GUI now has full stdout / stderr returns from runner and backend - Implemented file size based exclusion - CLI can now fully operate in API compatible mode via --json parameter - Parses non json compliant restic output - Always returns a result boolean and a reason when failing - CLI now accepts --stdin parameter to backup streams sent to CLI - Added minimum backup size upon which we declare that backup has failed - All bytes units now have automatic conversion of units (K/M/G/T/P bits/bytes or IEC bytes) - Refactored GUI and overall UX of configuration - New option --show-config to show inheritance in CLI mode (GUI has visual indicators) - Allow using external restic binary via --external-backend-binary parameter in CLI mode - Implemented stdin_from_command backup process which can now get exit codes of programs which output is backed up (ex: mysqldump) - GUI: Restore window is now faster - Prometheus metrics: - Metrics are now created for all types of operation - Metrics have npbackup execution state - Dry mode now works for all operations where restic supports dry-mode - Implemented scheduled task creator for Windows & Unix - Added --no-cache option to disable cache for restic operations (neeeded on RO systems) ## Fixes - Default exit code is now worst log level called unless specific errors are triggered - Fix deletion failed message for en lang - Fix Google cloud storage backend detection in repository uri - Backup admin password is now stored in a more secure way - GUI: Restore window now closes correctly when using the window control button - GUI: Show anonymized repo uri in GUI - GUI: Exec error should always stay on top ## Misc - Current backup state now shows more precise backup state, including last backup date when relevant - Concurrency checks (pidfile checks) are now directly part of the runner - Allow a 30 seconds grace period for child processes to close before asking them nicely, and than not nicely to quit - Fully refactored prometheus metrics parser to be able to read restic standard or json outputs - Reimplmented auto upgrade after CLI/GUI split - Added initial tests - Exclude lists have been updated - Removed Windows installer from the project. We need to come up with a better solution - Added manual --init command (already executed by first backup) ## 2.2.2 - 14/12/2023 (internal build only) - Fixed backup paths of '/' root partitions - Properly display repository init errors - Logs didn't show proper error status - Fixed wrong init detection for S3 backend ## 2.2.1 - 28/08/2023 - Added snapshot deletion option in GUI - Fix ignore_cloud_files parameter did not work on some non systems (still an issue, see https://github.com/restic/restic/issues/4155) - Configured default backend connections to 2 for local, 8 for remote when default value '0' is given - Fine adjust GOMAXPROCS environment variable (n for 1 core, n-1 for 2-4 cores, n-2 for 5+ cores) - Updated internal restic binary to 0.16.0 compiled with go1.20.6 - Compiled with newer Nuitka 1.7.10 that allows use of Python 3.11 - Updated python to version 3.11 for Windows x64 targets - Basic MacOS X compile support ## 2.2.0 - rtm - 03/06/2023 - Fix potential deadlock in evaluate variables - Fix additionnal parameters should only apply for backup operations - Fix unnecessary exclude statements when no exclusions are given - Added source types (--files-from, --files-from-verbatim and --files-from-raw equivalent) - Add encrypted environment variables support - Add SSL certificate verification bypass for prometheus metrics - Make sure all multiline entries in config files are processed as lists - Add exclude-patterns to GUI (was present in CLI version already) - Make sure we always quote exclusions patterns or files - Updated internal restic binary to 0.15.2 compiled with go1.20.3 - *SECURITY* Don't log password command, even in debug mode - Compiled with Nuitka commercial 1.5.8 ## 2.2.0 - rc12 - 03/05/2023 - Add grafana dashboard to examples directory - Implement password command functionality - Compiled with newer Nuitka commercial 1.5.7 - Added windows executable signature script ## v2.2.0 - rc11 - 24/04/2023 - Add default 1 minute timeout for init operations - Fix auto_upgrade_group wasn't transmitted to server - Make sure new binary is set as executable in linux upgrade - *SECURITY* Show unencrypted is only allowed on compiled builds where default AES KEY is not used - This prevents a password injection from another conf file - *SECURITY* Prevent raw password update in config file - Fix empty password makes GUI fail - Fix empty password makes CLI fail - Fix empty data is shown as encrypted - Enforce repository and passwords to be strings, also remove trailing and ending spaces - Add warning when source and destination are the same path - Compiled with newer Nuitka 1.5.6+ that leverages lesser virus detection issues ## v2.2.0 - rc10 - 30/03/2023 - Add arm/arm64 compilation support - Add an option to disable GUI compilation ## v2.2.0 - rc9 - 28/03/2023 - Allow AES key rotation by keeping old key and updating encryption on config loading - Make sure restic binary is executable for Nuitka builds - Improve compiler script - Add messages when no tcl/tk exists in GUI mode - Switch to i18nice fork of python-i18n ## v2.2.0 - rc8 - 22/03/2023 - Highly optimize tree window creation times (x3.5) by replacing dateutil.parser.parse() - Fix missing locale might fail on certain linux builds - Don't build NPBackupInstaller on non Windows platforms - Add --gui-status parameter and more GUI related info - Make translation manager more resilient - Add an inline copy of maintained python-i18n to deal with portability issues (see requirements.txt for more) ## v2.2.0 - rc7 - 20/03/2023 - New look and feel - Cosmetic fixes (button sizes) ## v2.2.0 - rc6 - 13/03/2023 - Fixup bogus restic command line when empty tag lines were given - Added missing default value for ignoring cloud files in the example configuration - Made sure npbackup can run when no tkinter is installed (headless) ## v2.2.0 - rc5 - 03/03/2023 - Fixed bogus restic command line when empty tag lines were given - Make sure the no config dialog stays on top - Make sure upgrade client checks current python arch instead of os arch - Make upgrade client catch referrer for /current_version calls - Upgrade python-i18n to a maintained version - Make sure we get the real IP when client downloads an upgrade and server is behind proxy server ## v2.2.0 - rc4 - 08/02/2023 - Add gui popup when config cannot be saved - Make repo connection messages more clear - Remove default backup admin password from config - Fix empty restic results will make prometheus metrics fail ## v2.2.0 - rc3 - 07/02/2023 - Auto minimize console window when run in GUI mode to not distract end user - Trigger GUI refresh after configuration changes - Main program now loads directly after first time GUI setup - A popup is now shown on non-readable repos - Various smaller fixes - Support for --config-file parameter in upgrade_server - Upgrade server now fetches the real client IP if behind a proxy - Upgrade server systemd service file example ## v2.2.0 - rc2 - 03/02/2023 - Upgrade client now sends its hostname, group and version information to server - Add variable substitution in configuration - Add machine identification in configuration - Add variable ${RANDOM}[n] to config file in order to distinguish non unique hostnames - Refactor config variable handling - Make backup state and upgrade state messages more coherent - Fix config fails when restic password is an int - Fix empty config files did not show a proper error message - Fix various config file malformation will break execution - Fix backup hangs when no restic password is given (restic asks for password in backgroud job) - Fix error message in logs when repo is not initialized ## v2.2.0 - rc1 - 02/02/2023 - Added a full auto-upgrade solution - Aupgrade client integrated into NPBackup, that can be called manually via --auto-upgrade or automatically run every n backups - Upgrade server which servers files and their metadata - Added a gui to create a scheduled task under Windows - Added a gui to configure backup admin password (was compile time setting before) - Improved setup.py to provide launch scripts for both Linux and Windows platforms - Made windows cloud file filter optional (enabled by default) - Added default configuration settings - Rewrite configuration gui into a tabbed gui - Updated restic binary to restic 0.15.1 compiled with go1.19.5 - Changed backup interval unit from seconds to minutes ## v2.1.0 - 29/01/2023 - Added execution time information - Code cleanup - Refactor runner into a class - Refactor npbackup into package - Adding missing typing - Code is now formatted with black - Code must now pass pylint and flake8 - Workaround for painfully slow sg.TreeData window.close() - Simplify npbackup shortcut - Shift default interval from 23H30 to 24H - Fixed missing translations for admin password popups ## v2.0.0 - 24/02/2023 - First open public release - Refactor GUI so actions become non-blocking - Added loader animation for gui events - Added backup window with current state - Added internationalization support (currently en and fr) - Refactor restic.ls function to return a generator since restic ls command gives chunks of json, which is bad memory wise when parsing each chunk into a big list - On Windows, "The cloud operation is not supported on a read-only volume." and "The media is write protected." errors will not make backup fail, see #4155 - This fix can be removed once #4155 is resolved, see # TEMP-FIX-4155 comment in restic_wrapper package - Added Additional backup parameter option - Added optional backup tags - Added optional prometheus group label and additional labels entries - Make sure backend connections number parameter works with all backends - Added priority configuration for restic operations, defaults to low priority to not disturb operations - Added WindowsApps folder (reparse points) to exclusion list (fix "The file cannot be accessed by the system." error) - Fixed backup did use verbose option twice - Updated restic binary to restic 0.15.0 compiled with go1.19.5 on windows/amd64 - Made theme configurable - Make sure we exit all subprocesses when exiting npbackup - Improve config GUI for supporting elder config files properly - Fix restic metrics when 0 bytes of data have been added to the repo - Fix restoration must ignore case on Windows - Fix backup_job variable substitution in config file - Fix for ruamel.yaml global objects being modified out of current scope encrypting current config while saving - Fix npbackup could not start when no config file was present - Drastically improve ls operation speed by changing command_runner method from poller to monitor (no live output) except for backup operation - Compiler - Compile python 3.7 and 3.10 targets so we also get to use Windows 7 which can't run python > 3.7 - Installer - Moved task creation process to npbackup so we can recreate tasks on systems where npbackup is already installed ## v1.8.0 - Implement VSS support for Windows - Do not require UAC elevation for npbackup.exe (Still highly recommended, but at least we allow non admin users to backup their data (without VSS)) - Search restic executable path when not found locally for both Windows and Linux platforms - Make exclusion lists always ignore case on Windows systems - Highly improve exclusion lists - Keep structure and comments in yaml configuration files - Simplify configuration file data encryption - Fix limit-download parameter not working - Fix error when rest_connections was set to 0 - Add some config gui logging - Cosmetic gui fixes - Fix never enforce execution timeout on backup operation - Fix bogus filename encodings while showing backup contents / usernames - Added more restic metrics - Fixed bogus restric metrics - Allow setting additional prometheus labels - Fix gui snapshot contents don't show duplicate parents on Windows when backing up 'c:\foo' and 'C:\bar' - Internal code cleanup - Installer - Make sure we don't overwrite destination configuration file if existing ## v1.5.3 - First closed public release ## v0.1.0 - 1.5.2 - Internal development and tests