v1.5.0
[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 1.5.0, released 2 Aug 2002.
15 #
16 # See http://backuppc.sourceforge.net.
17 #
18 #========================================================================
19
20 #------------------------------------------------------------------------
21 # Version 1.5.0, 2 Aug 2002
22 #------------------------------------------------------------------------
23
24 * Changed conf/config.pl so that $Conf{TarIncrArgs} uses the --newer
25   option instead of --newer-mtime.  Also removed --atime-preserve from
26   $Conf{TarClientCmd}.  This makes the default settings work better
27   with tripwire.
28
29 * Fixed configure.pl so it correctly detects a running BackupPC <= v1.4.0
30   so it can correctly warn the user to stop it before upgrading.  Reported
31   by David Holland.
32
33 * Added missing ";" to entity escape in EscapeHTML in BackupPC_Admin.
34   Reported by Guillaume Filion.
35
36 * Added LDAP setup to documentation from David Holland.
37
38 * Tar.pm now adds a "." to file paths that start with "/", so that all
39   tar paths are relative.  From Ludovic Drolez.
40
41 #------------------------------------------------------------------------
42 # Version 1.5.0beta0, 30 Jun 2002
43 #------------------------------------------------------------------------
44
45 * A full set of restore options is now supported, including direct
46   restore via smbclient or tar or downloading a zip or tar file.
47
48 * Major additions to CGI script to support better directory navigation,
49   restore features and mod_perl.  Also, file downloads from the CGI
50   interface now correctly preserve the file name and provide the
51   correct Content-Type for the most common types of files.  Improved
52   directory navigation was contributed by Ryan Kucera.
53
54 * New script BackupPC_zipCreate (contributed by Guillaume Filion) is the
55   zip analog of BackupPC_tarCreate.  BackupPC_zipCreate can be used to
56   create a zip archive of any portion of a backup.
57
58 * Substantial additions to BackupPC_tarCreate to support restore,
59   including modifying path names, handling hardlinks, fixing
60   support of old backups without attributes (pre-v1.4.0).  Plus
61   BackupPC_tarCreate is now an offical part of the release.
62   (Lack of support for hardlinks was reported by John Stanley.)
63
64 * BackupPC_tarExtract now supports hardlinks and fixed pooling of
65   attribute files.
66
67 * A unix domain socket is now used for communication between the CGI
68   interface and BackupPC.  The original TCP socket is optional.  Sockets
69   are correctly re-initialized if config.pl is updated with new socket
70   settings.
71
72 * For improved security messages over the unix or TCP socket are protected
73   via an MD5 digest based on a shared secret, a sequence number, a time
74   stamp and a unique per-connection number.
75
76 * Additions to configure.pl to support install of directory navigation
77   images.
78
79 * Fixed case where $Conf{BackupFilesOnly} or $Conf{BackupFilesExclude}
80   were set to a single string or list (in v1.4.0 only the case of
81   hash worked correctly).  Reported by Phillip Bertolus.
82
83 * Fixed case of $Conf{BackoutGoodCnt} == 0.  This setting now makes the
84   client always subject to blackout, matching the comments in config.pl.
85   Also fixed handling of $Conf{BackoutGoodCnt} < 0 in the CGI script
86   reported by Pascal Schelcher.
87
88 * Fixed byte and file totals for tar backups, reported by several users.
89
90 * Fixed --newer-mtime date/timestamp format to make it ISO 8601 compliant,
91   suggested by Erminio Baranzini.
92
93 * Fixed handling of $Conf{BackupFilesOnly} in BackupPC::Xfer::Tar.pm, as
94   well as shell escaping of tar arguments.
95
96 * Fixed entity encoding of 8-bit characters in the CGI interface.
97
98 * Added optional CGI headers in $Conf{CgiHeaders} that by default
99   is set to a no-cache pragma.  Suggested by Benno Zuure.
100
101 #------------------------------------------------------------------------
102 # Version 1.4.0, 16 Mar 2002
103 #------------------------------------------------------------------------
104
105 * BackupPC now supports tar (in addition to smb) for extracting host    
106   data.  This is the most convenient option for linux/unix hosts.
107   Tar can be configured to run over ssh, rsh or to backup a local
108   nfs mount from the host.
109
110 * Support for special files, including symbolic links, fifo, character
111   and block device files has been added, so that all native linux/unix
112   file types can be correctly backed up when using tar transport.
113   Special files are all stored as regular files and the type attributes
114   are used to remember the original file type.
115
116 * All unix file attributes are now saved (and pooled when possible).
117   This includes user and group ownership, permissions, and modification
118   time.  Smbclient also does a reasonable job of emulating unix 
119   permissions (such as mtime), and these attributes get saved too.
120
121 * The new default is to not fill incremental dumps.  configure.pl
122   automatically sets $Conf{IncrFill} to 0.  The default was 1
123   (incrementals were filled with hardlinks).  Since the CGI
124   script does filling at browsing time, there is no need to
125   fill incremental dumps.
126
127 * Backup file names are now stored in "mangled" form. Each node of a
128   path is preceded by "f", and special characters (\n, \r, % and /) are
129   URI-encoded as "%xx", where xx is the ascii character's hex value. So
130   c:/craig/example.txt is now stored as fc/fcraig/fexample.txt. This
131   was done mainly so meta-data could be stored alongside the backup
132   files without name collisions.  In particular, the attributes for the
133   files in a directory are stored in a file called "attrib", and
134   mangling avoids file name collisions (I discarded the idea of having
135   a duplicate directory tree for every backup just to store the
136   attributes). Other meta-data (eg: rsync checksums) could be stored in
137   file names preceded by, eg, "c".  There are two other benefits to
138   mangling: the share name might contain "/" (eg: "/home/craig" for tar
139   transport), and I wanted that represented as a single level in the
140   storage tree.  Secondly, as files are written to NewFileList for later
141   processing by BackupPC_link, embedded newlines in the file's path
142   will cause problems which are avoided by mangling.
143
144   The CGI script undoes the mangling, so it is invisibe to the user.
145   Of course, old (unmangled) backups are still supported by the CGI
146   interface.
147
148 * Various changes to the CGI interface, BackupPC_Admin:
149
150   + Added button that allows users to manually start a full dump in
151     addition to the existing incremental dump.
152
153   + Added display of file attributes when browsing backups.
154
155   + Added an optional holdoff time specified by the user when canceling
156     a backup. BackupPC will not attempt any new backups for at least the
157     specified time. This holdoff time can be changed whether or not a
158     backup is running.
159
160   + Added supports for file mangling, and correct merging of unfilled
161     backups from mangled or unmangled (and compressed or uncompressed)
162     fulls when browsing or restoring.
163
164   + Only displays a "Start Incr Backup" button if there are already some
165     backups.
166
167   + For DHCP hosts, when a user tries to manually start a backup, add
168     a check for the netbios name of both the host the request came
169     from (REMOTE_ADDR) and the last known DHCP address for that host
170     to see if either address matches the host. If not, an error
171     message is display. The previous behavior was that only requests
172     from the client itself succeeded, and requests from other machines
173     quietly failed.
174
175 * Changed the version numbering to X.Y.Z, instead of X.0Y. This release
176   is 1.4.0. The first digit is for major new releases, the middle digit
177   is for significant feature releases and improvements, and the last
178   digit is for bug fixes. You should think of the old 1.00, 1.01, 1.02
179   and 1.03 as 1.0.0, ..., 1.3.0.
180
181 * BackupPC and the CGI script BackupPC_Admin now check that the effective
182   user id is correct to avoid accidentally launching BackupPC as the
183   wrong user or detecting CGI configuration problems.  This behavior
184   can be turned off using the $Conf{BackupPCUserVerify} option.
185
186 * In numerous places changed "Smb" to "Xfer" (eg: log file names) to
187   support generic names for both smb and tar transport methods.  The
188   CGI script checks for old names for backward compatibility.
189
190 * Major changed to Backup_dump to support new tar transport.  All transport
191   specific code moved into BackupPC::Xfer::Smb and BackupPC::Xfer::Tar
192   objects.
193
194 * Added workaround for a bug in Samba's smbclient for files between 2GB
195   and 4GB.  The file size in the tar header is incorrect.  This allows
196   files up to 4GB to work with smbclient, rather than 2GB.  To support
197   files larger than 2GB you must make sure perl is compiled with the
198   uselargefiles option (use "perl -V | egrep largefiles" to check) and
199   the pool directory must be on a file system that supports large files.
200
201 * Moved the pool writing code into a module BackupPC::PoolWrite.  This
202   allows the clever file pool checking (digest, uncompressing, comparing
203   etc with minimum disk IO) to be used easily in multiple places (eg: it
204   is now used for writing attribute files so they can be pooled).
205
206 * Changed MD5 to Digest::MD5 to avoid use of the depreceated MD5 module.
207
208 * Shortened default $Conf{MyPath} so that perl's taint mode is more likely
209   to be happy.  The old $Conf{MyPath} contained /usr/local/bin, which
210   on one user's machine was world writable and perl -T correctly
211   complained about it.
212
213 * Fixed ping command options in Lib.pm so that it works on OpenBSD.
214   Thanks to Kyle Amon for sending the fix.  Decided to move the
215   ping options from Lib.pm into config.pl (as $Conf{PingArgs}) and
216   now configure.pl tries to come up with a sensible default based on
217   the OS.
218
219 * Fixed argument checking in BackupPC_tarExtract to allow '$' in the
220   share name (eg: C$).  Thanks to Jules Agee for this fix.  Also
221   changed the default config.pl so that single quotes are used
222   everywhere so that people don't get tripped up putting '$' inside
223   double-quoted strings.
224
225 #------------------------------------------------------------------------
226 # Version 1.03, 9 Dec 2001
227 #------------------------------------------------------------------------
228
229 * BackupPC now has full support for compression.  There are now two
230   pool areas, the original pool for uncompressed files, and cpool for
231   compressed files. The compression is done by Compress::Zlib.
232   Compression reduces the pool disk usage by around 40%, although your
233   mileage may vary.  Compression is optional and can also be specified on
234   a per-PC basis (although this will cost more pool storage since many
235   backup files will have to be stored in both compressed and
236   uncompressed forms.
237
238 * A new script, BackupPC_compressPool, can be run to compress the entire
239   pool.  This is used once to migrate all the pool data from uncompressed
240   to compressed on existing installations.  Read the documentation
241   (Installing BackupPC/Compressing an existing pool) before running
242   BackupPC_compressPool!
243
244   Alternatively, compression can simply be turned on and all new backups
245   will be compressed. Both old (uncompressed) and new (compressed)
246   backups can be browsed and viewed. Eventually, the old backups will
247   expire and all the pool data will be compressed.  However, until the
248   old backups expire, this approach could require 60% or more additional
249   pool storage space to store both uncompressed and compressed versions
250   of the backup files.
251
252 * Significant improvements to the cgi interface, BackupPC_Admin:
253
254     - much better layout navigation
255     - handles compressed backup files and compressed log files
256     - handles unfilled incremental dumps
257     - better backup directory browsing navigation
258     - reports compression statistics
259     - $Conf{CgiDateFormatMMDD} allows you to set date format (MM/DD or DD/MM)
260     - Additional customization with $Conf{CgiHeaderFontType},
261       $Conf{CgiHeaderFontSize}, $Conf{CgiNavBarBgColor}, and
262       $Conf{CgiHeaderBgColor}.
263
264 * Eliminated BackupPC_queueAll.  BackupPC directly reads the hosts
265   file and queues the PCs itself.  Like config.pl, BackupPC will
266   re-read the hosts file on each wakeup if its modification time
267   changes, or upon a SIGHUP.  This also makes for better behavior
268   when adding a host: if you add hosts, simply send a SIGHUP to
269   BackupPC or wait for the next wakeup.
270
271 * BackupPC_dump now compresses the SmbLOG file if compression is enabled.
272
273 * BackupPC_dump keeps track of compressed file sizes so that compression
274   statistics can be reported by the cgi interface.
275
276 * Aging of old log files now handles compressed log files (.z extension).
277
278 * Added configuration option $Conf{IncrFill} to specify whether
279   incremental dumps should be filled in.  Old behavior was that
280   filling was on.  Now it's optional.  See config.pl for more
281   details.
282
283 * BackupPC_nightly now cleans and generates statistics for both
284   the uncompressed pool and compressed pool (cpool).
285
286 * Added new utility script BackupPC_zcat that can be used to
287   uncompresses BackupPC files.
288
289 * configure.pl offers various options related to compression,
290   depending upon whether this is a new install or upgrade,
291   and whether or not Compress::Zlib is installed.
292
293 * configure.pl now makes a backup copy of config.pl before
294   config.pl is updated.
295
296 * added three new fields to the backups file to handle optional
297   filling and compression stats.
298
299 * Added -e option to BackupPC_dump.  BackupPC now invokes BackupPC_dump -e
300   on each dhcp host once each night to verify that very old backups are
301   expired.  This ensures that very old backups are expired even if
302   the dhcp host has not been on the network for a long time.
303
304 * fixed bug in BackupPC::FileZIO.pm that required Compress::Zlib,
305   even if compression was off.  Thanks to Steve Holmes for reporting
306   this.
307
308 * fixed bug that caused a BackupPC queue to get blocked when a backup
309   cancel attempt was made during the BackupPC_link phase.
310
311 #------------------------------------------------------------------------
312 # Version 1.02, 28 Oct 2001.
313 #------------------------------------------------------------------------
314
315 * Added new script BackupPC_tarExtract to extract the smbclient tar
316   archive. This reduces disk writes by perhaps 90-95% and disk reads by
317   50%. Previously, tar was used to extract and write everything to disk.
318   Then BackupPC_dump would read enough of each file to compute the MD5
319   digest, and then compare the full file with candidate pool files.  So
320   for each 1MB file that matches a single file in the pool, there would
321   be 1MB of disk writes and 2MB of disk reads (to compare two 1MB files).
322
323   BackupPC_tarExtract instead extracts the archive using a 1MB memory
324   buffer.  This allows the MD5 digest to be computed without touching the
325   disk.  Next, any potential pool file compares are done by comparing the
326   pool file against the incoming tar data in memory, which only requires
327   the pool file to be read.  So for each 1MB file that matches a single
328   file in the pool, there are now no disk writes, and only 1MB of reads.
329   BackupPC_tarExtract handles arbitrary size files and repeated
330   potential pool matches.  If the incoming file doesn't match the pool
331   then it is written to disk (once the pool is mature this happens maybe
332   5-10% of the time).
333
334 * Substantial changes to BackupPC_dump:
335
336     + BackupPC_tarExtract is now used in place of tar.
337
338     + BackupPC_dump now reads the output from both smbclient and
339       BackupPC_tarExtract and merges them into SmbLOG.
340
341     + Named pipes are no longer used to connect smbclient to tar
342       (now BackupPC_tarExtract).  Regular pipes are used instead.
343       This avoids the need to system mknod or mkfifo.
344
345     + Locked files on the client that can't be read by smbclient
346       previously were filled with 0x0 bytes by smbclient, meaning
347       tar extracted a useless file filled with 0x0 bytes.  Now,
348       BackupPC_dump watches the output of smbclient and removes
349       any files that smbclient couldn't read.  This avoids storing
350       useless files.  It tries to replace such files with a hard link
351       to a previous dump.  These actions appear in the log file.
352
353 * added new module lib/BackupPC/FileZIO.pm. This handles pool file
354   I/O and is used by BackupPC_tarExtract.  BackupPC::FileIO supports
355   reading and writing compressed and regular files and provides all the
356   hooks for compression support in BackupPC (should be supported in next
357   version). BackupPC::FileIO also does efficient writing of files that
358   contain leading 0x0 bytes (by seeking past the 0x0 bytes). This is
359   helpful when smbclient reads a locked file, and it fills the tar
360   output with a file of the correct size but all 0x0.  Such files will be
361   later removed by BackupPC_dump.  But in the meantime, BackupPC::FileIO
362   writes such files efficiently (as sparse files), meaning just a few
363   blocks of disk space will be needed even if the file is large.
364
365 * alive/dead counting for blackout now works correctly for DHCP hosts.
366
367 * BackupPC resets activeJob on startup, to fix bug when BackupPC was
368   killed and restarted with backups running.
369
370 * added extra non blocking select() in BackupPC to make sure the socket
371   reads don't block.
372
373 * BackupPC avoids queuing multiple BackupPC_queueAll's on the CmdQueue.
374
375 * Updated BackupPC_sendEmail to correctly parse the locked file
376   error from 2.2.1a smbclient, so that missing Outlook file emails
377   can be correctly sent.
378
379 * Changed HostInfoRead() in lib/BackupPC/Lib.pm to lowercase the
380   hostname read from the hosts file.
381
382 * BackupPC_Admin provides general summary when the host name is empty.
383
384 * configure.pl (and BackupPC) now requires perl 5.6.0 or later.
385
386 * configure.pl complains if BackupPC is already running, reminding you
387   to stop it before upgrading.
388
389 * updated documentation, and fixed auto-insertion of config.pl into
390   BackupPC.pod (previously the last config parameter was left out of
391   BackupPC.pod).
392
393 #------------------------------------------------------------------------
394 # Version 1.01, 30 Sep 2001
395 #------------------------------------------------------------------------
396
397 * Documentation cleanup in README, doc/BackupPC.pod, conf/config.pl.
398
399 * BackupPC_sendMail now reads the optional per-PC config file, allowing
400   email configuration parameters to be set on a per-PC basis.
401
402 * Removed the unused 4096-length MD5 digest code in lib/BackupPC/Lib.pm.
403
404 #------------------------------------------------------------------------
405 # Version 1.00, 21 Sep 2001
406 #------------------------------------------------------------------------
407
408 * Initial release of BackupPC on sourceforge.net.