You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
osync/CHANGELOG.md

26 KiB

RECENT CHANGES

Current master

  • Make --log-conflicts non experimental (randomly fails)
  • ! new option FORCE_CONFLICT_PREVALANCE which will always use Initiator or Target, regardless of best time
  • ! target-helper: destination mails etc on target, also, no cmd after on configs

16 June 2023: osync v1.3 release (for full changelog since v1.2 branch see all v1.3-beta/RC entries)

  • Fix for new RSYNC protocol
  • New options ALWAYS_SEND_MAILS to allow sending logs regardless of execution states

29 June 2020: osync v1.3-RC1 release

  • New option to use SSH_CONTROLMASTER in order to speed up remote sync tasks and preserve a single ssh channel
  • New option SSH_OPTIONAL_ARGS
  • Fixed a problem with macos mv not preserving ownership of files from /tmp
  • Fixed very long outstanding issue with special characters in remote target handling
  • Fixed an issue where STOP_ON_ERROR_CMD did not work anymore
  • Fixed a remote file lock problem (thanks to https://github.com/zhangzhishan)
  • Fixed various cosmetic issues with code and logs
  • Improved upgrade script
  • Fixed a possible bash buffer overflow when synchronizing large filesets (tested with 2M files)
    • This fix actually truncats every string sent to Logger not being more than 16KB
  • Fixed osync leaving temporary log files behind in RUN_DIR (/tmp by default)
  • Updated target helper service configuration file
  • Improved codacy results
  • Added more debugging
  • Fixed service logs being junked by spinner
  • Fixed MINIMUM_SPACE=0 didn't stop the disk space check anymore (Thanks to Val)
  • Fixed conflict file logs to be less verbose when no conflicts happen

22 May 2019: osync v1.3-beta3 release

  • Config file update script fixes
  • Removed old Win10 1607 bash fixes to make Win10 1809 work (breaks Win10 1607 beta bash version...Yeah, nothing I can do about that)

20 May 2019: osync v1.3-beta2 release

  • More --summary statistics
  • Config file syntax now uses booleans instead of yes / no (but still accepts old syntax)
    • Added boolean update in upgrade script
  • Config file revision check
    • Added config file revision in upgrade script
  • New option --sync-type=initator2target|target2initiator that allows using osync as rsync wrapper for unidirectional sync
  • New osync target helper service
  • Fixed multiple race conditions in parallel executions (which also fixes random conflict logs failures)
  • Fixed directory softdeletion bug
  • Fixed multiple failed deletions will be retried as many times as failures happened
  • Fixed remote running on FreeBSD for some commands, thanks to Vladimirek
  • Fixed (again) deletion propagation when file contains spaces (thanks to http://github.com/weinhold)
  • Deprecated --log-conflicts for 1.3 branch (is now experimental)
  • Updated ofunctions
    • Has better random number generator
    • IsInteger, IsNumeric and IsNumericExpand are now busybox compatible
  • Multiple installer fixes
  • Multiple batch fixes

08 Aug 2018: osync v1.3-beta1 release

  • Added an option to log conflictual files
    • Presence of conflictual files can trigger a special mail
  • New option --initialize (see #141)
  • Added OpenRC support (thanks to kozross, see #140)
  • Added --no-resume option in order to disable resuming execution on failure
  • Added basic performance profiler to debug version
  • Fixed summary for file deletions
  • Fixed an issue with filenames ending with spaces, their deletion not being propagated, and ACL / conflicts not being managed (still they got synced)
  • Fixed missing options passed to subprocess in daemon mode
  • Fixed bogus pgrep can lead to segfault 11 because of recursive KillChilds
  • Fixed osync deletion not working on systems with ssh banner enabled
  • Improved GetLocalOS and GetRemoteOS OS detection
  • Fixed GetRemoteOS missing GetConfFileValue preventing to get OS details from /etc/os-release
  • Fixed low severity security issue where log and run files could be read by other users
  • Merged Logger and QuickLogger for simplified usage
  • Fixed inotifyway error in FreeBSD (see #119)
  • Minor enhancements in installer / ofunctions
    • Added --prefix option for installer
    • Installer path fixes
    • Fixed logging bug with QuickLogger
  • Refactored time control and parallel execution functions into one single function
  • Multiple portability improvements
    • UrlEncode function is now Busybox compatible
    • IsInteger function is now Busybox compatible
  • Prevented non unique runtime filenames on some systems where no milliseconds exist
    • Fixed bogus runtime filenames on Busybox
  • Upgraded shunit2 test framework to v2.1.8pre (git commit 07bb329)
  • Multiple smaller fixes and improvements

25 Mar 2017: osync v1.2 release (for full changelog of v1.2 branch see all v1.2-beta/RC entries)

  • Check for initiator directory before launching monitor mode
  • Updated RPM spec file (Thanks to https://github.com/liger1978)
  • Fixed remote commands can be run on local runs and obviously fail
  • Minor fixes in installer logic

10 Feb 2017: osync v1.2-RC3 release

  • Uninstaller skips ssh_filter if needed by other program (osync/obackup)
  • Logger now automatically obfuscates _REMOTE_TOKEN
  • Logger doesn't show failed commands in stdout, only logs them

08 Feb 2017: osync v1.2-RC2 release

  • Tests have run on CentOS 5,7 and 7, Debian 8, Linux Mint 18, Fedora 25, FreeBSD 10.3/pfSense, FreeBSD 11, MacOSX Sierra, Win10 1607 (14393.479) bash, Cygwin x64 and MSYS2 current
  • Hugely improved ssh_filter
  • Improved privilege elevation compatibility on SUDO_EXEC=yes runs
  • Refactored installer logic and added --remove option
  • Added optional mail body characterset encoding
  • Fixed log output has escaped UTF-8 characters because of LC_ALL=C
  • Fixed installer statistics don't report OS
  • Minor tweaks and fixes in ofunctions

13 Dec 2016: osync v1.2-RC1 release

  • Unit tests have run on CentOS 5,6 and 7, Debian 8, Linux Mint 18, FreeBSD 10.3/pfSense, FreeBSD 11, MacOSX Sierra, Win10 1607 (14393.479) bash, Cygwin x64 and MSYS2 current
  • Added optional rsync arguments configuration value
  • Fixed another random error involving warns and errors triggered by earlier runs with same PID flag files
  • Adde more preflight checks
  • Fixed a random appearing issue with Sync being stopped on internet failure introduced in v1.2 rewrite
  • Resuming operation will not send warnings anymore unless resumed too many timess
  • Spinner is less prone to move logging on screen
  • Fixed daemon mode didn't enforce exclusions
  • Made a quick and dirty preprocessor
    • ofunctions can now directly be loaded into osync via an include statement
    • n_osync.sh can be assembled on the fly using bootstrap.sh
  • Forced remote ssh to use bash (fixes FreeBSD 11 compatibility when default shell is csh)
  • Faster execution
    • Reduced number of needed sequential SSH connections for remote sync (4 connections less)
    • Refactored CheckReplicaPath and CheckDiskSpace into one functon CheckReplicas
    • Refactored CheckDiskSpace, CheckLocks and WriteLocks into one function HandleLocks
    • Removed noclobber locking in favor of a more direct method
  • Improved remote logging
  • Fixed directory ctime softdeletion
  • Using mutt as mail program now supports multiple recipients
  • osync now properly handles symlink deletions (previous bugfix didn't work properly)
  • Simplified osync-batch runner (internally and for user)
    • Better filename handling
    • Easier to read log output
    • Always passes --silent to osync
    • All options that do not belong to osync-batch are automatically passed to osync
  • Improved installer OS detection
  • Added daemon capability on MacOS X
  • Fixed upgrade script cannot update header on BSD / MacOS X
  • Fixed SendEmail function on MacOS X
  • Fixed MAX_HARD_EXEC_TIME not enforced in sync function introduced with v1.2 rewrite
  • Fixed MAX_SOFT_EXEC_TIME not enforced bug introduced with v1.2 rewrite
  • PRESERVE_ACL and PRESERVE_XATTR are ignored when local or remote OS is MacOS or msys or Cygwin
  • Fixed PRESERVE_EXECUTABILITY was ommited volontary on MacOS X because of rsync syntax
  • Fixed failed deletion rescheduling under BSD bug introduced with v1.2 rewrite
  • merge.sh is now BSD and Mac compatible
  • More work on unit tests:
    • Unit tests are now BSD / MacOSX / MSYS / Cygwin and Windows 10 bash compatible
    • Added more ACL tests
    • Added directory soft deletion tests
    • Added symlink and broken symlink copy / deletion tests
    • Made unit tests more robust when aborted
    • Simplified unit tests needed config files (merged travis and local config files)
    • Added timed execution tests
  • More code compliance
  • Lots of minor fixes

19 Nov 2016: osync v1.2-beta3 re-release

  • Fixed blocker bug where local tests tried GetRemoteOS Anyway
  • Fixed CentOS 5 compatibility bug for checking disk space introduced in beta3
  • More Android / Busybox compatibility
  • Made unit tests clean authorized_keys file after usage
  • Added local unit test where remote OS connection would fail

18 Nov 2016: osync v1.2-beta3 released

  • Improved locking / unlocking replicas
    • Fixed killing local pid that has lock bug introduced in v1.2 rewrite
    • Allow remote unlocking when INSTANCE_ID of lock matches local INSTANCE_ID
  • Fixed failed deletions re-propagation bug introduced in v1.2 rewrite
  • Faster remote OS detection
  • New output switches, --no-prefix, --summary, --errors-only
  • Added busybox (and Android Termux) support
    • More portable file size functions
    • More portable compression program commands
    • More paranoia checks
    • Added busybox sendmail support
    • Added tls and ssl support for sendmail
  • Added --skip-deletion support in config and quicksync modes
  • Added possibility to skip deletion on initiator or target replica
  • Prevent lock file racing condition (thanks to https://github.com/allter)
  • Added ssh password file support
  • Hugely improved unit tests
    • Added conflict resolution tests
    • Added softdeletion tests
    • Added softdeletion cleanup tests
    • Added lock tests
    • Added skip-deletion tests
    • Added configuration file tests
    • Added upgrade script test
    • Added basic daemon mode tests
  • Simplified logger
  • All fixes from v1.1.5

17 Oct 2016: osync v1.2-beta2 released

  • osync now propagates symlink deletions and moves symlinks without referrents to deletion dir
  • Upgrade script now has the ability to add any missing value
  • Improved unit tests
    • Added upgrade script test
    • Added deletion propagation tests

30 Aug 2016: osync v1.2-beta released

  • Rendered more recent code compatible with bash 3.2+
  • Added a PKGBUILD file for ArchLinux thanks to Shadowigor (https://github.com/shaodwigor). Builds available at https://aur.archlinux.org/packages/osync/
  • Some more code compliance & more paranoia checks
  • Added more preflight checks
  • Logs sent by mail are easier to read
    • Better subject (currently running or finished run)
    • Fixed bogus double log sent in alert mails
  • Made unix signals posix compliant
  • Config file upgrade script now updates header
  • Improved batch runner
  • Made keep logging value configurable and not mandatory
  • Fixed handling of processes in uninterruptible sleep state
  • Parallelized sync functions
    • Rewrite sync resume process
  • Added options to ignore permissions, ownership and groups
  • Refactored WaitFor... functions into one
  • Improved execution speed
    • Rewrite sync resume process
    • Added parallel execution for most secondary fuctions
    • Lowered sleep time in wait functions
    • Removed trivial sleep and forking in remote deletion code, send the whole function to background instead
    • Unlock functions no longer launched if locking failed
  • Improved WaitFor... functions to accept multiple pids
  • Added KillAllChilds function to accept multiple pids
  • Improved logging

17 Nov 2016: osync v1.1.5 released

  • Backported unit tests from v1.2-beta allowing to fix the following
    • Allow quicksync mode to specify rsync include / exclude patterns as environment variables
    • Added default path separator char in quicksync mode for multiple includes / exclusions
    • Local runs should not check for remote connectivity
    • Fixed backups go into root of replica instead of .osync_wordir/backups
    • Fixed error alerts cannot be triggered from subprocesses
    • Fixed remote locked targets are unlocked in any case

10 Nov 2016: osync v1.1.4 released

  • Fixed a corner case with sending alerts with logfile attachments when osync is used by multiple users

02 Sep 2016: osync v1.1.3 released

  • Fixed installer for CYGWIN / MSYS environment

28 Aug 2016: osync v1.1.2 released

  • Renamed sync.conf to sync.conf.example (thanks to https://github.com/hortimech)
  • Fixed RunAfterHook may be executed twice
  • Fixed soft deletion when SUDO_EXEC is enabled

06 Aug 2016: osync v1.1.1 released

  • Fixed bogus rsync pattern file adding
  • Fixed soft deletion always enabled on target
  • Fixed problem with attributes file list function
  • Fixed deletion propagation code
  • Fixed missing deletion / backup diretories message in verbose mode

27 Jul 2016: osync v1.1 released

  • More msys and cygwin compatibility
  • Logging begins now before any remote checks
  • Improved process killing and process time control
  • Redirected ERROR and WARN messages to stderr to systemd catches them into it's journal
  • Added systemd unit files
  • Added an option to ignore ssh known hosts (use with caution, can lead to security risks), also updated upgrade script accordingly
  • Added optional installation statistics
  • Fixed a nasty bug with log writing and tree_list function
  • Improved mail fallback
  • Improved more logging
  • Fixed conflict prevalance is target in quicksync mode
  • Fixed file attributes aren't updated in a right manner when file mtime is not altered (Big thanks to vstefanoxx)
  • Better upgrade script (adding missing new config values)
  • More fixes for GNU / non-GNU versions of mail command
  • Added bogus config file checks & environment checks
  • Added delta copies disable option
  • Revamped rsync patterns to allow include and exclude patterns
  • Fully merged codebase with obackup
  • Passed shellCheck.net
    • Simplified EscapeSpaces to simple bash substitution
    • Corrected a lot of minor warnings in order to make code more bullet proof
  • Added v1.0x to v1.1 upgrade script
  • Added (much) more verbose debugging (and possibility to remove debug code to gain speed)
  • Force tree function to overwrite earlier tree files
  • Add Logger DEBUG to all eval statements
  • Unlocking happens after TrapQuit has successfully killed any child processes
  • Replace child_pid by $? directly, add a better sub process killer in TrapQuit
  • Refactor [local master, local slave, remote slave] code to [local, remote][initiator, target]code
  • Renamed a lot of code in order to prepare v2 code (master becomes initiator, slave becomes target, sync_id becomes instance_id)
  • Added some automatic checks in code, for _DEBUG mode (and _PARANOIA_DEBUG now)
  • Improved Logging
  • Updated osync to be fully compliant with coding style
  • Uploaded coding style manifest
  • Added LSB info to init script for Debian based distros

v0-v1.0x - Jun 2013 - Sep 2015

22 Jul. 2015: Osync v1.00a released

  • Small improvements in osync-batch.sh time management
  • Improved various logging on error
  • Work in progress: Unit tests (intial tests written by onovy, Thanks again!)
  • Small Improvements on install and ssh_filter scripts
  • Improved ssh uri recognition (thanks to onovy)
  • Fixed #22 (missing full path in soft deletion)
  • Fixed #21 by adding portable shell readlink / realpath from https://github.com/mkropat/sh-realpath
  • Added detection of osync.sh script in osync-batch.sh to overcome mising path in crontab
  • Fixed osync-batch.sh script when osync is in executable path like /usr/local/bin
  • Fixed multiple keep logging messages since sleep time between commands has been lowered under a second
  • Added optional checksum parameter for the paranoid :)
  • Fixed typo in soft deletion code preventing logging slave deleted backup files
  • Removed legacy lockfile code from init script
  • Removed hardcoded program name from init script

01 Avr. 2015: Osync v1.00pre

  • Improved and refactored the soft deletion routine by merging conflict backup and soft deletion
    • Reworked soft deletion code to handle a case where a top level directory gets deleted even if the files contained in it are not old enough (this obviously shouldn't happen on most FS)
    • Added more logging
  • Merged various fixes from onovy (http://github.com/onovy) Thanks!
    • Lowered sleep time between commands
    • Check if master and slave directories are the same
    • Check script parameters in osync.sh and osync-batch.sh
    • Run sync after timeout in --on-changes mode when no changes are detected (helps propagate slave changes)
    • Fix for locking in --on-changes mode (child should lock/unlock, master process shouldn't unlock)
    • Remote user is now optional in quicksync mode
  • Replaced default script execution storage from /dev/shm to /tmp because some rootkit detection software doesn't like this
  • Fixed bogus error in DEBUG for quicksync mode where no max execution time is set
  • Prevent debug mode to send alert emails
  • Fixed an infamous bug introduced with exclude pattern globbing preventing multiple exludes to be processed
  • Fixed an issue with empty RSYNC_EXCLUDE_FILES
  • Lowered default compression level for email alerts (for low end systems)
  • Prevent exclude pattern globbing before the pattern reaches the rsync cmd
  • Fixed some missing child pids for time control to work
  • Prevent creation of a sync-id less log file when DEBUG is set
  • Added a sequential run batch script that can rerun failed batches
  • Fixed an issue where a failed task never gets resumed after a successfull file replication phase
  • Added experimental partial downloads support for rsync so big files can be resumed on slow links
  • Added the ability to keep partial downloads that can be resumed on next run (usefull for big files on slow links that reach max execution time)
  • Moved msys specific code to Init(Local|Remote)OSSettings
  • Added a patch by igngvs to fix some issues with Rsync Exclude files
  • Added a patch by Gary Clark to fix some issues with remote deletion
  • Minor fixes from obackup codebase
  • Added compression method fallback (xz, lzma, pigz and gzip)
  • Removed unused code
  • Fixed remote OS detection when a banner is used on SSH
  • Added a routine that reinjects failed deletions for next run in order to prevent bringing back when deletion failed with permission issues
  • Added treat dir symlink as dir parameter

27 May 2014: Osync 0.99 RC3

  • Additionnal delete fix for *BSD and MSYS (deleted file list not created right)
  • Fixed dry mode to use non dry after run treelists to create delete lists
  • Added follow symlink parameter
  • Minor fixes in parameter list when bandwidth parameter is used
  • Added some additionnal checks for *BSD and MacOS environments
  • Changed /bin/bash to /usr/bin/env bash for sanity on other systems, also check for bash presence before running
  • Changed default behavior for quick sync tasks: Will try to resume failed sync tasks once
  • Some code cleanup for state filenames and sync action names
  • Fixed deletion propagation (again). Rsync is definitly not designed to delete a list of files / folders. Rsync replaced by rm function which downloads deletion list to remote system.
  • Added path detection for exclude list file
  • Added a simple init script and an install script
  • Fixed an issue with MacOSX using rsync -E differently than other *nix (Thanks to Pierre Clement)
  • Multislave asynchronous task support (Thanks to Ulrich Norbisrath)
    • This breaks compat with elder osync runs. Add the SYNC_ID suffix to elder state files to keep deleted file information.
  • Added an easier debug setting i.e DEBUG=yes ./osync.sh (Again, thanks to Ulrich Norbisrath)
  • Added hardlink preservation (Thanks to Ulrich Norbisrath)
  • Added external exclusion file support (Thanks to Pierre Clement)
  • Fixed some typos in doc and program itself (Thanks to Pierre Clement)
  • More detailled verbose status messages
  • More detailled status messages
  • Fixed a bug preventing propagation of empty directory deletions
  • Fixed a nasty bug preventing writing lock files on remote system as superuser
  • Gzipped logs are now deleted once sent
  • Fixed some typos (thanks to Pavel Kiryukhin)
  • Fixed a bug with double trailing slashes in certain sceanrios
  • Sync execution don't fails anymore if files vanish during execution, also vanished files get logged
  • Add eventual "comm -23" replacement by "grep -F -x -v -f" to enhance compatibility with other platforms (comm is still much faster than grep, so we keep it)
  • Replaced xargs rm with find -exec rm to better handle file names in soft deletion
  • Fixed soft deletion not happening with relative paths
  • Improved process termination behavior
  • More code merging and cleanup
  • Fixed a bug preventing deleted files in subdirectories propagation (Thanks to Richard Faasen for pointing that out)
  • Some more function merge in sync process
  • Dry mode won't create or modifiy state files anymore and will use dry-state files instead
  • Improved file monitor mode
  • Added possibility to daemonize osync in monitor mode
  • Added monitor mode, which will launch a sync task upon file operations on master replica
  • Changed conf file default format for ssh uri (old format is still compatible)
  • Added ssh uri support for slave replicas
  • Improved execution hooks logs
  • Various bugfixes introduced with function merge
  • Added basic MacOS X support (yet not fully tested)
  • Merged tree list functions into one
  • Added possibility to quick sync two local directories without any prior configuration
  • Added time control on OS detection

02 Nov. 2013: Osync 0.99 RC2

  • Minor improvement on operating system detection
  • Improved RunLocalCommand execution hook
  • Minor improvements on permission checks
  • Made more portability improvements (mostly for FreeBSD, must be run with bash shell)
  • Added local and remote operating system detection
    • Added forced usage of MSYS find on remote MSYS hosts
    • Updated MSYS handling
  • Merged MSYS (MinGW minimal system) bash compatibility under Windows from Obackup
    • Added check for /var/log directory
    • Added check for shared memory directory
    • Added alternative way to kill child processes for other OSes and especially for MSYS (which is a very odd way)
    • Added Sendemail.exe support for windows Alerting
    • Replaced which commend by type -p, as it is more portable
    • Added support for ping.exe from windows
    • Forced usage of MSYS find instead of Windows' find.exe on master
    • Added an optionnal remote rsync executable path parameter
  • Fixed an issue with CheckConnectivity3rdPartyHosts
  • Added an option to stop execution if a local / remote command fails
  • Improved forced quit command by killing all child processes
  • Before / after commands are now ignored on dryruns
  • Improved verbose output
  • Fixed various typos
  • Enforced CheckConnectivityRemoteHost and CheckConnectivity3rdPartyHosts checks (if one of these fails, osync is stopped)

18 Aug. 2013: Osync 0.99 RC1

  • Added possibility to change default logfile
  • Fixed a possible error upon master replica lock check
  • Fixed exclude directorires with spaces in names generate errros on master replica tree functions
  • Dryruns won't create after run tree lists and therefore not prevent building real run delete lists
  • Softdelete and conflict backup functions are now time controlled
  • Added bandwidth limit
  • Update and delete functions now run rsync with --stats parameter
  • Fixed LoadConfigFile function will not warn on wrong config file
  • Added --no-maxtime parameter for sync big changes without enforcing execution time checks

03 Aug. 2013: beta 3 milestone

  • Softdelete functions do now honor --dry switch
  • Simplified sync delete functions
  • Enhanced compatibility with different charsets in filenames
  • Added CentOS 5 compatibility (comm v5.97 without --nocheck-order function replaced by sort)
  • Tree functions now honor supplementary rsync arguments
  • Tree functions now honor exclusion lists

01 Aug. 2013: beta 2 milestone

  • Fixed an issue with spaces in directory trees
  • Fixed an issue with recursive directory trees
  • Revamped a bit code to add bash 3.2 compatibility

24 Jul. 2013: beta milestone

  • Fixed some bad error handling in CheckMasterSlaveDirs and LockDirectories
  • Added support for spaces in sync dirs and exclude lists
  • Fixed false exit code if no remote slave lock present
  • Added minimum disk space checks
  • Added osync support in ssh_filter.sh
  • Added support for sudo exec on remote slave
  • Added support for alternative rsync executable
  • Added support for spaces in sync directories names
  • Added support for ACL and xattr
  • Added --force-unlock parameter to bypass any existing locks on replicas
  • Added full remote support for slave replica
  • Improved error detection
  • Made some changes in execution hook output
  • Fixed an issue with task execution handling exit codes
  • Added master and slave replicas lock functionnality
  • Added rsync exclude patterns support
  • Improved backup items, can now have multiple backups of the same file
  • Added maximum number of resume tries before trying a fresh stateless execution
  • Added possibility to resume a sync after an error
  • Improved task execution time handling
  • Improved SendAlert handling
  • Fixed cleanup launched even if DEBUG=yes
  • Added verbose rsync output
  • Added --dry and --silent parameters
  • Added time control
  • Added master/slave conflict prevalance option
  • Added soft-deleted items
  • Added backup items in case of conflict

19 Jun. 2013: Project begin as Obackup fork