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