7f5534a0280305806ab8c2337fcdb3e7562ff644
[BackupPC.git] / ChangeLog
1 #========================================================================
2 #
3 # ChangeLog - change log for BackupPC.
4 #
5 # DESCRIPTION
6 #   Revision history for BackupPC, detailing significant changes between
7 #   versions, most recent first.
8 #
9 # AUTHOR
10 #   Craig Barratt  <cbarratt@users.sourceforge.net>
11 #
12 #========================================================================
13 #
14 # Version __VERSION__, released __RELEASEDATE__.
15 #
16 # See http://backuppc.sourceforge.net.
17 #
18 #========================================================================
19
20 #------------------------------------------------------------------------
21 # Version __VERSION__, __RELEASEDATE__
22 #------------------------------------------------------------------------
23
24 * Added German translation, provided by Manfred Herrmann.
25
26 * Fixed large-file problem with rsync, reported by Manfred Herrmann.
27
28 * Fixed zip and tar file download from CGI under mod_perl.  Reported
29   by Pierre Bourgin and Paul Lukins.
30
31 * Fixed directory browsing and top-level directory browsing in 2.0.0beta0.
32   Reported by several users.
33
34 * Added suse-linux init.d script from Leon Letto.
35
36 * Added Gentoo linux init.d script from Tim Demarest.
37
38 * Applied additional i18n strings from GFK and the translation team.
39
40 * Fixed option parsing so that getopts errors are reported and we exit.
41
42 * Changed reporting of Xfer PIDs so that rsync cancel works correctly.
43
44 * Added -v option to BackupPC_dump for verbose output (useful when
45   you run the command manually).  Added messages for all exits.
46
47 * If nmblookup returns multiple IP addresses, NetBiosHostIPFind()
48   now returns the first IP address that matches the subnet mask.
49   Suggested by Tim Demarest.
50
51 * Fixed BackupPC::View so the top-level directory is handled correctly.
52   This allows the top-level share/directory to be restored via the
53   CGI interface.  Reported by several users.
54
55 * Fixed RsyncFileIO failures on certain large files by replacing seek()
56   with sysseek().  Reported by Manfred Herrmann.
57
58 * Added configurable highlighting of PC status in the CGI summary
59   screen; submitted by Tim Demarest.
60
61 * Fixed command queue CGI display; submitted by Tim Demarest.
62
63 #------------------------------------------------------------------------
64 # Version 2.0.0beta1, 30 Mar 2003
65 #------------------------------------------------------------------------
66
67 * Support for rsync and rsyncd backup and restore.  Changes to
68   BackupPC_dump, BackupPC_restore, and new modules BackupPC::Xfer::Rsync
69   and BackupPC::Xfer::RsyncFileIO.
70
71 * Added internationalization (i18n) code from Xavier Nicollet,
72   with additions from Guillaume Filion.  Voila!  BackupPC_Admin
73   now supports English and French, and adding more languages is
74   now easy.  New config paramater $Conf{Language} sets the language.
75
76 * Added Spanish translation es.pm from Javieri Gonzalez.
77
78 * Added optional user-defined pre/post dump/restore commands, allowing
79   things like database shutdown/startup for dumps.
80
81 * Changed the way hosts are found.
82
83 * Added $Conf{ClientNameAlias}, which allows the name of the physical
84   client machine to be set.  This allows several different backup
85   "hosts" to all refer to the same physical machine, which is
86   convenient if several different types of data need to be backed
87   up, or if different parameters are needed for different parts of
88   the host.
89
90 * Replaced $Conf{PingArgs} with $Conf{PingCmd}, added $Conf{DfCmd},
91   $Conf{NmbLookupCmd} allowing all these commands to be fully
92   configured.  Also, all commands can also now be fragments of
93   perl code.
94
95 * Moved all smbclient commands into the config.pl file so the specific
96   arguments can be customized.  New config parameters are
97   $Conf{SmbClientFullCmd}, $Conf{SmbClientIncrCmd} and
98   $Conf{SmbClientRestoreCmd}.
99
100 * Added new BackupPC::View module that creates views of backups
101   (handling merging etc).  Updated BackupPC_Admin, BackupPC_zipCreate
102   and BackupPC_tarCreate to use BackupPC::View.  This removes lots
103   of merging and mangling code from the higher-level code.
104
105 * Added code from Toby Johnson that allows additional users to be
106   specified in the hosts file; these users can also view/start/stop
107   and restore backups for that host.  Also added a new config
108   setting $Conf{CgiNavBarAdminAllHosts} that allows all hosts to
109   be listed in the left nav bar for admins.
110
111 * Added $Conf{HardLinkMax} (default 31999) which sets the limit on
112   the maximum number of hardlinks per file in the pool.  If a file
113   ever gets to this number of links a new pool file is created to
114   handle additional links.
115
116 * Added $Conf{PerlModuleLoad}, which allows optional additional perl
117   modules to be loaded.
118
119 * Added $Conf{EMailUserDestDomain} and other EMail config settings to
120   allow language-specific default messages to be overridden.
121
122 * Added BPC_FTYPE_DELETED to lib/BackupPC/Attrib.pm, allowing deleted
123   files to be represented in the attrib file correctly.
124
125 * Added support for environment variable BPC_SMB_PASSWD, which is the
126   client's smb password.  This overrides the old environment variable
127   PASSWD.
128
129 * Added taint cleanup for perl5.8 to lib/BackupPC/Lib.pm.
130
131 * Changed $tar_unpack_header format in BackupPC_tarExtract to correctly
132   handle files with trailing spaces.
133
134 * Added catching of SIG_PIPE to BackupPC_dump, and changed catch_signal
135   to ignore multiple signals of the same type.
136
137 * Added binmode(STDIN) to BackupPC_tarExtract, suggested by Pat LoPresti
138   to fix a problem a RedHat8 with perl 5.8.0.  It's unclear why this
139   helps, but it should be benign.  See:
140     http://sourceforge.net/mailarchive/forum.php?thread_id=1853018&forum_id=503
141
142 * Added reporting of the largest number of hardlinks in the pool to the
143   log file.
144
145 * Adding reporting of syntax errors in the per-PC config.pl file.
146
147 * Updated BackupPC_sendEmail to handle language-specific email messages.
148
149 * Allow client (host) names to contain spaces.  Spaces in host names
150   need to be escaped via "\" in the hosts file.  The user of spaces in
151   host names is discouraged, but they should work.  One feature that
152   doesn't work with host names that contain spaces is the highlighting
153   of that name in the log file display in the CGI interface.  There are
154   no plans to fix this.
155
156 * Renamed $Conf{SmbClientTimeout} to $Conf{ClientTimeout}.
157
158 * Fixed all open() calls to use 3 argument form to fix handling of file
159   names with trailing whitespace.  Also fixed CGI interface so these
160   file names are displayed correctly.
161
162 * Fixed new 2.0.0 CGI navigation bug that causes the top-level directory
163   to have a URL "&share=//boot&dir=" instead of "&share=/boot&dir=/".
164   Reported by Pascal Schelcher.  Fixed similar problem reported by
165   Doug Lytle.
166
167 * Added "PerlTaintCheck On" to the mod_perl section in the docs,
168   suggested by Tim Demarest.
169
170 #------------------------------------------------------------------------
171 # Version 1.5.0, 2 Aug 2002
172 #------------------------------------------------------------------------
173
174 * Changed conf/config.pl so that $Conf{TarIncrArgs} uses the --newer
175   option instead of --newer-mtime.  Also removed --atime-preserve from
176   $Conf{TarClientCmd}.  This makes the default settings work better
177   with tripwire.
178
179 * Fixed configure.pl so it correctly detects a running BackupPC <= v1.4.0
180   so it can correctly warn the user to stop it before upgrading.  Reported
181   by David Holland.
182
183 * Added missing ";" to entity escape in EscapeHTML in BackupPC_Admin.
184   Reported by Guillaume Filion.
185
186 * Added LDAP setup to documentation from David Holland.
187
188 * Tar.pm now adds a "." to file paths that start with "/", so that all
189   tar paths are relative.  From Ludovic Drolez.
190
191 #------------------------------------------------------------------------
192 # Version 1.5.0beta0, 30 Jun 2002
193 #------------------------------------------------------------------------
194
195 * A full set of restore options is now supported, including direct
196   restore via smbclient or tar or downloading a zip or tar file.
197
198 * Major additions to CGI script to support better directory navigation,
199   restore features and mod_perl.  Also, file downloads from the CGI
200   interface now correctly preserve the file name and provide the
201   correct Content-Type for the most common types of files.  Improved
202   directory navigation was contributed by Ryan Kucera.
203
204 * New script BackupPC_zipCreate (contributed by Guillaume Filion) is the
205   zip analog of BackupPC_tarCreate.  BackupPC_zipCreate can be used to
206   create a zip archive of any portion of a backup.
207
208 * Substantial additions to BackupPC_tarCreate to support restore,
209   including modifying path names, handling hardlinks, fixing
210   support of old backups without attributes (pre-v1.4.0).  Plus
211   BackupPC_tarCreate is now an offical part of the release.
212   (Lack of support for hardlinks was reported by John Stanley.)
213
214 * BackupPC_tarExtract now supports hardlinks and fixed pooling of
215   attribute files.
216
217 * A unix domain socket is now used for communication between the CGI
218   interface and BackupPC.  The original TCP socket is optional.  Sockets
219   are correctly re-initialized if config.pl is updated with new socket
220   settings.
221
222 * For improved security messages over the unix or TCP socket are protected
223   via an MD5 digest based on a shared secret, a sequence number, a time
224   stamp and a unique per-connection number.
225
226 * Additions to configure.pl to support install of directory navigation
227   images.
228
229 * Fixed case where $Conf{BackupFilesOnly} or $Conf{BackupFilesExclude}
230   were set to a single string or list (in v1.4.0 only the case of
231   hash worked correctly).  Reported by Phillip Bertolus.
232
233 * Fixed case of $Conf{BackoutGoodCnt} == 0.  This setting now makes the
234   client always subject to blackout, matching the comments in config.pl.
235   Also fixed handling of $Conf{BackoutGoodCnt} < 0 in the CGI script
236   reported by Pascal Schelcher.
237
238 * Fixed byte and file totals for tar backups, reported by several users.
239
240 * Fixed --newer-mtime date/timestamp format to make it ISO 8601 compliant,
241   suggested by Erminio Baranzini.
242
243 * Fixed handling of $Conf{BackupFilesOnly} in BackupPC::Xfer::Tar.pm, as
244   well as shell escaping of tar arguments.
245
246 * Fixed entity encoding of 8-bit characters in the CGI interface.
247
248 * Added optional CGI headers in $Conf{CgiHeaders} that by default
249   is set to a no-cache pragma.  Suggested by Benno Zuure.
250
251 #------------------------------------------------------------------------
252 # Version 1.4.0, 16 Mar 2002
253 #------------------------------------------------------------------------
254
255 * BackupPC now supports tar (in addition to smb) for extracting host    
256   data.  This is the most convenient option for linux/unix hosts.
257   Tar can be configured to run over ssh, rsh or to backup a local
258   nfs mount from the host.
259
260 * Support for special files, including symbolic links, fifo, character
261   and block device files has been added, so that all native linux/unix
262   file types can be correctly backed up when using tar transport.
263   Special files are all stored as regular files and the type attributes
264   are used to remember the original file type.
265
266 * All unix file attributes are now saved (and pooled when possible).
267   This includes user and group ownership, permissions, and modification
268   time.  Smbclient also does a reasonable job of emulating unix 
269   permissions (such as mtime), and these attributes get saved too.
270
271 * The new default is to not fill incremental dumps.  configure.pl
272   automatically sets $Conf{IncrFill} to 0.  The default was 1
273   (incrementals were filled with hardlinks).  Since the CGI
274   script does filling at browsing time, there is no need to
275   fill incremental dumps.
276
277 * Backup file names are now stored in "mangled" form. Each node of a
278   path is preceded by "f", and special characters (\n, \r, % and /) are
279   URI-encoded as "%xx", where xx is the ascii character's hex value. So
280   c:/craig/example.txt is now stored as fc/fcraig/fexample.txt. This
281   was done mainly so meta-data could be stored alongside the backup
282   files without name collisions.  In particular, the attributes for the
283   files in a directory are stored in a file called "attrib", and
284   mangling avoids file name collisions (I discarded the idea of having
285   a duplicate directory tree for every backup just to store the
286   attributes). Other meta-data (eg: rsync checksums) could be stored in
287   file names preceded by, eg, "c".  There are two other benefits to
288   mangling: the share name might contain "/" (eg: "/home/craig" for tar
289   transport), and I wanted that represented as a single level in the
290   storage tree.  Secondly, as files are written to NewFileList for later
291   processing by BackupPC_link, embedded newlines in the file's path
292   will cause problems which are avoided by mangling.
293
294   The CGI script undoes the mangling, so it is invisibe to the user.
295   Of course, old (unmangled) backups are still supported by the CGI
296   interface.
297
298 * Various changes to the CGI interface, BackupPC_Admin:
299
300   + Added button that allows users to manually start a full dump in
301     addition to the existing incremental dump.
302
303   + Added display of file attributes when browsing backups.
304
305   + Added an optional holdoff time specified by the user when canceling
306     a backup. BackupPC will not attempt any new backups for at least the
307     specified time. This holdoff time can be changed whether or not a
308     backup is running.
309
310   + Added supports for file mangling, and correct merging of unfilled
311     backups from mangled or unmangled (and compressed or uncompressed)
312     fulls when browsing or restoring.
313
314   + Only displays a "Start Incr Backup" button if there are already some
315     backups.
316
317   + For DHCP hosts, when a user tries to manually start a backup, add
318     a check for the netbios name of both the host the request came
319     from (REMOTE_ADDR) and the last known DHCP address for that host
320     to see if either address matches the host. If not, an error
321     message is display. The previous behavior was that only requests
322     from the client itself succeeded, and requests from other machines
323     quietly failed.
324
325 * Changed the version numbering to X.Y.Z, instead of X.0Y. This release
326   is 1.4.0. The first digit is for major new releases, the middle digit
327   is for significant feature releases and improvements, and the last
328   digit is for bug fixes. You should think of the old 1.00, 1.01, 1.02
329   and 1.03 as 1.0.0, ..., 1.3.0.
330
331 * BackupPC and the CGI script BackupPC_Admin now check that the effective
332   user id is correct to avoid accidentally launching BackupPC as the
333   wrong user or detecting CGI configuration problems.  This behavior
334   can be turned off using the $Conf{BackupPCUserVerify} option.
335
336 * In numerous places changed "Smb" to "Xfer" (eg: log file names) to
337   support generic names for both smb and tar transport methods.  The
338   CGI script checks for old names for backward compatibility.
339
340 * Major changed to Backup_dump to support new tar transport.  All transport
341   specific code moved into BackupPC::Xfer::Smb and BackupPC::Xfer::Tar
342   objects.
343
344 * Added workaround for a bug in Samba's smbclient for files between 2GB
345   and 4GB.  The file size in the tar header is incorrect.  This allows
346   files up to 4GB to work with smbclient, rather than 2GB.  To support
347   files larger than 2GB you must make sure perl is compiled with the
348   uselargefiles option (use "perl -V | egrep largefiles" to check) and
349   the pool directory must be on a file system that supports large files.
350
351 * Moved the pool writing code into a module BackupPC::PoolWrite.  This
352   allows the clever file pool checking (digest, uncompressing, comparing
353   etc with minimum disk IO) to be used easily in multiple places (eg: it
354   is now used for writing attribute files so they can be pooled).
355
356 * Changed MD5 to Digest::MD5 to avoid use of the depreceated MD5 module.
357
358 * Shortened default $Conf{MyPath} so that perl's taint mode is more likely
359   to be happy.  The old $Conf{MyPath} contained /usr/local/bin, which
360   on one user's machine was world writable and perl -T correctly
361   complained about it.
362
363 * Fixed ping command options in Lib.pm so that it works on OpenBSD.
364   Thanks to Kyle Amon for sending the fix.  Decided to move the
365   ping options from Lib.pm into config.pl (as $Conf{PingArgs}) and
366   now configure.pl tries to come up with a sensible default based on
367   the OS.
368
369 * Fixed argument checking in BackupPC_tarExtract to allow '$' in the
370   share name (eg: C$).  Thanks to Jules Agee for this fix.  Also
371   changed the default config.pl so that single quotes are used
372   everywhere so that people don't get tripped up putting '$' inside
373   double-quoted strings.
374
375 #------------------------------------------------------------------------
376 # Version 1.03, 9 Dec 2001
377 #------------------------------------------------------------------------
378
379 * BackupPC now has full support for compression.  There are now two
380   pool areas, the original pool for uncompressed files, and cpool for
381   compressed files. The compression is done by Compress::Zlib.
382   Compression reduces the pool disk usage by around 40%, although your
383   mileage may vary.  Compression is optional and can also be specified on
384   a per-PC basis (although this will cost more pool storage since many
385   backup files will have to be stored in both compressed and
386   uncompressed forms.
387
388 * A new script, BackupPC_compressPool, can be run to compress the entire
389   pool.  This is used once to migrate all the pool data from uncompressed
390   to compressed on existing installations.  Read the documentation
391   (Installing BackupPC/Compressing an existing pool) before running
392   BackupPC_compressPool!
393
394   Alternatively, compression can simply be turned on and all new backups
395   will be compressed. Both old (uncompressed) and new (compressed)
396   backups can be browsed and viewed. Eventually, the old backups will
397   expire and all the pool data will be compressed.  However, until the
398   old backups expire, this approach could require 60% or more additional
399   pool storage space to store both uncompressed and compressed versions
400   of the backup files.
401
402 * Significant improvements to the cgi interface, BackupPC_Admin:
403
404     - much better layout navigation
405     - handles compressed backup files and compressed log files
406     - handles unfilled incremental dumps
407     - better backup directory browsing navigation
408     - reports compression statistics
409     - $Conf{CgiDateFormatMMDD} allows you to set date format (MM/DD or DD/MM)
410     - Additional customization with $Conf{CgiHeaderFontType},
411       $Conf{CgiHeaderFontSize}, $Conf{CgiNavBarBgColor}, and
412       $Conf{CgiHeaderBgColor}.
413
414 * Eliminated BackupPC_queueAll.  BackupPC directly reads the hosts
415   file and queues the PCs itself.  Like config.pl, BackupPC will
416   re-read the hosts file on each wakeup if its modification time
417   changes, or upon a SIGHUP.  This also makes for better behavior
418   when adding a host: if you add hosts, simply send a SIGHUP to
419   BackupPC or wait for the next wakeup.
420
421 * BackupPC_dump now compresses the SmbLOG file if compression is enabled.
422
423 * BackupPC_dump keeps track of compressed file sizes so that compression
424   statistics can be reported by the cgi interface.
425
426 * Aging of old log files now handles compressed log files (.z extension).
427
428 * Added configuration option $Conf{IncrFill} to specify whether
429   incremental dumps should be filled in.  Old behavior was that
430   filling was on.  Now it's optional.  See config.pl for more
431   details.
432
433 * BackupPC_nightly now cleans and generates statistics for both
434   the uncompressed pool and compressed pool (cpool).
435
436 * Added new utility script BackupPC_zcat that can be used to
437   uncompresses BackupPC files.
438
439 * configure.pl offers various options related to compression,
440   depending upon whether this is a new install or upgrade,
441   and whether or not Compress::Zlib is installed.
442
443 * configure.pl now makes a backup copy of config.pl before
444   config.pl is updated.
445
446 * added three new fields to the backups file to handle optional
447   filling and compression stats.
448
449 * Added -e option to BackupPC_dump.  BackupPC now invokes BackupPC_dump -e
450   on each dhcp host once each night to verify that very old backups are
451   expired.  This ensures that very old backups are expired even if
452   the dhcp host has not been on the network for a long time.
453
454 * fixed bug in BackupPC::FileZIO.pm that required Compress::Zlib,
455   even if compression was off.  Thanks to Steve Holmes for reporting
456   this.
457
458 * fixed bug that caused a BackupPC queue to get blocked when a backup
459   cancel attempt was made during the BackupPC_link phase.
460
461 #------------------------------------------------------------------------
462 # Version 1.02, 28 Oct 2001.
463 #------------------------------------------------------------------------
464
465 * Added new script BackupPC_tarExtract to extract the smbclient tar
466   archive. This reduces disk writes by perhaps 90-95% and disk reads by
467   50%. Previously, tar was used to extract and write everything to disk.
468   Then BackupPC_dump would read enough of each file to compute the MD5
469   digest, and then compare the full file with candidate pool files.  So
470   for each 1MB file that matches a single file in the pool, there would
471   be 1MB of disk writes and 2MB of disk reads (to compare two 1MB files).
472
473   BackupPC_tarExtract instead extracts the archive using a 1MB memory
474   buffer.  This allows the MD5 digest to be computed without touching the
475   disk.  Next, any potential pool file compares are done by comparing the
476   pool file against the incoming tar data in memory, which only requires
477   the pool file to be read.  So for each 1MB file that matches a single
478   file in the pool, there are now no disk writes, and only 1MB of reads.
479   BackupPC_tarExtract handles arbitrary size files and repeated
480   potential pool matches.  If the incoming file doesn't match the pool
481   then it is written to disk (once the pool is mature this happens maybe
482   5-10% of the time).
483
484 * Substantial changes to BackupPC_dump:
485
486     + BackupPC_tarExtract is now used in place of tar.
487
488     + BackupPC_dump now reads the output from both smbclient and
489       BackupPC_tarExtract and merges them into SmbLOG.
490
491     + Named pipes are no longer used to connect smbclient to tar
492       (now BackupPC_tarExtract).  Regular pipes are used instead.
493       This avoids the need to system mknod or mkfifo.
494
495     + Locked files on the client that can't be read by smbclient
496       previously were filled with 0x0 bytes by smbclient, meaning
497       tar extracted a useless file filled with 0x0 bytes.  Now,
498       BackupPC_dump watches the output of smbclient and removes
499       any files that smbclient couldn't read.  This avoids storing
500       useless files.  It tries to replace such files with a hard link
501       to a previous dump.  These actions appear in the log file.
502
503 * added new module lib/BackupPC/FileZIO.pm. This handles pool file
504   I/O and is used by BackupPC_tarExtract.  BackupPC::FileIO supports
505   reading and writing compressed and regular files and provides all the
506   hooks for compression support in BackupPC (should be supported in next
507   version). BackupPC::FileIO also does efficient writing of files that
508   contain leading 0x0 bytes (by seeking past the 0x0 bytes). This is
509   helpful when smbclient reads a locked file, and it fills the tar
510   output with a file of the correct size but all 0x0.  Such files will be
511   later removed by BackupPC_dump.  But in the meantime, BackupPC::FileIO
512   writes such files efficiently (as sparse files), meaning just a few
513   blocks of disk space will be needed even if the file is large.
514
515 * alive/dead counting for blackout now works correctly for DHCP hosts.
516
517 * BackupPC resets activeJob on startup, to fix bug when BackupPC was
518   killed and restarted with backups running.
519
520 * added extra non blocking select() in BackupPC to make sure the socket
521   reads don't block.
522
523 * BackupPC avoids queuing multiple BackupPC_queueAll's on the CmdQueue.
524
525 * Updated BackupPC_sendEmail to correctly parse the locked file
526   error from 2.2.1a smbclient, so that missing Outlook file emails
527   can be correctly sent.
528
529 * Changed HostInfoRead() in lib/BackupPC/Lib.pm to lowercase the
530   hostname read from the hosts file.
531
532 * BackupPC_Admin provides general summary when the host name is empty.
533
534 * configure.pl (and BackupPC) now requires perl 5.6.0 or later.
535
536 * configure.pl complains if BackupPC is already running, reminding you
537   to stop it before upgrading.
538
539 * updated documentation, and fixed auto-insertion of config.pl into
540   BackupPC.pod (previously the last config parameter was left out of
541   BackupPC.pod).
542
543 #------------------------------------------------------------------------
544 # Version 1.01, 30 Sep 2001
545 #------------------------------------------------------------------------
546
547 * Documentation cleanup in README, doc/BackupPC.pod, conf/config.pl.
548
549 * BackupPC_sendMail now reads the optional per-PC config file, allowing
550   email configuration parameters to be set on a per-PC basis.
551
552 * Removed the unused 4096-length MD5 digest code in lib/BackupPC/Lib.pm.
553
554 #------------------------------------------------------------------------
555 # Version 1.00, 21 Sep 2001
556 #------------------------------------------------------------------------
557
558 * Initial release of BackupPC on sourceforge.net.