Backup-Manager-0.7.10.1/0000755000175000017500000000000011503702461014046 5ustar alexisalexisBackup-Manager-0.7.10.1/COPYING0000644000175000017500000004313111503702461015103 0ustar alexisalexis GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. Backup-Manager-0.7.10.1/BackupManager/0000755000175000017500000000000011503702461016546 5ustar alexisalexisBackup-Manager-0.7.10.1/BackupManager/Config.pm0000644000175000017500000000147011503702461020313 0ustar alexisalexis#!/usr/bin/perl package BackupManager::Config; =head1 NAME BackupManager::Config - BackupManager's configuration module =head1 DESCRIPTION Basically, it's a Getopt wrapper and a conffile reader. =cut use strict; use warnings; =head1 FUNCTIONS =head2 getopt() Comes from debconf, thanks joeyh ;) first arg : $usage (text to be written on STDERR if help is needed). @_ : GetOpt args. =cut our $usage; sub getopt ($@) { my ($_usage, @args) = (@_); $usage = $_usage; my $showusage=sub { # closure print STDERR $_usage."\n"; exit 1; }; # don't load big Getopt::Long unless really necessary. return unless grep { $_ =~ /^-/ } @ARGV; require Getopt::Long; Getopt::Long::GetOptions( 'help|h', $showusage, @args, ) || $showusage->(); } =head1 AUTHOR Alexis Sukrieh =cut 1; Backup-Manager-0.7.10.1/BackupManager/Dialog.pm0000644000175000017500000000223311503702461020303 0ustar alexisalexispackage BackupManager::Dialog; use strict; use warnings; use vars qw(@ISA @EXPORT); @ISA = ('Exporter'); @EXPORT = qw(init_dialog print_info print_warning print_error); use BackupManager::Logger; my $dialog_verbose = 0; sub should_log($) { my ($level) = @_; my $level_score = { debug => 0, info => 1, warning => 2, error => 3, }; my $conf_level = $ENV{BM_LOGGER_LEVEL} || 'warning'; return $level_score->{$level} >= $level_score->{$conf_level}; } sub init_dialog($) { my ($verbose) = @_; $dialog_verbose = $verbose if defined $verbose; } sub print_info { my ($message) = @_; $message = "" unless defined $message; chomp $message; info ($message) if should_log 'info'; print STDOUT $message."\n" if $dialog_verbose; } sub print_warning { my ($message) = @_; $message = "" unless defined $message; chomp $message; warning ($message) if should_log 'warning'; print STDERR $message."\n" if $dialog_verbose; } sub print_error { my ($message) = @_; $message = "" unless defined $message; chomp $message; error ($message) if should_log 'error'; print STDERR $message."\n"; } 1; Backup-Manager-0.7.10.1/BackupManager/Logger.pm0000644000175000017500000000625711503702461020335 0ustar alexisalexis#!/usr/bin/perl package BackupManager::Logger; =head1 NAME BackupManager::Logger - BackupManager's Logger engine. =head1 DESCRIPTION It's a nice to use wrapper on the top of syslog. Will provide one function per syslog level. =head2 FUNCTIONS debug, info, notice, warning, error, critic and alert behave the same : take a string and log it with the appropriate level. =cut use Exporter ; @ISA = ( 'Exporter' ) ; @EXPORT = qw ( &debug &info ¬ice &warning &error &critic &alert ); use strict; use warnings; use Sys::Syslog qw(:DEFAULT setlogsock); sub basename($); use constant DEFAULT_FACILITY => 'cron'; our $LOG_IS_ENABLED; our $basename; my $LOG_FLAGS = { debug => 1, info => 1, notice => 1, warning => 1, err => 1, crit => 1, alert => 1 }; my $g_prefix = ""; my %g_rh_label = ( info => 'info ', notice => 'note ', err => 'error', warning => 'warn ', debug => 'debug', crit => 'crit ', alert => 'alert' ); my $facility; BEGIN { $basename = $0; $basename =~ s%^.*/%%; $facility=DEFAULT_FACILITY unless $facility=$ENV{BM_LOGGER_FACILITY}; setlogsock('unix'); openlog($basename, 'pid', $facility); } END { closelog(); } sub debug($) { my ($message) = @_; return 0 unless defined $message and length $message; return log_with_syslog('debug', $message); } sub info($) { my ($message) = @_; return 0 unless defined $message and length $message; return log_with_syslog('info', $message); } sub notice($) { my ($message) = @_; return 0 unless defined $message and length $message; return log_with_syslog('notice', $message); } sub warning($) { my ($message) = @_; return 0 unless defined $message and length $message; return log_with_syslog('warning', $message); } sub error ($) { my ($message) = @_; return 0 unless defined $message and length $message; return log_with_syslog('err', $message); } sub critic ($) { my ($message) = @_; return 0 unless defined $message and length $message; return log_with_syslog('crit', $message); } sub alert ($) { my ($message) = @_; return 0 unless defined $message and length $message; return log_with_syslog('alert', $message); } sub basename($) { my $full_path = shift; return undef unless defined $full_path; chomp($full_path); $full_path =~ s/\/*$//; my @words = split(/\//, $full_path); return $words[$#words]; } sub log_with_syslog ($$) { my ($level, $message) = @_; return 0 unless defined $level and defined $message; my $caller = 2; my ($package, $filename, $line, $fonction) = caller ($caller); $package = "" unless defined $package; $filename = "" unless defined $filename; $line = 0 unless defined $line; $fonction = $basename unless defined $fonction; $level = lc($level); $level = 'info' unless defined $level and length $level; return 0 unless $LOG_FLAGS->{$level}; unless (defined $message and length $message) { $message = "[void]"; } my $level_str = $g_rh_label{$level}; $message = $level_str . " * $message"; $message .= " - $fonction ($filename l. $line)" if $line; $message =~ s/%/%%/g; $message = $g_prefix . " > " . $message if (length $g_prefix); return syslog($level, $message); } =head1 AUTHOR Alexis Sukrieh =cut 1; Backup-Manager-0.7.10.1/NEWS0000644000175000017500000003003711503702461014550 0ustar alexisalexis0.7.6 - Security Fix - Don't pass MySQL password in the commandline, use ~/.my.cnf instead (bug #146). - New features - Support for the --debug flag for outputting lots of information (bug #124). - Documentation of the local GPG encryption feature (bug #132). - Bug Fixes - No limitation to the number of files located in $BM_REPOSITORY_ROOT (bug #110). - better handling of dar masters, don't fail if an archive is missing (bug #127). - Fixed a typo in the default configuration file (bug #133). - SQL dumps are encrypted as well if BM_ENCRYPTION_METHOD is set to gpg (bug #135). - Don't fail if a file changed during the archive generation (bug #152). - The purging phase handle only archives that are prefixed with $BM_ARCHIVE_PREFIX (bug #153) - Changes - The post-command is now always exectued, event if an error occured before (bug #118). - Don't stop the pipe commands if one of them fails (bug #141). 0.7.5 - New features - Support for lzma archives. - Support for encryption of local archives with GPG. - Support for FTP over SSL transfers (FTP upload method). - Possible to burn non-Joliet disc image. - Possible to choose if the purging should be recursive or not. - Bug Fixes - Fix for the md5 checking phase (was broken). - Possible to burn DVD+R(W) within CRON environment. - $BM_LOGGER_FACILITY is not ignored anymore. - RSYNC uploads work smoothly again. - Fix for the purging phase, no more annoying error messages. - Changes - SCP uploads are not performed with the $BM_UPLOAD_SSH_USER identity. - backup-manager can be run by an unprivileged user. - Paths of external programs are autodetected (no more static paths). - The purging phase is not recursive by default. 0.7.4 - New feature(s) - Possible to purge remote archives through SSH (new configuration variables: BM_UPLOAD_SSH_PURGE, BM_UPLOAD_SSH_TTL). - Bug fixes - Handle smartly pipe commands, don't think a command failed if not (closes: #83). - Can handle several targets in BM_TARBALL_TARGETS[] even if one the targets contains a space. - Support for expandable targets in BM_TARBALL_TARGETS[] (eg: you can put /home/* and you'll get what you expect to). - Default configuation file set BM_TARBALL_OVER_SSH to "false" instead of "true". - Doesn't trigger an error when BM_TARBALL_DIRECTORIES is not set anymore. - BM_TARBALL_DIRECTORIES is not deprecated anymore, possible to use it as well as BM_TARBALL_TARGETS[] the user can choose what he wants. 0.7.3 - New Features: - New upload method: ssh-gpg (upload backups encrypted on-the-fly with GPG). Thanks to Jan Metzger for his work. - New upload method: Support for the Amazon S3 Web Service. Thanks to Brad Dixon for his work. - New option for the tarball generation: possible to build archives over SSH (thanks to the new variable BM_TARBALL_OVER_SSH). - Possible to choose which permissions to set on the repository/archives when using the secure mode. - New configuration variable "BM_UPLOAD_TTL" so remote archives can live longer than local ones. - Bug Fixes: - Possible to enable FTP passive uploads for boxes behind a firewall. - The .md5 files are not left on remote servers anymore during the FTP purging phase. - Bugfix in the duplicates purging system. - The burning system can now safely burn archives in non-interactive mode. - Support for targets to backup with spaces in their names. - Changes: - The variable BM_TARBALL_DIRECTORIES is deprecated, it's replaced by the array BM_TARBALL_TARGETS[]; so paths with spaces can be safely handled. - Full backups are now named differently than incremental ones: the suffix "master" is appended to them. - During the purging phase, masters aren't purged unless a newer master is present. 0.7.2 * New Features: + It's now possible to use the burning system interactively in order to burn the whole repository into several media. [Michel Grentzinger, Alexis Sukrieh] + New option for the "--burn" switch, possible to give a specific date for burning only data of that day (eg: `--burn 20060310'). [Michel Grentzinger, Alexis Sukrieh] + New kind of DVD media: "DVD-RW". This kind of medium implies blanking the medium before burning data whereas the "DVD" kind doesn't. [Alexis Sukrieh] * Bug Fixes: + Incremental backup with dar now works correctly. + MD5 hashes are updated in the .md5 file when rebuilding an existing archive. + Stop removing files located in $BM_REPOSITORY_ROOT that aren't archives. + This release closes a total of 16 known bugs since the last release. [The Devel Team] * Changes: + Added support for the ServerAliveInterval ssh option. This helps when the "building file list" step of rsync takes a long time (high I/O load for example), and the connection is closed because of non-activity. [ Reched Ben Mustapha ] 0.7.1 * New Features: + Full "dar" archives support. + New variable `BM_MYSQL_SAFEDUMPS' for making safe MySQL dumps (locking tables). * Changes: + Better support of DVD-RW media, bugfix of the DVD burning method. 2005-12-31 (0.6.1) Alexis Sukrieh * Bug fix Several backup methods can be used safely in the same configuration file, the incremental method will then work as expected (Bug #14 closed). 2005-12-19 (0.6) Alexis Sukrieh * New Features: + New backup method "tarball-incremental" for building incremental backups. + New upload metyhod "rsync". + Support for multiple backup methods in BM_ARCHIVE_METHOD + Support for multiple upload methods in BM_UPLOAD_METHOD + User Guide available in different formats (HTML, PDF) * Changes: + Booleans must be true/false values, yes/no are deprecated (triggers warnings but backward compatible though). + Configuration key "BM_BURNING" is deprecated, use "BM_BURNING_METHOD" instead. * Bugs closed by this release: + No error when the repository is not accessible by BM_UPLOAD_USER (bug #2) + [BM_TARBALL_BLACKLIST] error handling multiple directories (bug #4) + feature request: use of ports other than 22 for scp upload (bug #5) + Backup-Manager can't umount an unmounted CD (bug #6) + Write the user guide (bug #8) + Support for multiple methods in BM_ARCHIVE_METHOD (bug #9) + Function backup_method_rsync() uses BM_TARBALL confkeys (bug #10) + Configuration keys BM_UPLOAD_USER/KEY/PASSWORD should be renamed (bug #11) * Translations: + Full translation in French. + Full translation in German. + Full translation in Spanish. + Full translation in Vietnamese. 2005-11-07 (0.5.9b) Alexis Sukrieh * New Features: + New method "svn", SubVersioNs repositories can be archived safely with svnadmin. + New method "pipe", Generic method for making archive with an external command, athe content sent to stdout will be used. + DVD burning support is available. You can choose to burn your archive repository on a DVD media, growisofs is used for this purpose. * Changes: + Added a switch in the command line for the version number "--version". + Some more comments in the configuration file. + No default backup method anymore, trigger an error if unknown method given. + AUTHORS: fixed the name of "jimmy". + Makefile: man pages are generated and isntalled in the good section. + backup-manager.conf.tpl: Several typos. * Bugs closed: + md5 files now have two spaces between the hash and the file name so the file is now usable with md5sum --check. (closes: #3) + The backup switch now call backup_method_pipe() if needed. + "tarball" method is not the default one anymore, must be called explicitly. * Translations: + po/fr.po: New version of the French translations. 0.5.9 Alexis Sukrieh * Configuration keys have been drastically renamed. * Added a contrib script for upgrading the configuration files to the new format: upgrade-conffile.sh * Upgraded the validation process, so deprecated variables trigger warnings and are used as default values for the right name. * Better control of the tar commands, when an error occured, user is warned, and a temp logfile is given. * Huge code cleanup for providing a modular implementation for several archive methods. * New archive method : mysql + uses mysqldump on a list of given databases. + facility to choose a compression format for the resulting SQL file. * TODO backup method rsync * TODO backup method pipe 0.5.8b Alexis Sukrieh * Configuration keys have been drastically renamed. * Security fixes + When burning a CDR, mktemp is used to prevent attacks on the file system. + It is possible to make the archive repository readable/writable by a given user/group pair. * Features + The configuration file is now validated before running. Warnings are triggered if configuration keys are not set. * Bug fixes + If the filetype "tar.bz2" is chosen, /usr/bin/bzip2 is mandatory. + The pre-command is run before the creation of the archive repository. + No trailing spaces are lost anymore when printing messages. * New configuration keys: + BM_PURGE_DUPLICATES tells if duplicates should be replaced by symlinks (default is yes). + BM_REPOSITORY_SECURE tells if the archive repository and the archive should be readable/writable by a given user:group (default is yes). + If BM_REPOSITORY_SECURE is activated, BM_USER and BM_GROUP should be filled (default is root:root). + BM_BURNING_CHKMD5 tells if the MD5 checksums should be checked when a CDR is burnt (default is yes). + BM_BURNING_DEVFORCED tells backup manager to force a device whenever a cdrecord command is performed, and then bypass the default cdrecord device (default is disabled). 0.5.8a Alexis Sukrieh * bug fix in the logger, the output is now clean. * bug fix when making tarballs: we don't warn about an already existing file if not true. * New library for holding backup methods. * first implementation of the rsync backup method (experiemntal). 0.5.8 Alexis Sukrieh * Fixed a bug when calculating total disk usage of a specified path when the locale is not en_EN or fr_FR. * Added the possibility to log everything to syslog. A new configuration key is provided : BM_LOGGER for setting this new feature on or off (default is on). Note that the user can choose which syslog facility he wants (default is user). * Added the facility to set BM_USER and BM_GROUP for providing a way to chmod and chown the repository and the archives. (closes a security issue) * When creating archives, backup-manager now replaces any duplicate it founds with symlink to the most recent archive for saving disk space. * Added BM_FTP_PURGE configuration key for removing files on ftp transfer before uploading files. 0.5.7 Alexis Sukrieh * Removed the file TODO * Added a COPYING file with the content of the GPL V2. * Renamed backup-manager.conf.tpl backup-manager.conf. * Better handling of pre and post commands. * Added a file CHANGELOG. Backup-Manager-0.7.10.1/lib/0000755000175000017500000000000011503702461014614 5ustar alexisalexisBackup-Manager-0.7.10.1/lib/logger.sh0000644000175000017500000001024011503702461016424 0ustar alexisalexis# Copyright © 2005-2010 Alexis Sukrieh # # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # This is the logger library # It can print stuff on STDIN, STDERR and send messages # to syslog. function check_logger() { if [[ -x /usr/bin/logger ]]; then logger=/usr/bin/logger else BM_LOGGER="false" fi } ######################################### # The syslog() function should be called # for sending messages to syslog. # # Note that no messages will be sent to # syslog if BM_LOGGER is set to "false". # # ex: # syslog "info" "message to log" # ######################################### function syslog() { if [[ "$BM_LOGGER" = "true" ]]; then level="$1" message="$2" $logger -t "backup-manager[$$]" -p "${BM_LOGGER_FACILITY}.${level}" -- "$level * $message" fi } # The meta function to log something to syslog, and # eventually print it to the appropriate STDOUT # # $@ should be the same args as for a echo stanza. # # $bm_log_level should be "info", "warning" or "error". function log() { # set the default log level if none given if [[ -z "$bm_log_level" ]]; then bm_log_level="info" fi # choose the good switch to read if needed case "$bm_log_level" in "debug") bm_log_switch=$verbosedebug ;; "info") bm_log_switch=$verbose ;; "warning") bm_log_switch=$warnings ;; # in the default case, we print stuff *) bm_log_switch="true" ;; esac log_buffer="" # if there's the -n switch, we buffer the message if [[ "$1" = "-n" ]]; then # output the message to STDOUT message=$(echo_translated "$@") if [[ "$bm_log_switch" = "true" ]]; then echo -n "${message}" fi BM_LOG_BUFFER="${log_buffer}${message}" else # output the message to STDOUT message=$(echo_translated "$@") if [[ "$bm_log_switch" == "true" ]]; then if [[ "$bm_log_level" == "debug" ]]; then echo "${message}" >&2 else echo "${message}" fi bm_dbus_send_log_message "${bm_log_level}" "${message}" fi # log the message to syslog syslog $bm_log_level "${log_buffer}${message}" # we have now to flush the buffer BM_LOG_BUFFER="" fi } # That function is deprecated, soon we'll remove it. function __debug() { message="$1" echo "DEPRECATED DEBUG: $message" >&2 } function debug() { if [[ "$BM_LOGGER_LEVEL" == "debug" ]]; then bm_log_level="debug" log "DEBUG: $@" fi } function info() { if [[ "$BM_LOGGER_LEVEL" == "debug" ]]\ || [[ "$BM_LOGGER_LEVEL" == "info" ]]; then bm_log_level="info" log "$@" fi } function warning() { if [[ "$BM_LOGGER_LEVEL" == "debug" ]]\ || [[ "$BM_LOGGER_LEVEL" == "info" ]]\ || [[ "$BM_LOGGER_LEVEL" == "warning" ]]; then bm_log_level="warning" log "$@" fi } # Errors are always sent to syslog function error() { bm_log_level="error" log "$@" _exit 1 } # that's the way backup-manager should exit. # need to remove the lock before, clean the mountpoint and # remove the logfile function _exit() { exit_code="$1" exit_context="$2" exit_reason="$3" if [[ "$exit_context" != "POST_COMMAND" ]]; then exec_post_command || error "Unable to exec post-command." fi umask $BM_UMASK >/dev/null info "Releasing lock" release_lock bm_dbus_send_progress 100 "Finished" bm_dbus_send_event "shutdown" "$@" if [[ -n "$exit_reason" ]]; then info "Exit reason: \$exit_reason" fi exit $exit_code } Backup-Manager-0.7.10.1/lib/files.sh0000644000175000017500000003077111503702461016262 0ustar alexisalexis# Copyright © 2005-2010 Alexis Sukrieh # # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # All functions dedicated to manage the files. #unmount_tmp_dir() #{ # if [[ -n "$mount_point" ]] && # [[ -d $mount_point ]] && # [[ grep $mount_point /etc/mtab >/dev/null 2>&1 ]]; then # umount "$mount_point" > /dev/null 2>&1 || error "unable to unmount \$mount_point" # sleep 1 # rmdir "$mount_point" > /dev/null 2>&1 || error "unable to remove \$mount_point" # fi #} # detect if find supports -H find_opt="" if find -H /tmp > /dev/null 2>&1 ; then find_opt="-H" fi # this will send the appropriate name of archive to # make according to what the user choose in the conf. function get_dir_name() { base="$1" format="$2" debug "get_dir_name ($base, $format)" if [[ "$format" = "long" ]] then # first remove the trailing slash base=${base%/} # every space by a _ dirname=$(echo "$base" | sed 's/ /_/g') # every / by a - dirname=$(echo "$dirname" | sed 's/\//-/g') elif [[ "$format" = "short" ]] then OLDIFS=$IFS export IFS="/" for directory in $base do parent=$directory done dirname=-$directory export IFS=$OLDIFS else echo "" fi echo "$dirname" } # This will take a path and return the size in mega bytes # used on the disk. # Thanks to Michel Grentzinger function size_of_path() { path="$1" debug "size_of_path ($path)" if [[ -z "$path" ]]; then error "No path given." fi #echo "DEBUG: du --si --block-size=1000k -c $path | tail -n 1 | awk '{print $1}'" >&2 total_size=$(du --si --block-size=1000k -c $path | tail -n 1 | awk '{print $1}') echo $total_size } # Thanks to Michel Grentzinger function size_left_of_path() { path="$1" debug "size_left_of_path ($path)" if [[ -z "$path" ]]; then error "No path given." fi left=$(df --si --block-size=1000k "$path" | tail -n 1 | awk '{print $4}') echo $left } # Will return the prefix contained in the file name function get_prefix_from_file() { filename="$1" debug "get_prefix_from_file ($filename)" filename=$(basename $filename) prefix=$(echo $filename | sed -e 's/^\([^-]\+\)-.*$/\1/') echo $prefix } # Will return the date contained in the file name function get_date_from_file() { debug "get_date_from_file ($1)" get_date_from_archive "$1" } # This function is here to free each lock previously enabled. # We have to keep in mind that lock must be done for each conffile. # It is not global anymore, and that's the tricky thing. function release_lock() { debug "release_lock()" if [[ -e $lockfile ]]; then # We have to remove the line which contains # the conffile. newfile=$(mktemp ${BM_TEMP_DIR}/lock.XXXXXX) newcontent="" OLDIFS=$IFS IFS=$'\n' for line in $(cat $lockfile) do thisfile=$(echo $line | awk '{print $2}') if [[ ! $conffile = $thisfile ]]; then echo "$line" >> $newfile fi done IFS=$OLDIFS mv $newfile $lockfile fi } # This function try to get a lock, if this is not possible, # backup-manager won't run. # Be aware that a there will be one lock for each conffile used. # If the PID written in the lockfile is not alive, release. function get_lock() { debug "get_lock()" if [[ -e $lockfile ]]; then # look if a lock exists for that conffile (eg, we must find # the path of the conffile in the lockfile) # lockfile format : # $pid $conffile pid=`grep " $conffile " $lockfile | awk '{print $1}'` # be sure that the process is running if [[ ! -z $pid ]]; then real_pid=$(ps --no-headers --pid $pid |awk '{print $1}') if [[ -z $real_pid ]]; then echo_translated "Removing lock for old PID, \$pid is not running." release_lock #unmount_tmp_dir pid="" fi fi if [[ -n "$pid" ]]; then # we really must not use error or _exit here ! # this is the special point were release_lock should not be called ! echo_translated "A backup-manager process (\$pid) is already running with the conffile \$conffile" exit 1 else pid=$$ info "Getting lock for backup-manager \$pid with \$conffile" echo "$$ $conffile " >> $lockfile fi else pid=$$ info "Getting lock for backup-manager \$pid with \$conffile" echo "$$ $conffile " > $lockfile if [[ ! -e $lockfile ]]; then error "failed (check the file permissions)." exit 1 fi fi } function get_date_from_archive() { file="$1" debug "get_date_from_archive ($file)" date=$(echo $file | sed -e 's/.*\(20[0-9][0-9][0-9][0-9][0-3][0-9]\).*/\1/') echo "$date" } # Returns the name of an archive. # eg: get_name_from_archive "ouranos-usr-bin.20060329.tar.bz2" # usr-bin function get_name_from_archive() { archive="$1" debug "get_name_from_archive ($archive)" archive=$(basename "$archive") # drop the first token before a dash (the prefix) name="${archive#*-}" # drop the right part: everything from the first dot name="${name%%.*}" # done echo "$name" } function get_master_from_archive() { archive="$1" debug "get_master_from_archive ($archive)" archive=$(basename "$archive") master=$(echo "$archive" | sed -e 's/.*\.\(master\)\..*/\1/') if [[ "$master" = "master" ]]; then echo "true" else echo "false" fi } function get_prefix_from_archive() { archive="$1" archive=$(basename "$archive") echo "${archive%%-*}" } function get_newer_master() { prefix="$1" name="$2" date="$3" debug "get_newer_master ($prefix, $name, $date)" master="" for this_master in $BM_REPOSITORY_ROOT/$prefix-$name.*.master.* do this_date=$(get_date_from_archive "$this_master") # is this master newer than the one we are testing? if [[ "$this_date" -gt "$date" ]]; then debug "found this newer master : $this_master" master="$this_master" fi done echo "$this_master" } function clean_file() { file="$1" purge_date="$2" debug "clean_file ($file, $purge_date)" if [[ ! -f "$file" ]]; then error "\$file is not a regular file." fi prefix=$(get_prefix_from_archive "$file") date=$(get_date_from_archive "$file") name=$(get_name_from_archive "$file") master=$(get_master_from_archive "$file") debug "parsing $file ($prefix, $date, $name, $master)" # we assume that if we find that, we have an archive if [[ -n "$date" ]] && [[ "$date" != "$(basename $file)" ]] && [[ -n "$prefix" ]] && [[ "$prefix" != "$(basename $file)" ]] && [[ -n "$name" ]] && [[ "$name" != "$(basename $file)" ]]; then # look if the archive is obsolete if [[ "$date" -lt "$purge_date" ]] || [[ "$date" = "$purge_date" ]]; then # if it's a master, we have to find a newer master around if [[ "$master" = "true" ]]; then master_archive=$(get_newer_master "$prefix" "$name" "$date") # if the master returned is not the same as the one we have, # the one we have can be deleted, because it's older. if [[ "$master_archive" != "$file" ]]; then info "Removing obsolete master backup: \"\$file\"." rm -f "$file" # else, we can only remove the master archive if we cannot find any # incremental archive related. else nb_incrementals=$(ls -l $BM_REPOSITORY_ROOT/$prefix-$name.*.* | wc -l) if [[ "$nb_incrementals" = "1" ]]; then info "Removing obsolete master backup (isolated): \"\$file\"." rm -f $file fi fi # the archive we handle isn't a master backup, we can drop it. else info "Removing archive \"\$file\"." rm -f "$file" fi fi fi } # clean one given repository. # This will take each file that has # a date in its names and will compare # the file's date to the date_to_remove. # If the file's date is older than the date_to_remove # we drop the file. function clean_directory() { directory="$1" debug "clean_directory ($directory)" purge_date=$(date +%Y%m%d --date "$BM_ARCHIVE_TTL days ago") if [[ ! -d $directory ]]; then error "Directory given was not found." fi if [[ "$BM_REPOSITORY_RECURSIVEPURGE" = "true" ]]; then maxdepth="" else maxdepth="-maxdepth 1" fi # First list all the files to process # and ask backup-manager-purge what to remove list=$(mktemp ${BM_TEMP_DIR}/bm-list.XXXXXX) # files & symlinks find $find_opt "$directory" $maxdepth \ \( -type f -o -type l \) -print \ | $bmp --ttl=$BM_ARCHIVE_TTL > $list # Then actually remove the files for archive in `cat $list` do info "Removing archive \"\$archive\"." rm -f $archive done rm -f $list } # This takes a file and the md5sum of that file. # It will look at every archives of the same source # and will replace duplicates (same size) by symlinks. # CONDITION: BM_ARCHIVE_PURGEDUPS = true function purge_duplicate_archives() { file_to_create="$1" debug "purge_duplicate_archives ($file_to_create)" md5hash=$(get_md5sum $file_to_create) # Only purge if BM_ARCHIVE_PURGEDUPS = true if [[ -z "$BM_ARCHIVE_PURGEDUPS" ]] || [[ "$BM_ARCHIVE_PURGEDUPS" != "true" ]]; then return 0 fi if [[ ! -e $file_to_create ]]; then error "The given file does not exist: \$file_to_create" return 1 fi if [[ -z "$file_to_create" ]]; then error "No file given." fi # we'll parse all the files of the same source date_of_file=$(get_date_from_file $file_to_create) || error "Unable to get date from file." if [[ -z "$date_of_file" ]]; then error "Unable to get date from file." fi file_pattern=$(echo $file_to_create | sed -e "s/$date_of_file/\*/") || error "Unable to find the pattern of the file." # loop on each archive occurences (eg: archivename-*-filetype) for file in $file_pattern do # handle only regular files if [[ ! -L $file ]] && [[ "$file" != "$file_to_create" ]]; then # get the date of the file we parse date_of_file=$(get_date_from_file $file) || error "Unable to get date from file." # get the md5 hash of the file we parse, in its .md5 file md5file="$BM_REPOSITORY_ROOT/${BM_ARCHIVE_PREFIX}-${date_of_file}.md5" md5sum_to_check="$(get_md5sum_from_file $file $md5file)" if [[ -z "$md5sum_to_check" ]]; then warning "Unable to find the md5 hash of file \"\$file\" in file \"\$md5file\"." continue fi # if the md5 hashes are the same, purge the duplicate if [[ "$md5hash" = "$md5sum_to_check" ]]; then info "\$file is a duplicate of \$file_to_create (using symlink)." rm -f $file ln -s $file_to_create $file fi fi done } function assert_file_exists() { file="$1" if [[ ! -r "$file" ]]; then warning "File '\$file' does not exist or is not readable." return 1 fi } function assert_file_is_executable() { file="$1" if [[ ! -x "$file" ]]; then warning "File '\$file' is not executable" return 1 fi } Backup-Manager-0.7.10.1/lib/actions.sh0000644000175000017500000001357611503702461016624 0ustar alexisalexis# Copyright © 2005-2010 Alexis Sukrieh # # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # Main wrapper # # Loop on the backup methods function make_archives() { debug "make_archives()" for method in $BM_ARCHIVE_METHOD do case $method in mysql) backup_method_mysql "$method" ;; pgsql) backup_method_pgsql "$method" ;; tarball|tarball-incremental) backup_method_tarball "$method" ;; pipe) backup_method_pipe "$method" ;; svn) backup_method_svn "$method" ;; none|disabled) info "No backup method used." ;; *) error "No such backup method: \$BM_ARCHIVE_METHOD" ;; esac # Now make sure the md5 file is okay. md5file="$BM_REPOSITORY_ROOT/${BM_ARCHIVE_PREFIX}-${TODAY}.md5" if [[ -e $md5file ]] && [[ "$BM_REPOSITORY_SECURE" = "true" ]]; then chown $BM_REPOSITORY_USER:$BM_REPOSITORY_GROUP $md5file || warning "Unable to change the owner of \"\$md5file\"." chmod $BM_ARCHIVE_CHMOD $md5file || warning "Unable to change file permissions of \"\$md5file\"." fi done } # Loop on the upload methods function upload_files () { debug "upload_files()" for method in $BM_UPLOAD_METHOD do case $method in ftp|FTP) bm_upload_ftp ;; ssh|SSH|scp|SCP) bm_upload_ssh ;; ssh-gpg|SSH-GPG) bm_upload_ssh_gpg ;; rsync|RSYNC) bm_upload_rsync ;; rsync-snapshots|RSYNC-SNAPSHOTS) bm_upload_rsync_snapshots ;; s3|S3) bm_upload_s3 ;; none|disabled) info "No upload method used." ;; *) warning "The upload method \"\$method\" is not supported; skipping." ;; esac done } # This will parse all the files contained in BM_REPOSITORY_ROOT # and will clean them up. Using clean_directory() and clean_file(). function clean_repositories() { debug "clean_repositories" info "Cleaning \$BM_REPOSITORY_ROOT" clean_directory $BM_REPOSITORY_ROOT } # This will run the pre-command given. # If this command prints on STDOUT "false", # backup-manager will stop here. function exec_pre_command() { debug "exec_pre_command()" if [[ ! -z "$BM_PRE_BACKUP_COMMAND" ]]; then info "Running pre-command: \$BM_PRE_BACKUP_COMMAND." RET=`$BM_PRE_BACKUP_COMMAND >/dev/null 2>&1` || RET="false" case "$RET" in "false") warning "Pre-command failed. Stopping the process." _exit 15 "PRE_COMMAND" ;; *) info "Pre-command returned: \"\$RET\" (success)." ;; esac fi } function exec_post_command() { debug "exec_post_command()" if [[ ! -z "$BM_POST_BACKUP_COMMAND" ]]; then info "Running post-command: \$BM_POST_BACKUP_COMMAND" RET=`$BM_POST_BACKUP_COMMAND >/dev/null 2>&1` || RET="false" case "$RET" in "false") warning "Post-command failed." _exit 16 "POST_COMMAND" ;; *) info "Post-command returned: \"\$RET\" (success)." ;; esac fi } function bm_init_env () { debug "bm_init_env()" export TOOMUCH_TIME_AGO=`date +%d --date "$BM_ARCHIVE_TTL days ago"` if [[ -n "$HOME" ]]; then export BM__GPG_HOMEDIR="--homedir ${HOME}/.gnupg" else export BM__GPG_HOMEDIR="--homedir /root/.gnupg" fi check_logger } function bm_init_today() { debug "bm_init_today()" export TODAY=`date +%Y%m%d` } # be sure that zip is supported. function check_filetypes() { debug "check_filetypes()" case "$BM_TARBALL_FILETYPE" in "zip") if [[ ! -x "$zip" ]]; then error "The BM_TARBALL_FILETYPE conf key is set to \"zip\" but zip is not installed." fi ;; "tar.bz2" ) if [[ ! -x "$bzip" ]]; then error "The BM_TARBALL_FILETYPE conf key is set to \"tar.bz2\" but bzip2 is not installed." fi ;; "tar.lz" ) if [[ ! -x "$lzma" ]]; then error "The BM_TARBALL_FILETYPE conf key is set to \"tar.lz\" but lzma is not installed." fi ;; "dar" ) if [[ ! -x "$dar" ]]; then error "The BM_TARBALL_FILETYPE conf key is set to \"dar\" but dar is not installed." fi ;; esac } function create_directories() { debug "create_directories()" if [[ ! -d $BM_REPOSITORY_ROOT ]] then info "The repository \$BM_REPOSITORY_ROOT does not exist, creating it." mkdir -p $BM_REPOSITORY_ROOT fi # for security reason, the repository should not be world readable # only BM_REPOSITORY_USER:BM_REPOSITORY_GROUP can read/write it. if [[ "$BM_REPOSITORY_SECURE" = "true" ]]; then chown $BM_REPOSITORY_USER:$BM_REPOSITORY_GROUP $BM_REPOSITORY_ROOT chmod $BM_REPOSITORY_CHMOD $BM_REPOSITORY_ROOT fi } Backup-Manager-0.7.10.1/lib/gettext.sh0000644000175000017500000000163511503702461016641 0ustar alexisalexis# Copyright (C) 2010 The Backup Manager Authors # # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # This is a wrapper to the gettext API for shell scripts. # If /usr/bin/gettext.sh is not found, we'll # provide a dummy function. if [[ -z "$libdir" ]]; then libdir="/usr/share/backup-manager" fi libgettext="/usr/bin/gettext.sh" if [[ ! -f $libgettext ]]; then . $libdir/gettext-dummy.sh else . $libdir/gettext-real.sh fi Backup-Manager-0.7.10.1/lib/externals.sh0000644000175000017500000000175011503702461017160 0ustar alexisalexis# All external programs used must be initialized here zip=$(which zip 2> /dev/null) || true bzip=$(which bzip2 2> /dev/null) || true gzip=$(which gzip 2> /dev/null) || true gpg=$(which gpg 2> /dev/null) || true lzma=$(which lzma 2> /dev/null) || true dar=$(which dar 2> /dev/null) || true tar=$(which tar 2> /dev/null) || true rsync=$(which rsync 2> /dev/null) || true mkisofs=$(which mkisofs 2> /dev/null) || mkisofs=$(which genisoimage 2> /dev/null) || true growisofs=$(which growisofs 2> /dev/null) || true dvdrwformat=$(which dvd+rw-format 2> /dev/null) || true cdrecord=$(which cdrecord 2> /dev/null) || cdrecord=$(which wodim 2> /dev/null) || true md5sum=$(which md5sum 2> /dev/null) || true bc=$(which bc 2> /dev/null) || true mysqldump=$(which mysqldump 2> /dev/null) || true pgdump=$(which pg_dump 2>/dev/null) || true svnadmin=$(which svnadmin 2> /dev/null) || true logger=$(which logger 2> /dev/null) || true nice_bin=$(which nice 2> /dev/null) || true dd=$(which dd 2> /dev/null) || true Backup-Manager-0.7.10.1/lib/dialog.sh0000644000175000017500000000610311503702461016407 0ustar alexisalexis# Copyright © 2005-2010 Alexis Sukrieh # # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # # The backup-manager's dialog.sh library. # # This will handle every functions dedicated # to send feedback tothe user. # # print on STDOUT the usage function usage() { echo_translated "$0 [options]" echo "" echo_translated "Output:" echo -n "--help|-h : "; echo_translated "Print this short help message." echo -n "--version : "; echo_translated "Print version number." echo -n "--verbose|-v : "; echo_translated "Print what happens on STDOUT." echo -n "--debug|-d : "; echo_translated "Print debug messages on STDOUT." echo -n "--no-warnings : "; echo_translated "Disable warnings." echo "" echo_translated "Single actions:" echo -n "--upload|-u : "; echo_translated "Just upload the files of the day." echo -n "--burn|-b : "; echo_translated "Just burn the files of the day." echo -n "--md5check|-m : "; echo_translated "Just test the md5 sums." echo -n "--purge|-p : "; echo_translated "Just purge old archives." echo "" echo_translated "Behaviour:" echo -n "--conffile|-c file : "; echo_translated "Choose an alternate config file." echo -n "--force|-f : "; echo_translated "Force overwrite of existing archives." echo "" echo_translated "Unwanted actions:" echo -n "--no-upload : "; echo_translated "Disable the upload process." echo -n "--no-burn : "; echo_translated "Disable the burning process." echo -n "--no-purge : "; echo_translated "Disable the purge process." _exit 0 } # Prompt the user with a question, set $BM_RET to "true" if the user agreed, # to "false" if not. # PLEASE use translate() for giving a question to that function! function bm_prompt() { # this must be translated here, I cannot do it here! question="$1" if ! tty -s ; then error "Not in interactive mode, cannot continue." fi echo -n "$question "; echo "[y/N] " read ret if [[ "$ret" == "y" ]] || [[ "$ret" == "Y" ]]; then export BM_RET="true" else export BM_RET="false" fi } # Prints a message and wait for the user to press enter. function bm_pause() { message="$1" if ! tty -s ; then error "Not in interactive mode, cannot continue." fi echo -n "$message " read pause } function tail_logfile { logfile="$1" if [[ "$verbosedebug" == "true" ]]; then debug "Outping content of $logfile to stderr" tail -f $logfile & fi } Backup-Manager-0.7.10.1/lib/gettext-real.sh0000644000175000017500000000222111503702461017552 0ustar alexisalexis# Copyright (C) 2010 The Backup Manager Authors # # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # Real gettext library. # Initialize the gettext stuff . /usr/bin/gettext.sh TEXTDOMAIN=backup-manager export TEXTDOMAIN # This is the wrapper to the gettext function # We use eval_gettext in order to substitue every # variable prensent in the string. function translate() { eval_gettext "$1"; echo } # This can do an echo with -n or not, and after # having gettextized the string. function echo_translated() { if [[ "$1" = "-n" ]]; then message=$(translate "$2") echo -n "$message" else message=$(translate "$1") echo "$message" fi } Backup-Manager-0.7.10.1/lib/backup-methods.sh0000644000175000017500000010163611503702461020065 0ustar alexisalexis# Copyright (C) 2010 The Backup Manager Authors # # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # Every method to manage backup are here. # We should give here as more details we can # on the specific conffiles to use for the methods. # # This should be called whenever an archive is made, it will dump some # informations (size, md5sum) and will add the archive in .md5 file. function commit_archive() { file_to_create="$1" size=$(size_of_path $file_to_create) str=$(echo_translated "\$file_to_create: ok (\${size}M,") debug "commit_archive ($file_to_create)" # The archive is ok, we can drop the "pending" stuff debug "rm -f ${bm_pending_incremental_list}.orig" rm -f "${bm_pending_incremental_list}.orig" bm_pending_incremental_list="" bm_pending_archive="" base=$(basename $file_to_create) md5hash=$(get_md5sum $file_to_create) if [[ "$verbose" = "true" ]]; then echo "$str ${md5hash})" fi md5file="$BM_REPOSITORY_ROOT/${BM_ARCHIVE_PREFIX}-${TODAY}.md5" # Check if the md5file contains already the md5sum of the file_to_create. # In this case, the new md5sum overwrites the old one. if grep "$base" $md5file >/dev/null 2>&1 ; then previous_md5sum=$(get_md5sum_from_file $base $md5file) sed -e "/$base/s/$previous_md5sum/$md5hash/" -i $md5file else echo "$md5hash $base" >> $md5file fi # Now that the file is created, remove previous duplicates if exists... purge_duplicate_archives $file_to_create || error "Unable to purge duplicates of \$file_to_create" # ownership chown_archive "$file_to_create" } # security fixes if BM_REPOSITORY_SECURE is set to true function chown_archive { file="$1" if [[ "$BM_REPOSITORY_SECURE" = "true" ]]; then chown $BM_REPOSITORY_USER:$BM_REPOSITORY_GROUP $file || warning "Unable to change the owner of \"\$file\"." chmod $BM_ARCHIVE_CHMOD $file || warning "Unable to change file permissions of \"\$file\"." fi } # this is the callback wich is run when backup-manager # is stopped with a signal like SIGTERM or SIGKILL # We have to take care of the incomplete builds, in order to leave a repository with # only trustable archives and friends. function clean_exit() { echo "" warning "Warning, process interrupted." if [[ -n "$bm_pending_archive" ]] && [[ -e "$bm_pending_archive" ]]; then # remove the archive that is being built (it's incomplete) warning "Removing archive \"\$bm_pending_archive\" (build interrupted)." rm -f $bm_pending_archive # if we're building incremental stuff, restore the original incremental list file if [[ -n "$bm_pending_incremental_list" ]]; then if [[ -e "${bm_pending_incremental_list}.orig" ]]; then warning "Restoring incremental-building details list: \"\$bm_pending_incremental_list\"." rm -f $bm_pending_incremental_list mv "${bm_pending_incremental_list}.orig" $bm_pending_incremental_list else warning "Removing incremental-building details list: \"$bm_pending_incremental_list\"." rm -f $bm_pending_incremental_list fi fi fi release_lock bm_dbus_send_progress 100 "Finished" bm_dbus_send_event "shutdown" "70" exit 70 } function commit_archives() { file_to_create="$1" debug "commit_archives ($file_to_create)" if [[ "$BM_TARBALL_FILETYPE" = "dar" ]]; then for dar_file in $file_to_create.*.dar do commit_archive "$dar_file" done else commit_archive "$file_to_create" fi } function handle_tarball_error() { target="$1" logfile="$2" debug "handle_tarball_error ($target, $logfile)" warning "Unable to create \"\$target\", check \$logfile" nb_err=$(($nb_err + 1)) chown_archive "$target" } function __exec_meta_command() { nice="$nice_bin -n $BM_ARCHIVE_NICE_LEVEL" command="$nice $1" file_to_create="$2" compress="$3" debug "__exec_meta_command ($command, $file_to_create, $compress)" if [[ -f $file_to_create ]] && [[ $force != true ]] then warning "File \$file_to_create already exists, skipping." export BM_RET="" else logfile=$(mktemp ${BM_TEMP_DIR}/bm-command.XXXXXX) case "$compress" in "gzip"|"gz"|"bzip"|"bzip2") if [[ "$compress" = "gzip" ]] || [[ "$compress" = "gz" ]]; then compress_bin=$gzip if [[ -z "$compress_bin" ]]; then error "gzip is not installed but gzip compression needed." fi ext="gz" fi if [[ "$compress" = "bzip2" ]] || [[ "$compress" = "bzip" ]]; then compress_bin=$bzip if [[ -z "$compress_bin" ]]; then error "bzip2 is not installed but bzip2 compression needed." fi ext="bz2" fi if [[ -n "$compress_bin" ]] && [[ -x "$compress_bin" ]]; then debug "$command > $file_to_create 2> $logfile" tail_logfile "$logfile" if [[ "$BM_ENCRYPTION_METHOD" = "gpg" ]]; then $command 2>$logfile | $nice $compress_bin -f -q -9 2>$logfile | $nice $gpg $BM__GPG_HOMEDIR -r "$BM_ENCRYPTION_RECIPIENT" -e > $file_to_create.$ext.gpg 2> $logfile debug "$command | $nice $compress_bin -f -q -9 | $nice $gpg $BM__GPG_HOMEDIR -r \"$BM_ENCRYPTION_RECIPIENT\" -e > $file_to_create.$ext.gpg 2> $logfile" file_to_create="$file_to_create.$ext.gpg" else $command 2> $logfile | $nice $compress_bin -f -q -9 > $file_to_create.$ext 2> $logfile file_to_create="$file_to_create.$ext" fi if [[ $? -gt 0 ]]; then warning "Unable to exec \$command; check \$logfile" rm -f $file_to_create else rm -f $logfile fi else error "Compressor \$compress is needed." fi ;; ""|"uncompressed"|"none") if [[ "$verbosedebug" == "true" ]]; then tail -f $logfile & fi debug "$command 1> $file_to_create 2>$logfile" tail_logfile "$logfile" if [[ "$BM_ENCRYPTION_METHOD" = "gpg" ]]; then $command | $nice $gpg $BM__GPG_HOMEDIR -r "$BM_ENCRYPTION_RECIPIENT" -e > $file_to_create.gpg 2> $logfile file_to_create="$file_to_create.gpg" else $command 1> $file_to_create 2>$logfile fi if [[ $? -gt 0 ]]; then warning "Unable to exec \$command; check \$logfile" rm -f $file_to_create else rm -f $logfile fi ;; *) error "No such compressor supported: \$compress." ;; esac # make sure we didn't loose the archive if [[ ! -e $file_to_create ]]; then error "Unable to find \$file_to_create" fi export BM_RET="$file_to_create" fi } function __create_file_with_meta_command() { debug "__create_file_with_meta_command ()" __exec_meta_command "$command" "$file_to_create" "$compress" file_to_create="$BM_RET" if [[ -n "$BM_RET" ]]; then commit_archive "$file_to_create" fi chown_archive "$file_to_create" } # Thanks to Michel Grentzinger for his # smart ideas/remarks about that function. function __get_flags_relative_blacklist() { switch="$1" target="$2" debug "__get_flags_relative_blacklist ($switch, $target)" target=${target%/} blacklist="" for pattern in $BM_TARBALL_BLACKLIST do # absolute paths char=$(expr substr $pattern 1 1) if [[ "$char" = "/" ]]; then # we blacklist only absolute paths related to $target if [[ "${pattern#$target}" != "$pattern" ]]; then # making a relative path... pattern="${pattern#$target}" length=$(expr length $pattern) pattern=$(expr substr $pattern 2 $length) # ...and blacklisting it blacklist="$blacklist ${switch}${pattern}" fi # relative path are blindly appended to the blacklist else blacklist="$blacklist ${switch}${pattern}" fi done } function __get_flags_dar_blacklist() { target="$1" debug "__get_flags_dar_blacklist ($target)" __get_flags_relative_blacklist "-P" "$target" } function __get_flags_tar_blacklist() { target="$1" debug "__get_flags_tar_blacklist ($target)" __get_flags_relative_blacklist "--exclude=" "$target" } function __get_flags_zip_dump_symlinks() { debug "__get_flags_zip_dump_symlinks" export ZIP="" export ZIPOPT="" y="-y" if [[ "$BM_TARBALL_DUMPSYMLINKS" = "true" ]]; then y="" fi echo "$y" } function __get_flags_tar_dump_symlinks() { debug "__get_flags_tar_dump_symlinks" h="" if [[ "$BM_TARBALL_DUMPSYMLINKS" = "true" ]]; then h="-h " fi echo "$h" } function __get_file_to_create() { target="$1" debug "__get_file_to_create ($target)" dir_name=$(get_dir_name "$target" $BM_TARBALL_NAMEFORMAT) file_to_create="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX$dir_name.$TODAY${master}.$BM_TARBALL_FILETYPE" # dar appends itself the ".dar" extension if [[ "$BM_TARBALL_FILETYPE" = "dar" ]]; then file_to_create="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX$dir_name.$TODAY${master}" fi echo "$file_to_create" } function __get_file_to_create_remote() { target="$1" host="$2" debug "__get_file_to_create_remote ($target, $host)" dir_name=$(get_dir_name "$target" $BM_TARBALL_NAMEFORMAT) file_to_create="$BM_REPOSITORY_ROOT/${host}${dir_name}.$TODAY${master}.$BM_TARBALL_FILETYPE" echo "$file_to_create" } function __get_master_day() { debug "__get_master_day ()" if [[ -z "$BM_TARBALLINC_MASTERDATETYPE" ]]; then error "No frequency given, set BM_TARBALLINC_MASTERDATETYPE." fi case $BM_TARBALLINC_MASTERDATETYPE in weekly) master_day=$(date +'%w') ;; monthly) master_day=$(date +'%-d') ;; *) error "Unknown frequency: \$BM_TARBALLINC_MASTERDATETYPE" ;; esac } function __init_masterdatevalue() { debug "__init_masterdatevalue ()" if [[ -z "$BM_TARBALLINC_MASTERDATEVALUE" ]]; then BM_TARBALLINC_MASTERDATEVALUE="1" fi } function __get_flags_tar_incremental() { dir_name="$1" debug "__get_flags_tar_incremental ($dir_name)" incremental_list="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX$dir_name.incremental.bin" bm_pending_incremental_list="$incremental_list" if [[ -e "${incremental_list}" ]]; then debug "cp $incremental_list ${incremental_list}.orig" cp $incremental_list "${incremental_list}.orig" fi incremental="" __get_master_day __init_masterdatevalue # if master day, we have to purge the incremental list if exists # so we'll generate a new one (and then, a full backup). if [[ "$master_day" -eq "$BM_TARBALLINC_MASTERDATEVALUE" ]]; then info "Building master backup for target: \"\$dir_name\"." rm -f "$incremental_list" fi if [[ -e "$incremental_list" ]]; then master="" fi incremental="--listed-incremental $incremental_list" } # This will set the appropriate dar options for making incremental backups. function __get_flags_dar_incremental() { dir_name="$1" debug "__get_flags_dar_incremental ($dir_name)" incremental="" __get_master_day __init_masterdatevalue # looking for the youngest last DAR backup available for pastdays in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 do lastday=$(date +'%Y%m%d' --date "$pastdays days ago") lastday_dar="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX$dir_name.$lastday.dar" lastday_dar_first_slice="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX$dir_name.$lastday.1.dar" lastday_dar_master="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX$dir_name.$lastday.master.dar" lastday_dar_master_first_slice="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX$dir_name.$lastday.master.1.dar" if [[ -e $lastday_dar ]] || [[ -e $lastday_dar_first_slice ]] || [[ -e $lastday_dar_master ]] || [[ -e $lastday_dar_master_first_slice ]]; then # we have found a previous dar backup, this one will be used as a reference # if needed. break fi done # If we aren't the "full backup" day, we take the previous backup as # a reference for the incremental stuff. # We have to find the previous backup for that... if [[ "$master_day" != "$BM_TARBALLINC_MASTERDATEVALUE" ]] ; then # Either we have a master backup made lastday... if [[ -e $lastday_dar_master ]] || [[ -e $lastday_dar_master_first_slice ]] ; then incremental="--ref $BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX$dir_name.$lastday.master" # ... Or we have an incremental backup made lastday elif [[ -e $lastday_dar ]] || [[ -e $lastday_dar_first_slice ]] ; then incremental="--ref $BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX$dir_name.$lastday" fi # if we use some --ref then, it's not a master but an incremental backup. if [[ -n "$incremental" ]] ; then master="" fi fi } function __get_flags_dar_maxsize() { debug "__get_flags_dar_maxsize ()" if [[ -n "$BM_TARBALL_SLICESIZE" ]]; then maxsize="--alter=SI -s $BM_TARBALL_SLICESIZE" fi echo "$maxsize" } function __get_flags_dar_overwrite() { debug "__get_flags_dar_overwrite" if [[ $force = true ]] ; then overwrite="-w" fi echo "$overwrite" } # FIXME : incremental is not possible remotely # in the current shape... function __get_backup_tarball_remote_command() { debug "__get_backup_tarball_remote_command ()" oldgzip="$GZIP" export GZIP="-n" case $BM_TARBALL_FILETYPE in tar) __get_flags_tar_blacklist "$target" command="$tar $blacklist $dumpsymlinks $BM_TARBALL_EXTRA_OPTIONS -p -c "$target"" ;; tar.gz) __get_flags_tar_blacklist "$target" command="$tar $blacklist $dumpsymlinks $BM_TARBALL_EXTRA_OPTIONS -p -c -z "$target"" ;; tar.bz2|tar.bz) __get_flags_tar_blacklist "$target" command="$tar $blacklist $dumpsymlinks $BM_TARBALL_EXTRA_OPTIONS -p -c -j "$target"" ;; tar.lz) __get_flags_tar_blacklist "$target" command="$tar $blacklist $dumpsymlinks $BM_TARBALL_EXTRA_OPTIONS -p -c --lzma "$target"" ;; *) error "Remote tarball building is not possible with this archive filetype: \"$BM_TARBALL_FILETYPE\"." ;; esac export GZIP="$oldgzip" echo "$nice_bin -n $BM_ARCHIVE_NICE_LEVEL $command" } # This function will take care of changing the behaviour of BM # regarding the error code given # 0 is a success case (remove the logfile and commit the archive). # tar/1 is a warning case (file changed; don't remove the logfile but commit the archive). # dar/11 is a waring case (file changed; don't remove the logfile but commit the archive). # >1 is an error code (don't remove the logile, don't commit the archive). function check_error_code() { error_code="$1" file_to_create="$2" logfile="$3" if [[ -z "$error_code" ]]; then error_code=0 fi # Error checks can depend on the command/error code returned case "$BM__CURRENT_COMMAND" in "tar") if [[ "$error_code" == "1" ]]; then warning "Tar reported a file changed during archive creation." commit_archives "$file_to_create" elif [[ "$error_code" -gt 0 ]]; then handle_tarball_error "$file_to_create" "$logfile" else rm -f $logfile commit_archives "$file_to_create" fi ;; "dar") if [[ "$error_code" == "11" ]]; then warning "Dar reported a file changed during archive creation." commit_archives "$file_to_create" elif [[ "$error_code" -gt 0 ]]; then handle_tarball_error "$file_to_create" "$logfile" else rm -f $logfile commit_archives "$file_to_create" fi ;; *) if [[ "$error_code" -gt 0 ]]; then handle_tarball_error "$file_to_create" "$logfile" else rm -f $logfile commit_archives "$file_to_create" fi ;; esac # Reset the error code error_code=0 } function __get_backup_tarball_command() { debug "__get_backup_tarball_command ()" case $BM_TARBALL_FILETYPE in tar) __get_flags_tar_blacklist "$target" command="$tar $incremental $blacklist $dumpsymlinks $BM_TARBALL_EXTRA_OPTIONS -p -c -f" ;; tar.gz) __get_flags_tar_blacklist "$target" command="$tar $incremental $blacklist $dumpsymlinks $BM_TARBALL_EXTRA_OPTIONS -p -c -z -f" ;; tar.bz2|tar.bz) if [[ ! -x $bzip ]]; then error "The archive type \"tar.bz2\" depends on the tool \"\$bzip\"." fi __get_flags_tar_blacklist "$target" command="$tar $incremental $blacklist $dumpsymlinks $BM_TARBALL_EXTRA_OPTIONS -p -c -j -f" ;; tar.lz) if [[ ! -x $lzma ]]; then error "The archive type \"tar.lz\" depends on the tool \"\$lzma\"." fi __get_flags_tar_blacklist "$target" command="$tar $incremental $blacklist $dumpsymlinks $BM_TARBALL_EXTRA_OPTIONS -p -c --lzma -f" ;; zip) if [[ ! -x $zip ]]; then error "The archive type \"zip\" depends on the tool \"\$zip\"." fi command="$zip $dumpsymlinks $BM_TARBALL_EXTRA_OPTIONS -r" ;; dar) if [[ ! -x $dar ]]; then error "The archive type \"dar\" depends on the tool \"\$dar\"." fi __get_flags_dar_blacklist "$target" command="$dar $incremental $blacklist $maxsize $overwrite $BM_TARBALL_EXTRA_OPTIONS -z9 -Q -c $file_to_create -R" ;; *) error "The archive type \"\$BM_TARBALL_FILETYPE\" is not supported." return 1 ;; esac echo "$nice_bin -n $BM_ARCHIVE_NICE_LEVEL $command" } function build_clear_archive { debug "build_clear_archive ()" logfile=$(mktemp ${BM_TEMP_DIR}/bm-tarball.log.XXXXXX) debug "logfile: $logfile" # A couple of archive types have a special command line case "$BM_TARBALL_FILETYPE" in # dar has a special commandline, that cannot fit the common tar way "dar") BM__CURRENT_COMMAND="dar" debug "$command $target> $logfile 2>&1" tail_logfile "$logfile" $command "$target"> $logfile 2>&1 || error_code=$? check_error_code "$error_code" "$file_to_create" "$logfile" ;; # the common commandline *) BM__CURRENT_COMMAND="generic" debug "$command $file_to_create \"$target\" > $logfile 2>&1" tail_logfile "$logfile" debug "$command $file_to_create \"$target\"" $command $file_to_create "$target" > $logfile 2>&1 || error_code=$? check_error_code "$error_code" "$file_to_create" "$logfile" ;; esac BM__CURRENT_COMMAND="" } function build_encrypted_archive { debug "build_encrypted_archive" logfile=$(mktemp ${BM_TEMP_DIR}/bm-tarball.log.XXXXXX) debug "logfile: $logfile" if [[ -z "$BM_ENCRYPTION_RECIPIENT" ]]; then error "The configuration variable \"BM_ENCRYPTION_RECIPIENT\" must be defined." fi if [[ "$BM_TARBALL_FILETYPE" = "tar.lz" ]] || [[ "$BM_TARBALL_FILETYPE" = "zip" ]] || [[ "$BM_TARBALL_FILETYPE" = "dar" ]]; then error "The encryption is not yet possible with \"\$BM_TARBALL_FILETYPE\" archives." fi file_to_create="$file_to_create.gpg" debug "$command - \"$target\" 2>>$logfile | $gpg $BM__GPG_HOMEDIR -r \"$BM_ENCRYPTION_RECIPIENT\" -e > $file_to_create 2>> $logfile" tail_logfile "$logfile" $command - "$target" 2>>$logfile | $gpg $BM__GPG_HOMEDIR -r "$BM_ENCRYPTION_RECIPIENT" -e > $file_to_create 2>> $logfile || error_code=$? check_error_code "$error_code" "$file_to_create" "$logfile" } function __build_local_archive() { target="$1" dir_name="$2" debug "__build_local_archive ($target, $dir_name)" file_to_create=$(__get_file_to_create "$target") command="$(__get_backup_tarball_command)" || error "The archive type \"\$BM_TARBALL_FILETYPE\" is not supported." # dar is not like tar, we have to manually check for existing .1.dar files if [[ $BM_TARBALL_FILETYPE = dar ]]; then file_to_check="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX$dir_name.$TODAY.1.dar" else file_to_check="$file_to_create" fi if [[ "$BM_ENCRYPTION_METHOD" = "gpg" ]]; then file_to_check="$file_to_check.gpg" fi # let's exec the command if [[ ! -e "$file_to_check" ]] || [[ "$force" = "true" ]]; then if [[ "$BM_ENCRYPTION_METHOD" = "gpg" ]]; then if [[ ! -x $gpg ]]; then error "The program \"\$gpg\" is needed." fi bm_pending_archive="${file_to_check}" build_encrypted_archive else bm_pending_archive="${file_to_check}" build_clear_archive fi else warning "File \$file_to_check already exists, skipping." debug "rm -f ${bm_pending_incremental_list}.orig" rm -f "${bm_pending_incremental_list}.orig" continue fi } function __build_remote_archive() { target="$1" dir_name="$2" debug "__build_remote_archive ($target, $dir_name)" for host in $BM_UPLOAD_SSH_HOSTS do logfile=$(mktemp ${BM_TEMP_DIR}/bm-tarball.log.XXXXXX) file_to_create=$(__get_file_to_create_remote "$target" "$host") command=$(__get_backup_tarball_remote_command) || error "The archive type \"\$BM_TARBALL_FILETYPE\" is not supported." remote_command="ssh -p ${BM_UPLOAD_SSH_PORT} -i ${BM_UPLOAD_SSH_KEY} -o BatchMode=yes ${BM_UPLOAD_SSH_USER}@${host} $command" file_to_check="$file_to_create" if [[ ! -e "$file_to_check" ]] || [[ $force = true ]]; then logfile=$(mktemp ${BM_TEMP_DIR}/bm-tarball.log.XXXXXX) debug "$remote_command > $file_to_create 2>$logfile" tail_logfile "$logfile" $remote_command > "$file_to_create" 2>$logfile || error_code=$? check_error_code "$error_code" "$file_to_create" "$logfile" else warning "File \$file_to_check already exists, skipping." continue fi done } function __make_remote_tarball_token { t="$1" debug "__make_remote_tarball_token ($t)" dir_name=$(get_dir_name "$t" $BM_TARBALL_NAMEFORMAT) master=".master" __build_remote_archive "$t" "$dir_name" } function __make_local_tarball_token { t="$1" debug "__make_local_tarball_token ($t)" # look for the target in the blacklist... is_blacklisted="0" for blacklist_pattern in $BM_TARBALL_BLACKLIST; do if [[ "$t" == "$blacklist_pattern" ]]; then is_blacklisted="1" fi done # ignore the target if it's blacklisted if [[ "$is_blacklisted" == "1" ]]; then info "Target \"\$t\" is found in blacklist, skipping." # be sure the target exists elif [[ ! -e "$t" ]] || [[ ! -r "$t" ]]; then warning "Target \"\$t\" does not exist, skipping." nb_err=$(($nb_err + 1)) # Everything's OK, do the job else # we assume we'll build a master backup (full archive). # If we make incremental backup, the $master keyword # will be reset. dir_name=$(get_dir_name "$t" $BM_TARBALL_NAMEFORMAT) master=".master" # handling of incremental options incremental="" if [[ $method = tarball-incremental ]] then case "$BM_TARBALL_FILETYPE" in "dar") __get_flags_dar_incremental "$dir_name" ;; "tar"|"tar.gz"|"tar.bz2") __get_flags_tar_incremental "$dir_name" ;; esac fi __build_local_archive "$t" "$dir_name" fi } function __make_remote_tarball_archives() { debug "__make_remote_tarball_archives" nb_err=0 for target in "${BM_TARBALL_TARGETS[@]}" do if [[ -z "$target" ]]; then continue fi __make_remote_tarball_token "$target" done } function __make_local_tarball_archives() { debug "__make_local_tarball_archives" nb_err=0 for target in "${BM_TARBALL_TARGETS[@]}" do if [[ -z "$target" ]]; then continue fi target_expanded="$(eval 'echo $target')" # if the target exists, handle it as a single token if [[ -r "$target_expanded" ]]; then __make_local_tarball_token "$target_expanded" # else try to expand the target in several tokens else for t in $target_expanded do __make_local_tarball_token "$t" done fi done } # This manages both "tarball" and "tarball-incremental" methods. # configuration keys: BM_TARBALL_* and BM_TARBALLINC_* function backup_method_tarball() { method="$1" debug "backup_method_tarball ($method)" info "Using method \"\$method\"." # build the command line case $BM_TARBALL_FILETYPE in tar|tar.bz2|tar.gz) dumpsymlinks="$(__get_flags_tar_dump_symlinks)" ;; zip) dumpsymlinks="$(__get_flags_zip_dump_symlinks)" ;; dar) maxsize="$(__get_flags_dar_maxsize)" overwrite="$(__get_flags_dar_overwrite)" ;; esac if [[ "$BM_TARBALL_OVER_SSH" != "true" ]]; then __make_local_tarball_archives else __make_remote_tarball_archives fi # Handle errors # since version 0.8, BM's follows up its process even if errors were triggered # during the archive generation. if [[ $nb_err -eq 1 ]]; then warning "1 error occurred during the tarball generation." elif [[ $nb_err -gt 1 ]]; then warning "\$nb_err errors occurred during the tarball generation." fi } function backup_method_pgsql() { method="$1" pgsql_conffile="$HOME/.pgpass" pgsql_conffile_bm="$HOME/.pgpass.backup-manager.bak" debug "backup_method_pgsql ($method)" info "Using method \"\$method\"." if [[ ! -x $pgdump ]]; then error "The \"pgsql\" method is chosen, but \$pgdump is not found." fi opt=" -U$BM_PGSQL_ADMINLOGIN -h$BM_PGSQL_HOST -p$BM_PGSQL_PORT" BM_SHOULD_PURGE_PGPASS="false" if [[ -f $pgsql_conffile ]]; then info "Found existing PgSQL client configuration file: \$pgsql_conffile" info "Looking for matching credentials in this file..." if ! grep -qE "(${BM_PGSQL_HOST}|[^:]*):(${BM_PGSQL_PORT}|[^:]*):[^:]*:${BM_PGSQL_ADMINLOGIN}:${BM_PGSQL_ADMINPASS}" $pgsql_conffile; then info "No matching credentials: inserting our own." cp $pgsql_conffile $pgsql_conffile_bm BM_SHOULD_PURGE_PGPASS="true" echo "${BM_PGSQL_HOST}:${BM_PGSQL_PORT}:${BM_PGSQL_ADMINLOGIN}:${BM_PGSQL_ADMINPASS}" >> $pgsql_conffile fi else warning "Creating a default PgSQL client configuration file: \$HOME/.pgpass" echo "${BM_PGSQL_HOST}:${BM_PGSQL_PORT}:${BM_PGSQL_ADMINLOGIN}:${BM_PGSQL_ADMINPASS}" >> $pgsql_conffile chmod 0600 $pgsql_conffile fi compress="$BM_PGSQL_FILETYPE" for database in $BM_PGSQL_DATABASES do if [[ "$database" = "__ALL__" ]]; then file_to_create="$BM_REPOSITORY_ROOT/${BM_ARCHIVE_PREFIX}-all-pgsql-databases.$TODAY.sql" command="${pgdump}all $opt $BM_PGSQL_EXTRA_OPTIONS" else file_to_create="$BM_REPOSITORY_ROOT/${BM_ARCHIVE_PREFIX}-${database}.$TODAY.sql" command="$pgdump $opt $database $BM_PGSQL_EXTRA_OPTIONS" fi __create_file_with_meta_command done # purge the .pgpass file, if created by Backup Manager if [[ "$BM_SHOULD_PURGE_PGPASS" == "true" ]]; then info "restoring initial .pgpass file." warning "To avoid problems with .pgpass, insert the configured host:port:user:pass in $pgsql_conffile" mv $pgsql_conffile_bm $pgsql_conffile fi } function backup_method_mysql() { method="$1" mysql_conffile="$HOME/.backup-manager_my.cnf" debug "backup_method_mysql ($method)" info "Using method \"\$method\"." if [[ ! -x $mysqldump ]]; then error "The \"mysql\" method is chosen, but \$mysqldump is not found." fi opt="" if [[ "$BM_MYSQL_SAFEDUMPS" = "true" ]]; then opt="--opt" fi # if a MySQL Client conffile exists, the password must be inside if [[ -f $mysql_conffile ]]; then info "Using existing MySQL client configuration file: \$mysql_conffile" BM_SHOULD_PURGE_MYCNF="false" # we create a default one, just with the password else warning "Creating a default MySQL client configuration file: \$mysql_conffile" echo "[client]" > $mysql_conffile echo "# The following password will be sent to all standard MySQL clients" >> $mysql_conffile chmod 600 $mysql_conffile echo "password=\"$BM_MYSQL_ADMINPASS\"" >> $mysql_conffile BM_SHOULD_PURGE_MYCNF="true" fi base_command="$mysqldump --defaults-extra-file=$mysql_conffile $opt -u$BM_MYSQL_ADMINLOGIN -h$BM_MYSQL_HOST -P$BM_MYSQL_PORT $BM_MYSQL_EXTRA_OPTIONS" compress="$BM_MYSQL_FILETYPE" for database in $BM_MYSQL_DATABASES do if [[ "$database" = "__ALL__" ]]; then file_to_create="$BM_REPOSITORY_ROOT/${BM_ARCHIVE_PREFIX}-all-mysql-databases.$TODAY.sql" command="$base_command --all-databases" else file_to_create="$BM_REPOSITORY_ROOT/${BM_ARCHIVE_PREFIX}-${database}.$TODAY.sql" command="$base_command $database" fi __create_file_with_meta_command done # purge the my.cnf file, if created by Backup Manager if [[ "$BM_SHOULD_PURGE_MYCNF" == "true" ]]; then info "Removing default MySQL client configuration file: \$mysql_conffile" rm -f $mysql_conffile fi } function backup_method_svn() { method="$1" debug "backup_method_svn ($method)" info "Using method \"\$method\"." if [[ ! -x $svnadmin ]]; then error "The \"svn\" method is chosen, but \$svnadmin is not found." fi for repository in $BM_SVN_REPOSITORIES do if [[ ! -d $repository ]]; then warning "SVN repository \"\$repository\" is not valid; skipping." else archive_name=$(get_dir_name $repository "long") file_to_create="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX$archive_name.$TODAY.svn" command="$svnadmin -q dump $repository" compress="$BM_SVN_COMPRESSWITH" __create_file_with_meta_command fi done } function backup_method_pipe() { method="$1" debug "backup_method_pipe ($method)" info "Using method \"\$method\"." index=0 # parse each BM_PIPE_NAME's for archive in ${BM_PIPE_NAME[*]} do # make sure everything is here for this archive if [[ -z "${BM_PIPE_COMMAND[$index]}" ]] || [[ -z "${BM_PIPE_FILETYPE[$index]}" ]]; then warning "Not enough args for this archive (\$archive), skipping." continue fi command="${BM_PIPE_COMMAND[$index]}" filetype="${BM_PIPE_FILETYPE[$index]}" file_to_create="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX-$archive.$TODAY.$filetype" compress="${BM_PIPE_COMPRESS[$index]}" __create_file_with_meta_command || error "Cannot create archive." # update the index mark index=$(($index + 1)) done } Backup-Manager-0.7.10.1/lib/dbus.sh0000644000175000017500000000547111503702461016114 0ustar alexisalexis# Copyright © 2007 Rached Ben Mustapha # # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # # The backup-manager's dbus.sh library. # # If the dbus utilities are installed, these functions send # signals on the bus, (system or session one, as appropriate) # so that other processes on the system can react to backup # events, and thus increase the hype-level of backup-manager. # # These interfaces are still experimental and are subject to # change. # # Message contents: # * int32 percentage # * string label (human-readable string describing what is # currently being done) PROGRESS_INTERFACE="org.backupmanager.BackupManager.ProgressNotify" # Message contents: # * string event_name (one of "startup", "shutdown") # * string argument (details of the event) EVENT_INTERFACE="org.backupmanager.BackupManager.EventNotify" # Message contents: # * string level (one of debug, info, warning, error) # * string message (possibly truncated to fit in a dbus message) LOG_MESSAGE_INTERFACE="org.backupmanager.BackupManager.LogMessageNotify" SYSTEM_BUS_OBJECT="/org/backupmanager/instance/SystemInstance" USER_BUS_OBJECT="/org/backupmanager/instance/UserInstance/${USERNAME}" function bm_dbus_init() { debug "bm_dbus_init()" dbus_send=$(which dbus-send 2>/dev/null) || true if [ -x "${dbus_send}" ]; then if [ "${UID}" = "0" ]; then bus_type="system" bus_object=${SYSTEM_BUS_OBJECT} else bus_type="session" bus_object=${USER_BUS_OBJECT} fi dbus_send_cmd="${dbus_send} --${bus_type} --type=signal ${bus_object}" else dbus_send_cmd="" fi } function bm_dbus_send_progress() { local percentage label percentage=${1} label=${2} if [ -n "${dbus_send_cmd}" ]; then ${dbus_send_cmd} ${PROGRESS_INTERFACE} int32:"${percentage}" string:"${label}" || true fi } function bm_dbus_send_log_message() { local level message level=${1} message=${2} if [ -n "${dbus_send_cmd}" ]; then ${dbus_send_cmd} ${LOG_MESSAGE_INTERFACE} string:"${level}" string:"${message}" || true fi } function bm_dbus_send_event() { local event_name details event_name=${1} details=${2} if [ -n "${dbus_send_cmd}" ]; then ${dbus_send_cmd} ${EVENT_INTERFACE} string:"${event_name}" string:"${details}" || true fi } Backup-Manager-0.7.10.1/lib/gettext-dummy.sh0000644000175000017500000000206711503702461017772 0ustar alexisalexis# Copyright (C) 2010 The Backup Manager Authors # # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # Dummy gettext library to handle gettext call # on a system with no gettext at all. # Here we have to find a way to get the \$foo occurences # substituted with value of $foo... function translate() { out=$(echo "$1" | sed -e 's/\\\$/\$/g') out=$(eval "echo \"$out\"") echo "$out" } function echo_translated() { if [[ "$1" = "-n" ]]; then message=$(translate "$2") echo -n "$message" else message=$(translate "$1") echo "$message" fi } Backup-Manager-0.7.10.1/lib/burning-methods.sh0000644000175000017500000004051011503702461020255 0ustar alexisalexis# Copyright © 2005-2010 Alexis Sukrieh # # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # # CD/DVD discs burning features # function bm_safe_unmount { device="$1" debug "bm_safe_unmount($device)" realdevice=$(ls -l $device | awk '{print $10}') if [[ -n "$realdevice" ]]; then device="$realdevice" fi for m in `grep $device /etc/mtab 2>/dev/null| awk '{print $2}'` do info "Device \"/dev/\$device\" is mounted on \"\$m\", unmounting it." umount $m 2>/dev/null sleep 1 done } # This will get all the md5 sums of the day, # mount the BM_BURNING_DEVICE on /tmp/device and check # that the files are correct with md5 tests. function check_cdrom_md5_sums() { debug "check_cdrom_md5_sums()" has_error=0 if [[ -z $BM_BURNING_DEVICE ]]; then error "MD5 checkup is only performed on disks. Please set the BM_BURNING_DEVICE in \$conffile" fi # first create the mount point mount_point="$(mktemp -d ${BM_TEMP_DIR}/bm-mnt.XXXXXX)" if [[ ! -d $mount_point ]]; then error "The mount point \$mount_point is not there." fi # unmount if needed bm_safe_unmount $BM_BURNING_DEVICE # mount the device in /tmp/ info "Mounting \$BM_BURNING_DEVICE on \$mount_point." mount $BM_BURNING_DEVICE $mount_point >& /dev/null export HAS_MOUNTED=1 # now we can check the md5 sums. for file in $mount_point/*[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]* do base_file=$(basename $file) date_of_file=$(get_date_from_file $file) prefix_of_file=$(get_prefix_from_file $file) # Doesn't check the md5 sum of the md5sum file... if [[ "$base_file" = "${prefix_of_file}-${date_of_file}.md5" ]] ; then continue fi # Which file should contain the MD5 hashes for that file ? if [[ "$prefix_of_file" != "index" ]]; then md5_file="$BM_REPOSITORY_ROOT/${prefix_of_file}-${date_of_file}.md5" else md5_file="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX-${date_of_file}.md5" fi str=$(echo_translated "Checking MD5 sum for \$base_file:") # if it does not exist, we create it (that will take much time). if [[ ! -f $md5_file ]]; then save_md5_sum $file $md5_file || continue fi # try to read the previously saved md5 hash in the file md5hash_trust=$(get_md5sum_from_file ${base_file} $md5_file) # If the MD5 hash was not found, generate it and save it now. if [[ -z "$md5hash_trust" ]]; then save_md5_sum $file $md5_file || continue md5hash_trust=$(get_md5sum_from_file ${base_file} $md5_file) fi md5hash_cdrom=$(get_md5sum $file) || md5hash_cdrom="undefined" case "$md5hash_cdrom" in "$md5hash_trust") echo_translated "\$str ok." ;; "undefined") echo_translated "\$str failed (read error)." has_error=1 ;; *) echo_translated "\$str failed (MD5 hash mismatch)." has_error=1 ;; esac done if [[ $has_error = 1 ]]; then warning "Errors encountered during MD5 checks." fi # remove the mount point umount $BM_BURNING_DEVICE || error "Unable to unmount the mount point \$mount_point" rmdir $mount_point || error "Unable to remove the mount point \$mount_point" } # this will try to burn the generated archives to the disc # choosed in the configuration. # Obviously, we will use mkisofs for generating the iso and # cdrecord for burning CD, growisofs for the DVD. # Note that we pipe the iso image directly to cdrecord # in this way, we prevent the use of precious disk place. # # Two cases are possible: # - non-interactive mode: will try to burn data on a single disc # - interactive mode : will ask for next disc if needed. function burn_files() { debug "burn_files()" if [[ "$BM_BURNING_METHOD" = "none" ]] || [[ -z "$BM_BURNING_METHOD" ]]; then info "No burning method used." return 0 fi # Choose which mode to use (interactive or not) # according to the standard input if tty -s ; then debug "tty detected, using the interactive mode" burn_files_interactive else debug "no tty detected, non-interactive mode" burn_files_non_interactive fi } function find_what_to_burn() { source="$1" debug "find_what_to_burn($source)" what_to_burn="" nb_file=$(ls -l $source 2>/dev/null | wc -l) if [[ $nb_file -gt 0 ]]; then info "Number of files to burn: \$nb_file." else error "Nothing to burn for the \$BM__BURNING_DATE, try the '--burn ' switch." fi for file in $source do if [[ ! -L $file ]]; then what_to_burn="$what_to_burn $file" fi done } # This has to do something without any interactive input. function burn_files_non_interactive() { debug "burn_files_non_interactive()" # find what to burn according to the size... what_to_burn="" size=$(size_of_path "$BM_REPOSITORY_ROOT") # We can't burn the whole repository, using only today's archives if [[ $size -gt $BM_BURNING_MAXSIZE ]] || [[ -n "${BM__BURNING_DATE}" ]]; then if [[ -z "$BM__BURNING_DATE" ]]; then BM__BURNING_DATE="$TODAY" fi BM__BURNING_DATE="$TODAY" info "Burning archives of \$BM__BURNING_DATE." size=$(size_of_path "${BM_REPOSITORY_ROOT}/*${BM__BURNING_DATE}*") # does not fit neither, cannot burn anything. if [[ $size -gt $BM_BURNING_MAXSIZE ]]; then error "Cannot burn archives of the \$BM__BURNING_DATE, too big: \${size}M, must fit in \$BM_BURNING_MAXSIZE" fi find_what_to_burn "${BM_REPOSITORY_ROOT}/*${BM__BURNING_DATE}*" else BM__BURNING_DATE="$TODAY" find_what_to_burn "${BM_REPOSITORY_ROOT}/*" fi burn_session "$what_to_burn" } # This will be used only in interactive mode, then we can burn # the whole repository safely: user will change disc when needed (hopefully). # (anyway, we rely on this assertion, this should be documented). function burn_files_interactive() { debug "burn_files_interactive()" purge_indexes if [[ ! -z "${BM__BURNING_DATE}" ]] ; then info "Burning archives of \$BM__BURNING_DATE." find_what_to_burn "${BM_REPOSITORY_ROOT}/*${BM__BURNING_DATE}*" size=$(size_of_path "${BM_REPOSITORY_ROOT}/*${BM__BURNING_DATE}*") else info "Burning the whole archives." BM__BURNING_DATE="$TODAY" find_what_to_burn "${BM_REPOSITORY_ROOT}/*" size=$(size_of_path "${BM_REPOSITORY_ROOT}") fi info "Trying to burn \$BM_REPOSITORY_ROOT (\$size MB) in interactive mode. You will be prompted to enter insert a disc when needed" burn_multiples_media "$what_to_burn" } # This will burn $what_to_burn on a single session # It must fit in a medium function burn_session() { what_to_burn="$1" session_number="$2" number_of_indexes="$3" debug "burn_session($what_to_burn, $session_number, $number_of_indexes)" # Since version 0.7.5 disc-image can be non-joliet. # This is handled by $BM_BURNING_ISO_FLAGS, let's default that # variable for backward compat. if [[ -z "$BM_BURNING_ISO_FLAGS" ]]; then BM_BURNING_ISO_FLAGS="-R -J" fi if [[ -z "$session_number" ]] || [[ $session_number = 1 ]]; then title="Backups of ${BM__BURNING_DATE}" else title="Backups of ${BM__BURNING_DATE} - $session_number/$number_of_indexes" fi # Let's unmount the device first bm_safe_unmount $BM_BURNING_DEVICE # get a log file in a secure path logfile="$(mktemp ${BM_TEMP_DIR}/bm-burning.log.XXXXXX)" info "Redirecting burning logs into \$logfile" # set the cdrecord command devforced="" if [[ -n "$BM_BURNING_DEVFORCED" ]]; then info "Forcing dev=\${BM_BURNING_DEVFORCED} for cdrecord commands." devforced="dev=${BM_BURNING_DEVFORCED}" fi # burning the iso with the user choosen method case "$BM_BURNING_METHOD" in "DVD") if [[ ! -x $growisofs ]]; then error "DVD+R(W) burning requires \$growisofs, aborting." fi info "Exporting archives to the DVD+R(W) disc in \$BM_BURNING_DEVICE." debug "$growisofs -use-the-force-luke=tty -Z ${BM_BURNING_DEVICE} ${BM_BURNING_ISO_FLAGS} -V \"${title}\" ${what_to_burn} >> ${logfile}" tail_logfile $logfile $growisofs -use-the-force-luke=tty -Z ${BM_BURNING_DEVICE} ${BM_BURNING_ISO_FLAGS} -V "${title}" ${what_to_burn} >> ${logfile} 2>&1 || error "failed, check \$logfile" ;; "DVD-RW") if [[ ! -x $growisofs ]]; then error "DVD-R(W) burning requires \$growisofs, aborting." fi if [[ ! -x $dvdrwformat ]]; then error "DVD-R(W) burning requires \$dvdrwformat, aborting." fi info "Blanking the DVD-R(W) disc in \$BM_BURNING_DEVICE" debug "$dvdrwformat -blank $BM_BURNING_DEVICE > $logfile" tail_logfile $logfile $dvdrwformat -blank $BM_BURNING_DEVICE > $logfile 2>&1 || error "Unable to blank the DVD-R(W) disc (check \$logfile)." info "Exporting archives to the DVD-R(W) disc in \$BM_BURNING_DEVICE." debug "$growisofs -use-the-force-luke=tty -Z ${BM_BURNING_DEVICE} ${BM_BURNING_ISO_FLAGS} -V \"${title}\" ${what_to_burn} >> ${logfile}" $growisofs -use-the-force-luke=tty -Z ${BM_BURNING_DEVICE} ${BM_BURNING_ISO_FLAGS} -V "${title}" ${what_to_burn} >> ${logfile} 2>&1 || error "failed, check \$logfile" ;; "CDRW") if [[ ! -x $cdrecord ]]; then error "CD-R(W) burning requires \$cdrecord, aborting." fi info "Blanking the CDRW in \$BM_BURNING_DEVICE." debug "${cdrecord} -tao $devforced blank=fast > ${logfile}" tail_logfile $logfile ${cdrecord} -tao $devforced blank=fast > ${logfile} 2>&1 || error "failed, check \$logfile" info "Burning data to \$BM_BURNING_DEVICE." debug "${mkisofs} -V \"${title}\" -q ${BM_BURNING_ISO_FLAGS} ${what_to_burn} | ${cdrecord} -tao $devforced - > ${logfile}" ${mkisofs} -V "${title}" -q ${BM_BURNING_ISO_FLAGS} ${what_to_burn} | \ ${cdrecord} -tao $devforced - > ${logfile} 2>&1 || error "failed, check \$logfile" ;; "CDR") if [[ ! -x $cdrecord ]]; then error "CD-R(W) burning requires \$cdrecord, aborting." fi info "Burning data to \$BM_BURNING_DEVICE." debug "${mkisofs} -V \"${title}\" -q ${BM_BURNING_ISO_FLAGS} ${what_to_burn} | ${cdrecord} -tao $devforced - > ${logfile}" tail_logfile $logfile ${mkisofs} -V "${title}" -q ${BM_BURNING_ISO_FLAGS} ${what_to_burn} | \ ${cdrecord} -tao $devforced - > ${logfile} 2>&1 || error "failed, check \$logfile" ;; "none"|"NONE") info "Nothing to burn." ;; *) error "The requested burning method is not supported, check BM_BURNING_METHOD in \$conffile" ;; esac # Cleaning the logile, everything was fine at this point. rm -f $logfile # checking the files in the CDR if wanted if [[ $BM_BURNING_CHKMD5 = true ]]; then check_cdrom_md5_sums fi } function purge_indexes() { debug "purge_indexes()" index_prefix=$(get_index_prefix) rm -f ${index_prefix}* } function get_index_prefix() { debug "get_index_prefix()" index_prefix="$BM_REPOSITORY_ROOT/index-${BM__BURNING_DATE}" echo "$index_prefix" } # Parse "$target" and build index files. Put as many files in index as possible # according to BM_BURNING_MAXSIZE. # indexes are not included here, should be added by hand after that processing. function __build_indexes_from_target() { target="$1" debug "__build_indexes_from_target ($target)" indexes="" medium_index="" index_number=1 number_of_indexes=1 index_prefix=$(get_index_prefix) index_session="$index_prefix-$index_number" # Sorting by filetypes target=$(ls -v $target) # Write the indexes files in order to have one index file by medium. # When a medium is full, we create a new one. for file in ${target} do if [[ ! -f $file ]]; then continue fi size_of_file=$(size_of_path "$file") if [[ $size_of_file -gt $BM_BURNING_MAXSIZE ]] ; then warning "Not burning \$file because it does not fit in the disk." continue fi # Addd file to the index file. medium_possible_index="$medium_index $file" size_of_possible_index=$(size_of_path "$medium_possible_index") if [[ $size_of_possible_index -gt $BM_BURNING_MAXSIZE ]] ; then indexes="$indexes $index_session" number_of_indexes=$(($number_of_indexes +1)) index_number=$(($index_number + 1)) index_session="$index_prefix-$index_number" echo "$file" > $index_session medium_index="$file" medium_possible_index="" else echo "$file" >> $index_session medium_index="$medium_possible_index" fi done indexes="$indexes $index_session" } function __insert_new_medium() { debug "__insert_new_medium()" bm_pause "$(translate "Please insert a new disk in \$BM_BURNING_DEVICE")" } function __burn_session_from_file() { index_file="$1" session_number="$2" number_of_indexes="$3" debug "__burn_session_from_file ($index_file, $session_number, $number_of_indexes)" if [[ ! -e "$index_file" ]]; then error "No such index file: \"\$index_file\"." fi what_to_burn_session="" for file_to_burn in $(cat "$index_file") do what_to_burn_session="$what_to_burn_session $file_to_burn" done what_to_burn="$what_to_burn_session" burn_session "$what_to_burn_session" "$session_number" "$number_of_indexes" } function __append_index_paths_in_indexes() { debug "__append_index_paths_in_indexes()" prefix=$(get_index_prefix) for index_file in $prefix* do for index_path in $prefix* do echo "$index_path" >> $index_file done done } function burn_multiples_media() { target="$1" debug "burn_multiples_media ($target)" # first purge existing indexs purge_indexes # put in $indexes a list of files that contain # archives to put on each medium. __build_indexes_from_target "$target" # Display the number of medias required by the burning systemp. if [[ $number_of_indexes -eq 1 ]]; then info "The burning process will need one disk." else info "The burning process will need \$number_of_indexes disks." fi # Now that all indexes are built, list them so we can find # them all in the media. __append_index_paths_in_indexes # foreach index, build its content on a media, interactively session_number=0 for index in $indexes do session_number=$(($session_number + 1)) info "Burning content of \$index" __insert_new_medium __burn_session_from_file "$index" "$session_number" "$number_of_indexes" done # Remove all the index files. rm -f $indexes } Backup-Manager-0.7.10.1/lib/md5sum.sh0000644000175000017500000000434711503702461016372 0ustar alexisalexis# Copyright © 2005-2010 Alexis Sukrieh # # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # # The backup-manager's md5sum.sh library. # # Everything related to md5sum is here. # This will get a filename a will search its # md5hash in the file given as second arg. function get_md5sum_from_file() { filename="$1" md5file="$2" debug "get_md5sum_from_file ($filename, $md5file)" if [[ -z "$filename" ]] || [[ -z "$md5file" ]]; then error "Internal error: bad usage of function get_md5sum_from_file()" fi if [[ ! -f $md5file ]]; then error "No md5file found: \$md5file" fi filename="$(basename $filename)" md5=$(grep "$filename" $md5file 2>/dev/null | awk '{print $1}') || md5="" echo "$md5" } # Just return the md5 hash of a file function get_md5sum() { file="$1" debug "get_md5sum ($file)" if [[ -f $file ]]; then md5=`$md5sum $file 2>/dev/null` || md5="" if [[ -z "$md5" ]]; then echo "undefined" else md5=$(echo $md5 | awk '{print $1}') echo "$md5" fi else echo "undefined" fi } # Will take an archive path and the path # to a MD5 file. # It will put the md5sum output inside. # Note that the base name is extracted from # the given archive path in order to get the # MD5 hash from the BM_REPOSITORY_ROOT. # function save_md5_sum() { archive="$1" debug "save_md5_sum ($archive)" archive=$(basename $archive) archive="$BM_REPOSITORY_ROOT/$archive" md5file="$2" if [[ -f $archive ]]; then hash=$(get_md5sum $archive) base=$(basename $archive) echo "$hash $base" >> $md5file else warning "Archive given does not exist in the repository: \$archive" fi } Backup-Manager-0.7.10.1/lib/sanitize.sh0000644000175000017500000002361211503702461017002 0ustar alexisalexis#! /usr/bin/env bash # Copyright © 2005-2010 Alexis Sukrieh # # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # Check that every key in the conffile is ok for a proper run. # Also manage deprecated confkeys the best as possible, so a deprecated # conffile just renders warnings but still works as before. # we'll count the number of warnings, here nb_warnings=0 # For minimizing translations and counting warnings, we globalize the warnings messages # Please, developers, use this for handling those warnings :) function confkey_warning() { key="$1" default="$2" debug "confkey_warning ($key, $default)" nb_warnings=$(($nb_warnings + 1)) warning "The configuration key \$key is not set, using \"\$default\"." } function confkey_warning_deprecated() { deprecated_key="$1" deprecated_value="$2" new_key="$3" debug "confkey_warning_deprecated ($deprecated_key, $deprecated_value, $new_key)" nb_warnings=$(($nb_warnings + 1)) warning "The configuration key \"\$deprecated_key\" is deprecated, you should rename it \"\$new_key\". Using \"\$deprecated_value\"." } # Look if the deprecated key exists, if so, warning and use it as # a default value for the new key. function confkey_handle_deprecated() { deprecated_key="$1" new_key="$2" debug "confkey_handle_deprecated ($deprecated_key, $new_key)" eval "deprecated_value=\"\$$deprecated_key\"" || deprecated_value="" if [[ -n "$deprecated_value" ]]; then confkey_warning_deprecated "$deprecated_key" "$deprecated_value" "$new_key" eval "$new_key=\"\$deprecated_value\"" eval "export $new_key" fi } function confkey_require() { key="$1" default="$2" debug "confkey_require ($key, $default)" eval "value=\"\$$key\"" if [[ -z "$value" ]]; then confkey_warning "$key" "$default" eval "$key=\"\$default\"" eval "export $key" fi } function confkey_error() { key="$1" keymandatory="$2" debug "confkey_error ($key, $keymandatory)" error "The configuration key \$key is not set but \$keymandatory is enabled." } # In version older than 0.6, it was possible to set booleans to "yes" or "no", # that's not valid anymore. In order to be backward compatible, we override yes/no # values to true/false, but we trigger a warning. function replace_deprecated_booleans() { debug "replace_deprecated_booleans()" for line in $(env) do key=$(echo "$line" | awk -F '=' '{print $1}') value=$(echo "$line" | awk -F '=' '{print $2}') # Be sure to not treat BM_ARCHIVE_PREFIX as a deprecated boolean if [[ "$key" != "BM_ARCHIVE_PREFIX" ]]; then if [[ -n "$key" ]]; then if [[ $(expr match "$key" BM_) -gt 0 ]]; then if [[ "$value" = "yes" ]]; then warning "Deprecated boolean, \$key is set to \"yes\", setting \"true\" instead." nb_warnings=$(($nb_warnings + 1)) eval "export $key=\"true\"" fi if [[ "$value" = "no" ]]; then warning "Deprecated boolean, \$key is set to \"no\", setting \"false\" instead." nb_warnings=$(($nb_warnings + 1)) eval "export $key=\"false\"" fi fi fi fi done } ############################################################## # Sanitizer - check mandatory configuration keys, handle them # the best possible, with default values and so on... ############################################################# # First of all replace yes/no booleans with true/false ones. replace_deprecated_booleans confkey_handle_deprecated "BM_ARCHIVES_REPOSITORY" "BM_REPOSITORY_ROOT" confkey_require "BM_REPOSITORY_ROOT" "/var/archives" # The temp dir used by BM confkey_require "BM_TEMP_DIR" "/tmp" # creating the temp path if not found if [[ ! -d "$BM_TEMP_DIR" ]]; then mkdir "$BM_TEMP_DIR" || error "Unable to create BM_TEMP_DIR: \"\$BM_TEMP_DIR\"." fi # let's drop the trailing slash, if any. export BM_REPOSITORY_ROOT="${BM_REPOSITORY_ROOT%/}" confkey_require "BM_REPOSITORY_SECURE" "true" if [[ "$BM_REPOSITORY_SECURE" = "true" ]]; then confkey_handle_deprecated "BM_USER" "BM_REPOSITORY_USER" confkey_require "BM_REPOSITORY_USER" "root" confkey_handle_deprecated "BM_GROUP" "BM_REPOSITORY_GROUP" confkey_require "BM_REPOSITORY_GROUP" "root" confkey_require "BM_REPOSITORY_CHMOD" "770" confkey_require "BM_ARCHIVE_CHMOD" "660" fi confkey_require "BM_REPOSITORY_RECURSIVEPURGE" "false" confkey_handle_deprecated "BM_MAX_TIME_TO_LIVE" "BM_ARCHIVE_TTL" confkey_require "BM_ARCHIVE_TTL" "5" confkey_handle_deprecated "BM_PURGE_DUPLICATES" "BM_ARCHIVE_PURGEDUPS" confkey_require "BM_ARCHIVE_PURGEDUPS" "true" confkey_handle_deprecated "BM_ARCHIVES_PREFIX" "BM_ARCHIVE_PREFIX" confkey_require "BM_ARCHIVE_PREFIX" "$HOSTNAME" confkey_handle_deprecated "BM_BACKUP_METHOD" "BM_ARCHIVE_METHOD" confkey_require "BM_ARCHIVE_METHOD" "tarball" confkey_require "BM_ARCHIVE_NICE_LEVEL" "10" if [[ "$BM_ARCHIVE_METHOD" = "tarball-incremental" ]] && [[ -z "$BM_TARBALLINC_MASTERDATETYPE" ]]; then confkey_require "BM_TARBALLINC_MASTERDATETYPE" "weekly" fi if [[ -n "$BM_TARBALLINC_MASTERDATEVALUE" ]]; then if [[ "$BM_TARBALLINC_MASTERDATEVALUE" -gt "6" ]]; then if [[ "$BM_TARBALLINC_MASTERDATETYPE" = "weekly" ]]; then warning "BM_TARBALLINC_MASTERDATEVALUE should not be greater than 6, falling back to 0" export BM_TARBALLINC_MASTERDATEVALUE="0" else # monthly if [[ "$BM_TARBALLINC_MASTERDATEVALUE" -gt "31" ]]; then warning "BM_TARBALLINC_MASTERDATEVALUE should not be greater than 31, falling back to 1" export BM_TARBALLINC_MASTERDATEVALUE="1" fi fi fi fi if [[ "$BM_ARCHIVE_METHOD" = "tarball" ]] || [[ "$BM_ARCHIVE_METHOD" = "tarball-incremental" ]] ; then confkey_require "BM_TARBALL_FILETYPE" "tar.gz" confkey_require "BM_TARBALL_NAMEFORMAT" "long" confkey_require "BM_TARBALL_DUMPSYMLINKS" "false" fi confkey_handle_deprecated "BM_FILETYPE" "BM_TARBALL_FILETYPE" confkey_handle_deprecated "BM_NAME_FORMAT" "BM_TARBALL_NAMEFORMAT" confkey_handle_deprecated "BM_DIRECTORIES_BLACKLIST" "BM_TARBALL_BLACKLIST" confkey_handle_deprecated "BM_DUMP_SYMLINKS" "BM_TARBALL_DUMPSYMLINKS" # encryption stuff goes here if [[ "$BM_ENCRYPTION_METHOD" = "gpg" ]]; then if [[ -z "$BM_ENCRYPTION_RECIPIENT" ]]; then confkey_error "BM_ENCRYPTION_RECIPIENT" "BM_ENCRYPTION_METHOD" fi fi # The TARBALL_OVER_SSH thing if [[ "$BM_TARBALL_OVER_SSH" = "true" ]]; then if [[ -z "$BM_UPLOAD_SSH_HOSTS" ]]; then confkey_error "BM_UPLOAD_SSH_HOSTS" "BM_TARBALL_OVER_SSH" fi if [[ -z "$BM_UPLOAD_SSH_KEY" ]]; then confkey_error "BM_UPLOAD_SSH_KEY" "BM_TARBALL_OVER_SSH" fi if [[ -z "$BM_UPLOAD_SSH_USER" ]]; then confkey_error "BM_UPLOAD_SSH_USER" "BM_TARBALL_OVER_SSH" fi confkey_require "BM_UPLOAD_SSH_PORT" "22" fi # Converting anything in BM_TARBALL_DIRECTORIES in the array BM_TARBALL_TARGETS[]. # see bug #86 for details. if [[ -n "$BM_DIRECTORIES" ]]; then BM_TARBALL_DIRECTORIES="$BM_DIRECTORIES" fi if [[ -n "$BM_TARBALL_DIRECTORIES" ]]; then declare -a BM_TARBALL_TARGETS index=0 for target in $BM_TARBALL_DIRECTORIES do BM_TARBALL_TARGETS[$index]="$target" index=$(($index + 1)) done fi if [[ "$BM_UPLOAD_METHOD" = "rsync" ]]; then confkey_require "BM_UPLOAD_RSYNC_DUMPSYMLINKS" "false" confkey_handle_deprecated "BM_UPLOAD_KEY" "BM_UPLOAD_SSH_KEY" confkey_handle_deprecated "BM_UPLOAD_USER" "BM_UPLOAD_SSH_USER" fi if [[ "$BM_UPLOAD_METHOD" = "ssh" ]]; then confkey_require "BM_UPLOAD_SSH_PORT" "22" fi if [[ "$BM_ARCHIVE_METHOD" = "mysql" ]]; then confkey_require "BM_MYSQL_ADMINLOGIN" "root" confkey_require "BM_MYSQL_HOST" "localhost" confkey_require "BM_MYSQL_PORT" "3306" confkey_require "BM_MYSQL_FILETYPE" "tar.gz" fi # Burning system if [[ -n "$BM_BURNING" ]]; then case "$BM_BURNING" in ""|"no"|"false"|"none") BM_BURNING_METHOD="none" ;; esac fi if [[ -n "$BM_BURNING_METHOD" ]] && [[ "$BM_BURNING_METHOD" != "none" ]] ; then confkey_require "BM_BURNING_DEVICE" "/dev/cdrom" confkey_require "BM_BURNING_MAXSIZE" "650" confkey_require "BM_BURNING_CHKMD5" "true" fi if [[ -n "$BM_UPLOAD_MODE" ]]; then confkey_handle_deprecated "BM_UPLOAD_MODE" "BM_UPLOAD_METHOD" confkey_handle_deprecated "BM_UPLOAD_USER" "BM_UPLOAD_SSH_USER" confkey_handle_deprecated "BM_UPLOAD_KEY" "BM_UPLOAD_SSH_KEY" confkey_handle_deprecated "BM_UPLOAD_USER" "BM_UPLOAD_FTP_USER" confkey_handle_deprecated "BM_UPLOAD_PASSWD" "BM_UPLOAD_FTP_PASSWORD" confkey_handle_deprecated "BM_FTP_PURGE" "BM_UPLOAD_FTP_PURGE" confkey_handle_deprecated "BM_UPLOAD_FTPPURGE" "BM_UPLOAD_FTP_PURGE" confkey_handle_deprecated "BM_UPLOAD_DIR" "BM_UPLOAD_DESTINATION" fi if [[ -z "$BM_ARCHIVE_STRICTPURGE" ]]; then confkey_require "BM_ARCHIVE_STRICTPURGE" "true" fi confkey_require "BM_LOGGER" "true" if [[ "$BM_LOGGER" = "true" ]]; then confkey_require "BM_LOGGER_FACILITY" "user" confkey_require "BM_LOGGER_LEVEL" "warning" fi if [[ $nb_warnings -gt 0 ]]; then warning "When validating the configuration file \$conffile, \$nb_warnings warnings were found." fi Backup-Manager-0.7.10.1/lib/upload-methods.sh0000644000175000017500000002002211503702461020071 0ustar alexisalexis# Copyright (C) 2010 The Backup Manager Authors # # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # This is upload methods library. # Reads the configuration keys in order to set the # environement (hosts, sources, ...) function bm_upload_init() { hosts="$1" bm_upload_hosts=$(echo $hosts| sed -e 's/ /,/g') v_switch="" if [[ "$verbose" == "true" ]]; then v_switch="-v" fi } # Manages SSH uploads function bm_upload_ssh() { info "Using the upload method \"ssh\"." bm_upload_hosts="$BM_UPLOAD_HOSTS $BM_UPLOAD_SSH_HOSTS" bm_upload_init "$bm_upload_hosts" if [[ -z "$BM_UPLOAD_SSH_DESTINATION" ]]; then BM_UPLOAD_SSH_DESTINATION="$BM_UPLOAD_DESTINATION" fi if [[ -z "$BM_UPLOAD_SSH_DESTINATION" ]]; then error "No valid destination found, SSH upload not possible." fi # the flags for the SSH method k_switch="" if [[ ! -z "$BM_UPLOAD_SSH_KEY" ]]; then k_switch="-k=$BM_UPLOAD_SSH_KEY" fi ssh_purge_switch="" if [[ "$BM_UPLOAD_SSH_PURGE" = "true" ]]; then ssh_purge_switch="--ssh-purge" fi # Call to backup-manager-upload logfile="$(mktemp ${BM_TEMP_DIR}/bmu-log.XXXXXX)" $bmu $v_switch $k_switch $ssh_purge_switch -m="scp" \ -h="$bm_upload_hosts" \ -u="$BM_UPLOAD_SSH_USER" \ -d="$BM_UPLOAD_SSH_DESTINATION" \ -r="$BM_REPOSITORY_ROOT" today 2>$logfile || error "Error reported by backup-manager-upload for method \"scp\", check \"\$logfile\"." rm -f $logfile } # Manages encrypted SSH uploads function bm_upload_ssh_gpg() { info "Using the upload method \"ssh-gpg\"." bm_upload_hosts="$BM_UPLOAD_HOSTS $BM_UPLOAD_SSH_HOSTS" bm_upload_init "$bm_upload_hosts" if [[ -z "$BM_UPLOAD_SSH_DESTINATION" ]]; then BM_UPLOAD_SSH_DESTINATION="$BM_UPLOAD_DESTINATION" fi if [[ -z "$BM_UPLOAD_SSH_DESTINATION" ]]; then error "No valid destination found, SSH upload not possible." fi if [[ -z "$BM_UPLOAD_SSHGPG_RECIPIENT" ]]; then error "No gpg recipient given. Argument is mandatory if upload method ssh-gpg is used." fi # the flags for the SSH method k_switch="" if [[ ! -z "$BM_UPLOAD_SSH_KEY" ]]; then k_switch="-k=$BM_UPLOAD_SSH_KEY" fi # Call to backup-manager-upload logfile="$(mktemp ${BM_TEMP_DIR}/bmu-log.XXXXXX)" $bmu $v_switch $k_switch -m="ssh-gpg" \ -h="$bm_upload_hosts" \ -u="$BM_UPLOAD_SSH_USER" \ -d="$BM_UPLOAD_SSH_DESTINATION" \ -r="$BM_REPOSITORY_ROOT" \ --gpg-recipient="$BM_UPLOAD_SSHGPG_RECIPIENT" today 2>$logfile|| error "Error reported by backup-manager-upload for method \"ssh-gpg\", check \"\$logfile\"." rm -f $logfile } # Manages FTP uploads function bm_upload_ftp() { info "Using the upload method \"ftp\"." bm_upload_hosts="$BM_UPLOAD_HOSTS $BM_UPLOAD_FTP_HOSTS" bm_upload_init "$bm_upload_hosts" if [[ -z "$BM_UPLOAD_FTP_DESTINATION" ]]; then BM_UPLOAD_FTP_DESTINATION="$BM_UPLOAD_DESTINATION" fi if [[ -z "$BM_UPLOAD_FTP_DESTINATION" ]]; then error "No valid destination found, FTP upload not possible." fi # flags for the FTP method ftp_purge_switch="" if [[ "$BM_UPLOAD_FTP_PURGE" = "true" ]]; then ftp_purge_switch="--ftp-purge" fi # Additionnal flag for the FTP method ftp_test_switch="" if [[ "$BM_UPLOAD_FTP_TEST" = "true" ]]; then ftp_test_switch="--ftp-test" # create the test file $dd if=/dev/zero of=$BM_REPOSITORY_ROOT/2mb_file.dat bs=1M count=2 > /dev/null 2>&1 fi logfile="$(mktemp ${BM_TEMP_DIR}/bmu-log.XXXXXX)" $bmu $v_switch $ftp_purge_switch $ftp_test_switch \ -m="ftp" \ -h="$bm_upload_hosts" \ -u="$BM_UPLOAD_FTP_USER" \ -d="$BM_UPLOAD_FTP_DESTINATION" \ -r="$BM_REPOSITORY_ROOT" today 2>$logfile|| error "Error reported by backup-manager-upload for method \"ftp\", check \"\$logfile\"." rm -f $logfile } # Manages S3 uploads function bm_upload_s3() { info "Using the upload method \"S3\"." bm_upload_hosts="s3.amazon.com" bm_upload_init "$bm_upload_hosts" if [[ -z "$BM_UPLOAD_S3_DESTINATION" ]]; then BM_UPLOAD_S3_DESTINATION="$BM_UPLOAD_DESTINATION" fi # flags for the S3 method s3_purge_switch="" if [[ "$BM_UPLOAD_S3_PURGE" = "true" ]]; then s3_purge_switch="--s3-purge" fi logfile="$(mktemp ${BM_TEMP_DIR}/bmu-log.XXXXXX)" $bmu $v_switch $s3_purge_switch \ -m="s3" \ -h="$bm_upload_hosts" \ -u="$BM_UPLOAD_S3_ACCESS_KEY" \ -b="$BM_UPLOAD_S3_DESTINATION" \ -r="$BM_REPOSITORY_ROOT" today 2>$logfile || error "Error reported by backup-manager-upload for method \"s3\", check \"\$logfile\"." rm -f $logfile } function _exec_rsync_command() { info "Uploading \$directory to \${host}:\${BM_UPLOAD_RSYNC_DESTINATION}" logfile=$(mktemp ${BM_TEMP_DIR}/bm-rsync.XXXXXX) # default options for local rsync ssh_option="" destination_option="$BM_UPLOAD_RSYNC_DESTINATION/${RSYNC_SUBDIR%/}" # remote hosts use SSH if [[ "$host" != "localhost" ]]; then if [[ -z "$BM_UPLOAD_SSH_USER" ]] || [[ -z "$BM_UPLOAD_SSH_KEY" ]]; then error "Need a key to use rsync (set BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY)." fi ssh_option="ssh -l ${BM_UPLOAD_SSH_USER} -o BatchMode=yes -o ServerAliveInterval=60 -i ${BM_UPLOAD_SSH_KEY}" destination_option="${BM_UPLOAD_SSH_USER}@${host}:${destination_option}" fi # Due to a very weird behaviour in the rsync's argument-processing phase; # it's safer to use RSYNC_RSH to pass ssh options than using the -e '' flag. command="${rsync_options} ${directory} ${destination_option}" if ! RSYNC_RSH="$ssh_option" \ $rsync $command >$logfile 2>&1; then error "Upload of \$directory with rsync failed; check \$logfile." else rm -f $logfile fi } # Manages RSYNC uploads function bm_upload_rsync_common() { bm_upload_hosts="$BM_UPLOAD_HOSTS $BM_UPLOAD_RSYNC_HOSTS" bm_upload_init "$bm_upload_hosts" if [[ -z "$bm_upload_hosts" ]]; then bm_upload_hosts="localhost" fi if [[ -z "$BM_UPLOAD_RSYNC_DESTINATION" ]]; then BM_UPLOAD_RSYNC_DESTINATION="$BM_UPLOAD_DESTINATION" fi if [[ -z "$BM_UPLOAD_RSYNC_DESTINATION" ]]; then error "No valid destination found, RSYNC upload not possible." fi rsync_options="-va" if [[ ! -z $BM_UPLOAD_RSYNC_DUMPSYMLINKS ]]; then if [[ "$BM_UPLOAD_RSYNC_DUMPSYMLINKS" = "true" ]]; then rsync_options="-vaL" fi fi for directory in $BM_UPLOAD_RSYNC_DIRECTORIES do if [[ -n "$bm_upload_hosts" ]]; then servers=`echo $bm_upload_hosts| sed 's/ /,/g'` for host in $servers do _exec_rsync_command done else warning "No hosts given to the rsync method, set BM_UPLOAD_RSYNC_HOSTS." fi done } function bm_upload_rsync() { info "Using the upload method \"rsync\"." RSYNC_SUBDIR="" bm_upload_rsync_common } function bm_upload_rsync_snapshots() { info "Using the upload method \"rsync-snapshots\"." RSYNC_SUBDIR=${TODAY} bm_upload_rsync_common } Backup-Manager-0.7.10.1/backup-manager-upload0000755000175000017500000007442111503702461020143 0ustar alexisalexis#!/usr/bin/perl # Backup Manager Upload - Multiprotocol uploader for backup-manager. use strict; use warnings; use BackupManager::Config; use BackupManager::Dialog; use POSIX qw(strftime); use File::Temp qw(tempfile); use File::Basename; use File::stat; use constant TRUE => 1; use constant FALSE => 0; use constant E_SUCCESS => 0; use constant E_INVALID => 10; use constant E_FTP_FAILED => 20; use constant E_SCP_FAILED => 21; use constant E_S3_FAILED => 22; use constant E_UNKNOWN => 23; # global vars my $scp = '/usr/bin/scp'; my $ssh = '/usr/bin/ssh'; my $gpg = '/usr/bin/gpg'; my $split = '/usr/bin/split'; my $g_list = 0; my $g_host = undef; my $g_user = undef; my $g_pass = undef; my $g_ftpclean = undef; my $g_ftptest = undef; my $g_s3clean = undef; my $g_s3max_size = 4*1024*1024*1024; # 4G my $g_sshclean = undef; my $g_protocol = 'scp'; my $g_remote_dir= '/var/archives/uploads'; my $g_bucket = undef; my $g_root_dir = '/var/archives'; my $g_key_file = undef; my $g_gpg_recipient = undef; # first get the args BackupManager::Config::getopt("$0 -m=mode -h=host -u=user [options] date\n -v|--verbose : Print on STDOUT what happens. -m|--mode : Transfer mode to use : ftp, scp, s3, or ssh-gpg. -h|--host : Remote hosts to connect to (separated by commas). -u|--user : User to use for connection. -p|--password : remote user's password (needed for ftp and s3 uploads). -k|--key : SSH key file to use for opening the scp session (only needed for scp mode). -d|--directory : Directory on the remote host where files will go (default is /var/archives/uploads). -b|--bucket : Amazon S3 storage bucket to use -r|--root : Root directory of your archives (default /var/archives). -l|--list : Only prints which files would be uploaded. --gpg-recipient : Selects the public key used for gpg encryption (only for ssh-gpg mode). --ftp-purge : Purge the remote directory before uploading files in FTP mode. --ftp-test : Sends a test file before uploading archives in FTP mode. --s3-purge : Purge the remote directory before uploading files in S3 mode. --s3-maxsize : Maximum file size to upload. If file execeds this size, it will be `split`. Default is 4GB --ssh-purge : Purge the remote directory before uploading files in SSH mode. date : All files >= date will be uploaded. Either a valid date (YYYYMMDD) or one of this words : today, yesterday", 'verbose' => sub { init_dialog($_[1]) }, 'mode|m=s' => \$g_protocol, 'host|h=s' => \$g_host, 'user|u=s' => \$g_user, 'password|p=s' => \$g_pass, 'directory|d=s' => \$g_remote_dir, 'bucket|b=s' => \$g_bucket, 'key|k=s' => \$g_key_file, 'root|r=s' => \$g_root_dir, 'gpg-recipient=s' => \$g_gpg_recipient, 'ftp-purge' => \$g_ftpclean, 'ftp-test' => \$g_ftptest, 's3-purge' => \$g_s3clean, 's3-maxsize=i' => \$g_s3max_size, 'ssh-purge' => \$g_sshclean, 'list' => \$g_list, ); ############################################################## # Common subs (for all methods) ############################################################## # {{{ sub get_formated_date($) { my $date = shift; unless (defined $date) { print_error "date is required, enter today, yesterday or YYYYMMDD"; exit E_INVALID; } if ($date eq 'today') { return strftime ('%Y%m%d', localtime); } elsif ($date eq 'yesterday') { return strftime ('%Y%m%d', localtime(time - (24 * 3600))); } elsif ($date =~ /^\d{4}\d{2}\d{2}$/) { return $date; } else { print_error "date $date is not valid, enter today, yesterday or YYYYMMDD"; exit E_INVALID; } } sub get_files_list_from_date($) { my $date = shift; return [] unless defined $date; my $ra_files = []; unless (-d $g_root_dir) { my $msg = "root dir specified does not exists : $g_root_dir"; print_error $msg; exit E_INVALID; } # make sure we can read the root dir, when the secure mode is # enabled, the repository might not be readable by us... unless (-r $g_root_dir) { print_error "The repository $g_root_dir is not readable by user \"$ENV{USER}\"."; if ($ENV{BM_REPOSITORY_SECURE} eq "true") { print_error "The secure mode is enabled (BM_REPOSITORY_SECURE),"; print_error "the upload user ($g_user) must be in the group \"BM_REPOSITORY_GROUP\"."; } exit E_INVALID; } while (<$g_root_dir/*$date*>) { push @{$ra_files}, $_; } return $ra_files; } sub get_hosts_from_str($) { my ($hosts_str) = @_; return [] unless defined $hosts_str; my $ra_hosts = []; $hosts_str =~ s/\s//g; foreach my $host (split /,/, $hosts_str) { push @{$ra_hosts}, $host; } return $ra_hosts; } sub get_tempfile(;$) { my ($template) = @_; $template ||= 'bmu-XXXXXX'; return tempfile( TEMPLATE => $template, DIR => $ENV{BM_TEMP_DIR}, UNLINK => 1, ); } # }}} ############################################################## # SSH Mode ############################################################## # {{{ # returns all the ssh otpions needed for a valid SSH connection sub get_ssh_opts { # look for a port to use my $ssh_port_switch=""; my $scp_port_switch=""; if ($ENV{BM_UPLOAD_SSH_PORT}) { $ssh_port_switch = "-p ".$ENV{BM_UPLOAD_SSH_PORT}; $scp_port_switch = "-P ".$ENV{BM_UPLOAD_SSH_PORT}; } # look for keyfile to use my $keyfile_switch=""; if (defined $g_key_file and (-e $g_key_file)) { $keyfile_switch = "-i $g_key_file"; } elsif (! (-e $g_key_file)) { print_error "Unable to read the SSH identity key : $g_key_file"; exit E_SCP_FAILED; } return { ssh => "$ssh_port_switch $keyfile_switch -o BatchMode=yes", scp => "$scp_port_switch $keyfile_switch -B" }; } # Purge remote archives over SSH # Uses backup-manager-purge sub ssh_clean_directory { my ($user, $host, $location) = @_; return 0 unless defined $user and defined $host and defined $location; my $ssh_options = get_ssh_opts->{'ssh'}; # the remote time to leave could be different as the local one. my $BM_ARCHIVE_TTL = $ENV{BM_ARCHIVE_TTL}; if (defined $ENV{BM_UPLOAD_SSH_TTL} and length ($ENV{BM_UPLOAD_SSH_TTL})) { $BM_ARCHIVE_TTL = $ENV{BM_UPLOAD_SSH_TTL}; } return 0 unless defined $BM_ARCHIVE_TTL; print_info "Cleaning remote directory through SSH"; # First, create the list of existing archives my ($fh, $in) = get_tempfile('ssh-archives-XXXXXX'); my $cmd = "$ssh $ssh_options $user".'@'.$host." ls $location/*"; my $buffer = `$cmd`; print $fh $buffer; close $fh; my ($fh_out, $out) = get_tempfile('bm-purge-out-ssh-XXXXXX'); system("/usr/bin/backup-manager-purge --ttl=$BM_ARCHIVE_TTL --files-from=$in > $out"); open (STDOUT_CMD, $out); while () { chomp(); print_info "Purging $_"; $cmd = "$ssh $ssh_options $user".'@'.$host." rm -f $_"; system ("$cmd"); } close STDOUT_CMD; undef $fh_out; } # send one file with scp # since Net::SSH is a wrapper to a system call of ssh, I don't use it. sub send_file_with_scp($$$$$) { my ($file, $user, $host, $location, $g_gpg_recipient) = @_; return 0 unless defined $file and defined $user and defined $host and defined $location; my $opts = get_ssh_opts; my ($ssh_opts, $scp_opts) = ($opts->{'ssh'}, $opts->{'scp'}); my $cmd = ""; if ( defined $g_gpg_recipient ) { my $file_base = basename($file); $cmd = "$gpg --encrypt --recipient $g_gpg_recipient --output - --batch $file | "; $cmd .= "$ssh $ssh_opts -e none $user".'@'."$host "; $cmd .= "\"cat - > $location/$file_base.gpg\" >&2"; } else { $cmd = "$scp $scp_opts $file $user".'@'.$host.':'.$location." >&2"; } # we use eval here to avoid crash with bad keys my $ret = eval { system($cmd) }; if ($@ or $ret) { print_error "$scp failed for $file : $@ (command was : $cmd). " if $@; print_error "$scp failed for $file (command was : $cmd)" if $ret; print_error ("Unable to upload \"$file\". ".($! || $@ || $ret)); return 0; } return 1; } # How to upload files with scp. # Note that Key Authentication is used, see man ssh-keygen. sub send_files_with_scp($$$$$) { # getting args my ($user, $ra_hosts, $repository, $ra_files, $g_gpg_recipient) = @_; unless (defined $user and defined $ra_hosts and defined $ra_files and defined $repository) { print_error "required args needed"; return FALSE; } # is scp here ? unless (-x $scp) { print_error "$scp is not here, cannot use this mode for transfer."; return FALSE; } # if gpg requested, is it here? if (defined $g_gpg_recipient and (not -x $gpg)) { print_error "$gpg is not here, cannot use this mode for transfer."; return FALSE; } # if gpg requested, check whether given key is valid if (defined $g_gpg_recipient) { my $gpg_out = `$gpg --batch --list-keys '$g_gpg_recipient' 2>/dev/null`; if ($gpg_out !~ /^pub/mi) { print_error "gpg recipient $g_gpg_recipient is not a valid key, cannot use this mode for transfer."; return FALSE; } } my $opts = get_ssh_opts; my ($ssh_opts, $scp_opts) = ($opts->{'ssh'}, $opts->{'scp'}); # loop on each hosts given and connect to them. foreach my $host (@{$ra_hosts}) { # make sure the target directory exists remotely my $ls_rep_cmd = "$ssh $ssh_opts $user\@$host \"ls $repository\" 2>/dev/null || echo notfound"; my $out = `$ls_rep_cmd`; chomp $out; # if failed, if ($out eq 'notfound') { print_info "Creating $repository on $host"; my $mkdir_rep_cmd = "$ssh $ssh_opts $user\@$host 'mkdir -p $repository' 2>/dev/null || echo failed"; $out = `$mkdir_rep_cmd`; chomp $out; if ($out eq 'failed') { print_error "Unable to create $host:$repository"; return FALSE; } } foreach my $file (@{$ra_files}) { chomp $file; if (-f $file and send_file_with_scp($file, $user, $host, $repository, $g_gpg_recipient)) { print_info "File $file uploaded successfully."; } elsif (! -f $file) { print_error "File $file cannot be uploaded, it does not exist locally."; return FALSE; } else { print_error "Error during the scp upload of $file"; return FALSE; } } # cleaning the repo ssh_clean_directory ($user, $host, $repository) if ($g_sshclean); } return TRUE; } # }}} ############################################################## # FTP Mode ############################################################## # {{{ # Function for testing upload before sending the archives # The test file is uploaded, and its size is compared to the local file. # If the size is correct, the test is successfull and we can continue # with the archives. sub ftp_upload_test_file($) { my $ftp = shift; my $BM_REPOSITORY_ROOT = $ENV{BM_REPOSITORY_ROOT}; my $ftp_test_filename = "2mb_file.dat"; my $file_to_send = $BM_REPOSITORY_ROOT . "/" . $ftp_test_filename; if (!ftp_put_file ($ftp, $file_to_send)) { print_error "Unable to transfer $file_to_send: " . $ftp->message; return FALSE; } else { my $remote_filesize = $ftp->size($ftp_test_filename); # Delete both test files system("rm -f $BM_REPOSITORY_ROOT/$ftp_test_filename"); $ftp->delete($ftp_test_filename); # Test filesize (should be 2MB) if($remote_filesize == 2097152) { return TRUE; } else { print_error "Remote and local test files filesize mismatch"; return FALSE; } } } sub ftptls_upload_test_file($) { my $ftp = shift; my $BM_REPOSITORY_ROOT = $ENV{BM_REPOSITORY_ROOT}; my $ftp_test_filename = "2mb_file.dat"; my $file_to_send = $BM_REPOSITORY_ROOT . "/" . $ftp_test_filename; if (!ftptls_put_file ($ftp, $file_to_send)) { print_error "Unable to transfer $file_to_send: " . $ftp->message; return FALSE; } else { my $remote_filesize = $ftp->size($ftp_test_filename); # Delete both test files system("rm -f $BM_REPOSITORY_ROOT/$ftp_test_filename"); $ftp->delete($ftp_test_filename); # Test filesize (should be 2MB) if($remote_filesize == 2097152) { return TRUE; } else { print_error "Remote and local test files filesize mismatch"; return FALSE; } } } # Function for purging a directory # over FTP, the same way as the repository is purged. # Every files with a date field too old according to BM_UPLOAD_FTP_TTL # will be deleted. sub ftp_clean_directory($) { my $ftp = shift; # the remote time to leave could be different as the local one. my $BM_ARCHIVE_TTL = $ENV{BM_ARCHIVE_TTL}; if (defined $ENV{BM_UPLOAD_FTP_TTL} and length ($ENV{BM_UPLOAD_FTP_TTL})) { $BM_ARCHIVE_TTL = $ENV{BM_UPLOAD_FTP_TTL}; } return 0 unless defined $BM_ARCHIVE_TTL; print_info "Cleaning remote directory through FTP"; # First, create the list of existing archives my ($fh, $filename) = get_tempfile('ftp-archives-XXXXXX'); my $BM_UPLOAD_FTP_SECURE = $ENV{"BM_UPLOAD_FTP_SECURE"}; my $ra_files; if ($BM_UPLOAD_FTP_SECURE eq "true") { $ra_files = $ftp->list(); } else { $ra_files = $ftp->ls(); } foreach my $file (@$ra_files) { print $fh "$file\n"; } close $fh; # Then delete every file listed as "outaded" by backup-manager-purge my ($fh_out, $out) = get_tempfile('bm-purge-out-ftp-XXXXXX'); system ("/usr/bin/backup-manager-purge --ttl=$BM_ARCHIVE_TTL --files-from=$filename > $out"); open (STDOUT_CMD, "<$out"); while () { chomp(); print_info "Purging $_"; $ftp->delete ($_) or print_error "Unable to delete \"$_\"."; } close STDOUT_CMD; undef $fh; return 1; } sub ftp_connect_to_host ($) { my ($host) = @_; my $ftp; # get the passive mode from the configuration # default is set to true. my $BM_UPLOAD_FTP_PASSIVE = $ENV{"BM_UPLOAD_FTP_PASSIVE"}; unless (defined $BM_UPLOAD_FTP_PASSIVE) { $BM_UPLOAD_FTP_PASSIVE = "true"; } if ($BM_UPLOAD_FTP_PASSIVE eq "true") { $BM_UPLOAD_FTP_PASSIVE="1"; } elsif ($BM_UPLOAD_FTP_PASSIVE eq "false") { $BM_UPLOAD_FTP_PASSIVE="0"; } else { print_error "Unsupported value for BM_UPLOAD_FTP_PASSIVE : $BM_UPLOAD_FTP_PASSIVE"; return undef; } # trying to get Net::FTP. eval "use Net::FTP"; if ($@) { print_error "Net::FTP is not available, cannot use ftp transfer mode"; return undef; } eval { $ftp = new Net::FTP ( $host, Debug => 0, Passive => $BM_UPLOAD_FTP_PASSIVE); }; if ($@) { print_error "Unable to use the Net::FTP Perl module : $@"; return undef; } return $ftp; } sub ftptls_connect_to_host ($) { my ($host) = @_; my $ftp; eval "use Net::Lite::FTP"; if ($@) { print_error "Net::Lite::FTP is not available, cannot use ftp secured transfer mode"; return undef; } eval { $ftp = Net::Lite::FTP->new (); $ftp->open ($host, "21"); }; if ($@) { print_error "Unable to use the Net::Lite::FTP Perl module : $@"; return undef; } return $ftp; } # How to upload files with ftp. # We'll use the Net::FTP or the Net::Lite::FTP (for secured mode) module here. # Net::Lite::FTP can be found here : # http://search.cpan.org/~eyck/Net-Lite-FTP-0.45/lib/Net/Lite/FTP.pm sub send_files_with_ftp($$$$$) { # getting args my ($user, $passwd, $ra_hosts, $repository, $ra_files) = @_; unless (defined $user and defined $passwd and defined $ra_hosts and defined $ra_files and defined $repository) { print_error "required args needed"; return FALSE; } # get the secure mode from the configuration # default is set to false. my $BM_UPLOAD_FTP_SECURE = $ENV{"BM_UPLOAD_FTP_SECURE"}; unless (defined $BM_UPLOAD_FTP_SECURE) { $BM_UPLOAD_FTP_SECURE = "false"; } if ($BM_UPLOAD_FTP_SECURE eq "true") { $BM_UPLOAD_FTP_SECURE="1"; } elsif ($BM_UPLOAD_FTP_SECURE eq "false") { $BM_UPLOAD_FTP_SECURE="0"; } else { print_error "Unsupported value for BM_UPLOAD_FTP_SECURE : $BM_UPLOAD_FTP_SECURE"; return FALSE; } # loop on each hosts given and connect to them. foreach my $host (@{$ra_hosts}) { my $ftp; # The FTP over TLS transfer mode if ($BM_UPLOAD_FTP_SECURE) { $ftp = ftptls_connect_to_host ($host); unless (defined $ftp) { print_error "Unable to connect to host: $host"; return FALSE; } unless (ftptls_login($ftp, $user, $passwd)) { print_error "unable to login on ${host} in FTP TLS mode."; return FALSE; } unless (ftptls_cwd($ftp, $repository)) { print_info "The directory ${repository} does not exist, trying to create it."; unless (ftptls_mkdir($ftp, $repository)) { print_error "unable to create directory ${repository} in FTP TLS mode: " . $ftp->message; return FALSE; } } print_info "Logged on $host, in $repository (FTP TLS mode)"; } # The unencrypted FTP transfers else { $ftp = ftp_connect_to_host ($host); unless (defined $ftp) { print_error "Unable to connect to host: $host"; return FALSE; } unless (ftp_login($ftp, $user, $passwd)) { print_error "unable to login on ${host} in FTP mode."; return FALSE; } unless (ftp_cwd($ftp, $repository)) { print_info "The directory ${repository} does not exist, trying to create it."; unless (ftp_mkdir($ftp, $repository)) { print_error "unable to create directory ${repository} in FTP mode: " . $ftp->message; return FALSE; } } print_info "Logged on $host, in $repository (FTP binary mode)"; } # Now that we're connected and logged in, test an upload if needed if ($g_ftptest) { if ($BM_UPLOAD_FTP_SECURE) { unless (ftptls_upload_test_file($ftp)) { print_error "Unable to transfer test file"; return FALSE; } } else { unless (ftp_upload_test_file($ftp)) { print_error "Unable to transfer test file"; return FALSE; } } } # Now that we're connected and logged in, purge the repo if needed if ($g_ftpclean) { unless (ftp_clean_directory($ftp)) { print_error "Unable to clean the FTP directory."; } } # Put all the files over the connexion foreach my $file (@{$ra_files}) { chomp $file; if ($BM_UPLOAD_FTP_SECURE) { if (!ftptls_put_file ($ftp, $file)) { print_error "Unable to transfer $file"; return FALSE; } else { print_info "File $file transfered\n"; } } else { if (!ftp_put_file ($ftp, $file)) { print_error "Unable to transfer $file: " . $ftp->message; return FALSE; } else { print_info "File $file transfered\n"; } } } print_info "All transfers done, loging out from $host\n"; $ftp->quit; } return TRUE; } sub ftp_login ($$$) { my ($ftp, $user, $passwd) = @_; return ($ftp->login($user, $passwd) and $ftp->binary()); } sub ftptls_login ($$$) { my ($ftp, $user, $passwd) = @_; return ($ftp->user($user) and $ftp->pass($passwd)); } sub ftp_cwd ($$) { my ($ftp, $repository) = @_; return ($ftp->cwd($repository)); } sub ftptls_cwd ($$) { my ($ftp, $repository) = @_; return ($ftp->cwd($repository)); } sub ftp_mkdir ($$) { my ($ftp, $repository) = @_; return ($ftp->mkdir($repository)); } sub ftptls_mkdir ($$) { my ($ftp, $repository) = @_; return ($ftp->mkdir($repository)); } sub ftp_put_file ($$) { my ($ftp, $file) = @_; return $ftp->put ($file); } sub ftptls_put_file ($$) { my ($ftp, $file) = @_; my $basename = basename ($file); return $ftp->put ($basename, $file); } # }}} ############################################################## # Amazon S3 Mode ############################################################## # {{{ # Function for purging a directory # from S3, the same way as the repository is purged. # Every files with a date field too old according to BM_ARCHIVE_TTL # will be deleted. sub s3_clean_directory($) { my ($bucket) = @_; my $BM_ARCHIVE_TTL = $ENV{BM_ARCHIVE_TTL}; return 0 unless defined $BM_ARCHIVE_TTL; my $date_to_remove = `date +%Y%m%d --date "$BM_ARCHIVE_TTL days ago"`; chomp $date_to_remove; my $response = $bucket->list; my @keys = @{ $response->{keys} }; foreach my $key (@keys) { my $date = undef; if ($key->{key} =~ /[\.\-](\d{8})\./) { $date = $1; if ($date and ($date <= $date_to_remove)) { print_info $key->{key} . " has to be deleted, too old ($date <= $date_to_remove)."; $bucket->delete_key( $key->{key} ); } } } return 1; } # How to upload files to s3. # We'll use the Net::Amazon::S3 module here. sub send_files_with_s3($$$$$$) { # trying to get Net::Amazon::S3. eval "use Net::Amazon::S3"; if ($@) { print_error "Net::Amazon::S3 is not available, cannot use S3 service : $@"; return FALSE; } if ($Net::Amazon::S3::VERSION < '0.39') { print_error "Net::Amazon::S3 >= 0.39 is required, but version ${Net::Amazon::S3::VERSION} was found, cannot use S3 service"; return FALSE; } # getting args my ($user, $passwd, $bucket, $ra_hosts, $repository, $ra_files) = @_; unless (defined $user and defined $passwd and defined $bucket and defined $ra_hosts and defined $ra_files and defined $repository) { print_error "required args needed"; return FALSE; } my $totalbytes = 0; my $starttime = time(); my %uploaded; my $backup_bucket; # loop on each hosts given and connect to them. foreach my $host (@{$ra_hosts}) { my $s3 = Net::Amazon::S3->new( { aws_access_key_id => $user, aws_secret_access_key => $passwd, timeout => 300 } ); unless (defined $s3) { print_error "unable to connect to $host : $@\n"; return FALSE; } print_info "Connected to $host"; my $bucket_obj = $s3->bucket($bucket); my $response = $bucket_obj->list; if (not ( $response->{bucket} ) ) { print_info "Bucket $bucket does not exist... creating"; $bucket_obj = $s3->add_bucket( { bucket => $bucket } ); print_error "Could not create bucket $bucket" if not ( $bucket_obj ); } s3_clean_directory($bucket_obj) if ($g_s3clean); foreach my $file (@{$ra_files}) { chomp $file; my @splits = $file; if( stat($file)->size > $g_s3max_size ) { my $split_prefix = "$file-split-"; my $cmd = "$split -b $g_s3max_size $file $split_prefix"; if( system($cmd) != 0 ) { print_error "Could not run '$cmd' to split $file into chunks of size $g_s3max_size"; next; } else { @splits = glob("$split_prefix*"); } } for my $split (@splits) { my $filename = basename($split); my $file_length = stat($split)->size; print_info "opened $split of length $file_length and will name the key $filename"; $totalbytes += $file_length; $bucket_obj->add_key_filename( $filename, $split, { content_type => "application/binary" } ); $uploaded{$filename} = $file_length; } } # get a list of files and confirm uploads $response = $bucket_obj->list; my @keys = @{ $response->{keys} }; foreach my $key ( @keys ) { if (not defined $uploaded{$key->{key}}) { next; } if ($key->{size} == $uploaded{$key->{key}}) { print_info $key->{key} . " uploaded sucessfully"; delete $uploaded{$key->{key}}; } else { print_error $key->{key} . " did not upload sucessfully. S3 reports $key is " . $key->{size} . " bytes rather than " . $uploaded{$key->{key}}; delete $uploaded{$key->{key}}; return FALSE; } } } print_info ("Uploaded $totalbytes bytes of data to S3 in " . (time() - $starttime) . " seconds"); return TRUE; } # }}} ############################################################## # Main ############################################################## # {{{ # date is always the last args. my $date = $ARGV[$#ARGV]; $date = 'today' if (not defined $date or $date =~ /^-/); # the really needed args ! unless (defined $g_host and defined $g_user and defined $g_protocol) { print $BackupManager::Config::usage, "\n"; exit E_INVALID; } if ($g_protocol eq 'ftp' and not defined $g_pass) { # try to read the password from the environment if (defined $ENV{BM_UPLOAD_FTP_PASSWORD}) { $g_pass = $ENV{BM_UPLOAD_FTP_PASSWORD}; } else { print $BackupManager::Config::usage, "\n"; exit E_INVALID; } } if ($g_protocol eq 's3' and (not defined $g_bucket or not defined $g_pass)) { if (! defined $g_pass && defined $ENV{BM_UPLOAD_S3_SECRET_KEY}) { $g_pass = $ENV{BM_UPLOAD_S3_SECRET_KEY}; } else { print $BackupManager::Config::usage, "\n"; exit E_INVALID; } } if ($g_protocol eq 'ssh-gpg' and (not defined $g_gpg_recipient)) { print $BackupManager::Config::usage, "\n"; exit E_INVALID; } # storing hosts on memory my $ra_hosts = get_hosts_from_str($g_host); # where to store archives... $g_remote_dir = "/backup/uploads/" if (not defined $g_remote_dir); # let's find which files needs to be uploaded. my $ra_files = get_files_list_from_date(get_formated_date($date)); # if user wants listing, just do it ! if ($g_list) { print_info "files to upload ($date) :"; foreach my $file (@{$ra_files}) { print "- $file\n"; } exit E_SUCCESS; } # We'll now send the files with the appropriate transfer protocol $g_protocol = lc $g_protocol; # FTP if ($g_protocol eq 'ftp') { print_info "Trying to upload files with ftp"; if (! send_files_with_ftp ($g_user, $g_pass, $ra_hosts, $g_remote_dir, $ra_files)) { print_error "The upload transfer \"$g_protocol\" failed."; exit E_FTP_FAILED; } } # SSH related tranfers elsif ($g_protocol eq 'scp' or $g_protocol eq 'ssh' or $g_protocol eq 'ssh-gpg') { if ($g_protocol eq 'ssh-gpg') { print_info "Trying to upload files with ssh-gpg"; } else { $g_gpg_recipient = undef; print_info "Trying to upload files with scp"; } if (! send_files_with_scp ($g_user, $ra_hosts, $g_remote_dir, $ra_files, $g_gpg_recipient)) { print_error "The upload transfer \"$g_protocol\" failed."; exit E_SCP_FAILED; } } # Amazon S3 WebService elsif ($g_protocol eq 's3') { print_info "Trying to upload files to s3 service"; if (! send_files_with_s3 ($g_user, $g_pass, $g_bucket, $ra_hosts, $g_remote_dir, $ra_files)) { print_error "The upload transfer \"$g_protocol\" failed."; exit E_S3_FAILED; } } # Unknown protocol else { print STDERR "mode '$g_protocol' is not supported\n"; exit E_UNKNOWN; } __END__ =head1 NAME backup-manager-upload - Multiprotocol uploader for backup-manager. =head1 SYNOPSIS backup-manager-upload [options] date =head1 DESCRIPTION B will upload all the archives generated on the given date to the specified host with either ftp or scp. It's also possible to use this program for uploading data to an Amazon S3 account. Some metadates are available like "today" or "yesterday". =head1 REQUIRED ARGS =over 4 =item B<--mode=>I Select the transfer mode to use : ftp, scp, or s3. =item B<--host=>I Select a list of remote hosts to connect to. =item B<--user=>I Select the user to use for connection. =back =head1 OPTIONAL ARGS =over 4 =item B<--password=>I Select the ftp user's password (only needed for ftp transfers). =item B<--key=>I Select the ssh private key file to use when opening the ssh session for scp transfer. Obviously, this is only needed for scp transfer mode. If you don't specify a key file, the user's default private key will be used. =item B<--directory=>I Select the location on the remote host where files will be uploaded. Default is /backup/uploads. =item B<--bucket=>I Sets the bucket name for the Amazon S3 service backup into. =item B<--root=>I Select the local directory where files are. Default is /var/archives =item B<--gpg-recipient=>I Select the gpg public key for encryptiong the archives when uploading with the method ssh-gpg. This can be a short or long key id or a descriptive name. The precise syntax is described in the gpg man page. =item B<--list> Just list the files to upload. =item B<--ftp-purge> Purge the remote directory before uploading files in FTP mode. =item B<--s3-purge> Purge the remote directory before uploading files in FTP mode. =item B<--ssh-purge> Purge the remote directory before uploading files in SSH mode. =item B<--verbose> Flag to enable verbose mode. =item B Date pattern to select some files to upload, can be a valid date (YYYYMMDD) or 'today' or 'yesterday'. =back =head1 ERROR CODES If something goes wrong during an upload, backup-manager-upload will exit with a non null value. In such a case every error messages are sent to STDERR. Here are the possible error codes: =over 4 =item bad command line (wrong arguments) : 10 =item FTP transfer failure : 20 =item SCP transfer failure : 21 =item S3 transfer failure : 22 =item Unknown upload method: 23 =back =cut =head1 SEE ALSO L =head1 AUTHORS Alexis Sukrieh - main code and design Brad Dixon - Amazon S3 upload method Jan Metzger - ssh-gpg upload method =cut Backup-Manager-0.7.10.1/.gitignore0000644000175000017500000000000711503702461016033 0ustar alexisalexist/test Backup-Manager-0.7.10.1/man/0000755000175000017500000000000011503702461014621 5ustar alexisalexisBackup-Manager-0.7.10.1/man/backup-manager-upload.80000644000175000017500000001660511503702461021061 0ustar alexisalexis.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "BACKUP-MANAGER-UPLOAD 8" .TH BACKUP-MANAGER-UPLOAD 8 "2009-02-01" "perl v5.10.0" "backup-manager-upload" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" backup\-manager\-upload \- Multiprotocol uploader for backup\-manager. .SH "SYNOPSIS" .IX Header "SYNOPSIS" backup-manager-upload [options] date .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBbackup-manager-upload\fR will upload all the archives generated on the given date to the specified host with either ftp or scp. It's also possible to use this program for uploading data to an Amazon S3 account. Some metadates are available like \*(L"today\*(R" or \*(L"yesterday\*(R". .SH "REQUIRED ARGS" .IX Header "REQUIRED ARGS" .IP "\fB\-\-mode=\fR\fItransfer-mode\fR" 4 .IX Item "--mode=transfer-mode" Select the transfer mode to use : ftp, scp, or s3. .IP "\fB\-\-host=\fR\fIhostname1,hostname2,...,hostnameN\fR" 4 .IX Item "--host=hostname1,hostname2,...,hostnameN" Select a list of remote hosts to connect to. .IP "\fB\-\-user=\fR\fIusername\fR" 4 .IX Item "--user=username" Select the user to use for connection. .SH "OPTIONAL ARGS" .IX Header "OPTIONAL ARGS" .IP "\fB\-\-password=\fR\fIpassword\fR" 4 .IX Item "--password=password" Select the ftp user's password (only needed for ftp transfers). .IP "\fB\-\-key=\fR\fIpath_to_private_key\fR" 4 .IX Item "--key=path_to_private_key" Select the ssh private key file to use when opening the ssh session for scp transfer. Obviously, this is only needed for scp transfer mode. If you don't specify a key file, the user's default private key will be used. .IP "\fB\-\-directory=\fR\fIdirectory\fR" 4 .IX Item "--directory=directory" Select the location on the remote host where files will be uploaded. Default is /backup/uploads. .IP "\fB\-\-bucket=\fR\fIbucket\fR" 4 .IX Item "--bucket=bucket" Sets the bucket name for the Amazon S3 service backup into. .IP "\fB\-\-root=\fR\fIdirectory\fR" 4 .IX Item "--root=directory" Select the local directory where files are. Default is /var/archives .IP "\fB\-\-gpg\-recipient=\fR\fIgpg-recipient\fR" 4 .IX Item "--gpg-recipient=gpg-recipient" Select the gpg public key for encryptiong the archives when uploading with the method ssh-gpg. This can be a short or long key id or a descriptive name. The precise syntax is described in the gpg man page. .IP "\fB\-\-list\fR" 4 .IX Item "--list" Just list the files to upload. .IP "\fB\-\-ftp\-purge\fR" 4 .IX Item "--ftp-purge" Purge the remote directory before uploading files in \s-1FTP\s0 mode. .IP "\fB\-\-s3\-purge\fR" 4 .IX Item "--s3-purge" Purge the remote directory before uploading files in \s-1FTP\s0 mode. .IP "\fB\-\-ssh\-purge\fR" 4 .IX Item "--ssh-purge" Purge the remote directory before uploading files in \s-1SSH\s0 mode. .IP "\fB\-\-verbose\fR" 4 .IX Item "--verbose" Flag to enable verbose mode. .IP "\fBdate\fR" 4 .IX Item "date" Date pattern to select some files to upload, can be a valid date (\s-1YYYYMMDD\s0) or 'today' or 'yesterday'. .SH "ERROR CODES" .IX Header "ERROR CODES" If something goes wrong during an upload, backup-manager-upload will exit with a non null value. In such a case every error messages are sent to \&\s-1STDERR\s0. .PP Here are the possible error codes: .IP "bad command line (wrong arguments) : 10" 4 .IX Item "bad command line (wrong arguments) : 10" .PD 0 .IP "\s-1FTP\s0 transfer failure : 20" 4 .IX Item "FTP transfer failure : 20" .IP "\s-1SCP\s0 transfer failure : 21" 4 .IX Item "SCP transfer failure : 21" .IP "S3 transfer failure : 22" 4 .IX Item "S3 transfer failure : 22" .IP "Unknown upload method: 23" 4 .IX Item "Unknown upload method: 23" .PD .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIbackup\-manager\fR\|(3) .SH "AUTHORS" .IX Header "AUTHORS" Alexis Sukrieh \- main code and design .PP Brad Dixon \- Amazon S3 upload method .PP Jan Metzger \- ssh-gpg upload method Backup-Manager-0.7.10.1/man/backup-manager.80000644000175000017500000000442511503702461017574 0ustar alexisalexis.TH backup-manager 8 .SH NAME backup-manager - An easy to use backup tool for your Linux box. .SH SYNOPSIS backup-manager [options] .SH DESCRIPTION Backup Manager is an easy-to-use tool for generating archives. .P It is designed with simplicity in mind for those who don't want an obfuscated tool for making tarballs. .P There are different methods for building archives: tarballs, incremental tarballs, mysql dumps, svn dump. You can also write your own method with a generic method that will execute a command and will archive its output. .P Every times you run Backup Manager, you can upload archives thanks to a couple of upload methods: through FTP, SSH or even with RSYNC. .P It's also possible to export your archives to removable media like CDR or DVD. .SH CONFIGURATION FILES Backup Manager's behavior is defined in configuration files. You can use different configuration files at the same time. The default configuration file is `/etc/backup-manager.conf'. .P An example should have been provided with the program, most of the time it's installed in `/usr/share/backup-manager/backup-manager.conf.tpl'. .P If you want exhaustive details about how to write your own configuration files, please refer to the Backup Manager User Guide: http://www.backup-manager.org/documentation/user-guide/ .SH OPTIONS .P .B --version Show the version number. .P .B --verbose|-v Print what happens to STDOUT. .P .B --no-warnings Disable warnings. .P .B --help|-h Print a short help message. .P .B --upload|-u Just upload the files. .P .B --purge|-p Just purge old archives. .P .B --burn|-b Just burn the archives. .P .B --md5check|-m Just perform the MD5 checkup on the CDR/CDRW. .P .B --conffile|-c file Use an alternate config file. .P .B --force|-f Force overwrite of existing archives. .P .B --no-upload Disable the uploading process. .P .B --no-burn Disable the burning process. .P .B --no-purge Disable the purging process. .SH BUGS If you find a bug or want to submit a wish-list to the development team, feel free to use the official Bug Tracking System: http://bugzilla.backup-manager.org .SH WEBSITE To find latest news and releases, come to the official website: http://www.backup-manager.org .SH SEE ALSO .BR backup-manager-upload (8), .BR ssh-keygen (1) .SH AUTHOR Alexis Sukrieh Backup-Manager-0.7.10.1/doc/0000755000175000017500000000000011503702461014613 5ustar alexisalexisBackup-Manager-0.7.10.1/doc/README.dbus0000644000175000017500000000232211503702461016426 0ustar alexisalexisWarning: These interfaces are still experimental and are subject to change. backup-manager supports reporting its activity over dbus. Programs wanting to be notified should listen to these messages of the org.backupmanager.BackupManager interface : * ProgressNotify (int32 percentage, string label) * EventNotify (string event_name, string argument) * LogMessageNotify (string level, string message) Depending on who launched backup-manager (root or user), these messages are sent from the following bus objects : * /org/backupmanager/instance/SystemInstance of the system bus if launched by root. * /org/backupmanager/instance/UserInstance/${USERNAME} of the user session bus if launched by a regular user. If the dbus-send program is not in $PATH, or if the selected bus is unreachable, backup-manager should operate as normal, just not reporting its activity. To test, just launch, in two different terminals for better readability: * as root : # dbus-monitor --system \ "type='signal',interface='org.backupmanager.BackupManager'" # backup-manager [...] # as usual * or as a user : $ dbus-monitor --session \ "type='signal',interface='org.backupmanager.BackupManager'" $ backup-manager [...] # as usual Backup-Manager-0.7.10.1/doc/version.ent0000644000175000017500000000007111503702461017006 0ustar alexisalexis Backup-Manager-0.7.10.1/doc/Makefile0000644000175000017500000000103311503702461016250 0ustar alexisalexis BASE = user-guide SOURCE = $(BASE).sgml DEST = $(DESTDIR)/usr/share/backup-manager/doc all: pdf txt html install: all install -d $(DEST) install -m 0644 $(BASE).pdf $(DEST) install -d $(DEST)/$(BASE).html cp $(BASE).html/*html $(DEST)/$(BASE).html install -m 0644 $(BASE).txt $(DEST) pdf: user-guide.pdf user-guide.pdf: debiandoc2pdf $(SOURCE) txt: user-guide.txt user-guide.txt: debiandoc2text $(SOURCE) html: user-guide.html user-guide.html: debiandoc2html $(SOURCE) clean: rm -f *.pdf *.txt *.tpt rm -rf $(BASE).html Backup-Manager-0.7.10.1/doc/user-guide.txt0000644000175000017500000017344711503702461017445 0ustar alexisalexis Backup Manager 0.7.7 User Guide ------------------------------- Alexis Sukrieh 1.7 - 14 Apr, 2008 ------------------------------------------------------------------------------- Copyright Notice ---------------- copyright (C) 2010 Alexis Sukrieh This user guide is free software; you may redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This is distributed in the hope that it will be useful, but _without any warranty_; without even the implied warranty of was merchantability or fitness for a particular purpose. See the GNU General Public License for more details. A copy of the GNU General Public License is available on the World Wide Web at the GNU web site (http://www.gnu.org/copyleft/gpl.html). You can also obtain it by writing to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ------------------------------------------------------------------------------- Contents -------- 1. About this manual 1.1. Scope 1.2. Version 1.3. Authors 2. Configuration files 2.1. Repository and Archives 2.1.1. The Repository 2.1.2. Encryption 2.1.3. Archives 2.2. Backup Methods 2.2.1. Tarballs 2.2.2. Incremental tarballs 2.2.3. MySQL databases 2.2.4. Subversion repositories 2.2.5. Generic methods 2.3. Upload Methods 2.3.1. Description 2.3.2. Global configuration keys 2.3.3. SSH uploads 2.3.4. Encrypted SSH uploads 2.3.5. FTP uploads 2.3.6. Amazon S3 uploads 2.3.7. RSYNC uploads 2.4. Exports 2.4.1. Burning CDR/DVD media 2.5. Advanced features 2.5.1. `BM_TEMP_DIR' 2.5.2. Logging to syslog 2.5.3. Writing external hooks 3. Using Backup Manager 3.1. Command line 3.1.1. Restrictions 3.1.2. Options 3.2. CRON integration ------------------------------------------------------------------------------- 1. About this manual -------------------- 1.1. Scope ---------- Backup Manager is a system tool designed to handle backups. It is written with simplicity in mind. If you want to handle a couple of tarballs, reading the default configuration file might be enough to understand the main design. On the other hand, if you want to know more about the global design of the program, how to write your own backup methods or even look at some real life examples, this guide is for you. This document describes the main design of the software and gives information about supported configuration keys. All backup methods are described, with a sample configuration file as illustration. Whenever possible, advices and best practices are given. This manual also describes every configuration variables supported in the version 0.7.7. 1.2. Version ------------ This document is updated whenever a new release of Backup Manager is published. The current version covers all features and configuration details about version 0.7.7. The first version of this document was written with the release 0.6 of Backup Manager. 1.3. Authors ------------ The first version of this document was made in late 2005, by Alexis Sukrieh and has been reviewed by Sven Joachim. While the author of this document has tried hard to avoid typos and other errors, these do still occur. If you discover an error in this manual or if you want to give any comments, suggestions, or criticisms please send an email to the development list, backup-manager-devel@backup-manager.org, or submit a bug report against the "Documentation" product, in the bug tracking system[1]. [1] http://bugzilla.backup-manager.org/ ------------------------------------------------------------------------------- 2. Configuration files ---------------------- _Backup Manager's behaviour is defined in configuration files. You can run Backup Manager with different configuration files (at the same time or not). This chapter will cover all the configuration keys supported in version 0.7.7 and will explain their meaning._ 2.1. Repository and Archives ---------------------------- Backup Manager stores _archives_ it builds in a _repository_. _Archives_ are built by using a _backup method_. 2.1.1. The Repository --------------------- 2.1.1.1. `BM_REPOSITORY_ROOT' ----------------------------- _Type: string, default: `/var/archives'._ The repository is the place in your filesystem where all archives are stored. This is a particular place for Backup Manager, it will be cleaned during backup sessions: archives older than the authorized lifetime will be purged. If the repository does not exist, it will be created at runtime. Isolating the repository on a dedicated partition is a good idea. This can prevent the repository from eating all the disk space of the partition. With a bad configuration file, backup sessions can lead to huge archives, for many reasons, so take care. Example: export BM_REPOSITORY_ROOT="/var/archives" 2.1.1.2. `BM_REPOSITORY_SECURE' ------------------------------- _Type: boolean, default: `true'._ For security reasons, the repository can be accessible by a specific user/group pair. This will prevent the archives from being readable (and writable) by any user in the system. This mode is enabled by default (owned by `root:root'). To enable this mode, set the configuration key `BM_REPOSITORY_SECURE' to `yes', then update `BM_REPOSITORY_USER' and `BM_REPOSITORY_GROUP' to your needs. You can also change the permission of the repository and the archives, that is possible with two configuration variables: `BM_REPOSITORY_CHMOD' and `BM_ARCHIVE_CHMOD'. Example: export BM_REPOSITORY_SECURE="true" export BM_REPOSITORY_USER="root" export BM_REPOSITORY_GROUP="root" export BM_REPOSITORY_CHMOD="770" export BM_ARCHIVE_CHMOD="660" 2.1.2. Encryption ----------------- _If you cannot trust the place where you store your archives, you can choose to encrypt them so you are the only one who can read their content. That's a very good idea for archives you plan to upload to some remote place, or even for the archives you want to daily export on removable media._ 2.1.2.1. `BM_ENCRYPTION_METHOD' ------------------------------- _Type: string, default: undefined._ For Backup Manager, encryption is defined in one place in the configuration file. If the variable "`BM_ENCRYPTION_METHOD'" is not defined, no encryption occurs during the archive build process, if a method is defined there, then any archive built are encrypted through a pipeline with that method. Be aware that encryption is supported for the methods "mysql", "pipe", "tarball" and "tarball-incremental" but only for those file types: tar, tar.gz, tar.bz2. The only valid method supported for encrypting archives is "gpg". Backup Manager will encrypt your archive through a pipeline in order not to write any byte of unencrypted data on the physical media. The encryption will be performed with a command line like the following: | gpg -r "$BM_ENCRYPTION_RECIPIENT" -e > archive.gpg To decrypt an archive built with GPG encryption, you have to be the owner of the private GPG key for which the encryption was made. Then issue the following: $ gpg -d > archive GPG will then prompt you for the private key passphrase and will decrypt the content of the archive if the passphrase is valid. Refer to the GPG documentation for more details of encryption. 2.1.2.2. `BM_ENCRYPTION_RECIPIENT' ---------------------------------- _Type: string, default: undefined._ As explained in the previous section, that variable should contain the GPG recipient for the encryption, eg: your GPG ID. Examples of valid GPG ID: export BM_ENCRYPTION_RECIPIENT="0x1EE5DD34" export BM_ENCRYPTION_RECIPIENT="Alexis Sukrieh" export BM_ENCRYPTION_RECIPIENT="sukria@sukria.net" 2.1.3. Archives --------------- _Archives are produced by backup methods, they can be virtually anything, but will always be named like the following: `prefix-name-date.filetype'. An archive is a file that contains data, it can be compressed or not, in a binary form or not._ 2.1.3.1. `BM_ARCHIVE_STRICTPURGE' --------------------------------- _Type: boolean, default: `true'._ As explained in the BM_REPOSITORY_ROOT section, every archive built by Backup Manager will be purged when their lifetime expires. In versions prior to 0.7.6, any archive were purged. You can now choose to purge only the archive built in the scope of the configuration file, that is: archives prefixed with BM_ARCHIVE_PREFIX. This is useful if you share the same BM_REPOSITORY_ROOT with different instances of Backup Manager that have different purging rules (eg: a BM_REPOSITORY_ROOT shared over NFS for multiple Backup Manager configuration). Example: export BM_ARCHIVE_STRICTPURGE="true" 2.1.3.2. `BM_ARCHIVE_NICE_LEVEL' -------------------------------- _Type: string, default: `10'._ Backup Manager does handle several archive methods, which can use a lot of ressources (mostly CPU); although this can be acceptable if Backup Manager is run at night, on a always-running server, it can seriously slow-down a desktop computer. Indeed, most of the time, desktop users use anacron to run backup-manager when possible, and most of time this is when the desktop is actually used. To enhance the desktop-experience when archives are built, you can adjust the niceness used for archive creation with this configuration variable. To set a low priority to the archive creation processes, use a high number (max: 19). See the manpage of nice for details. Example: export BM_ARCHIVE_PURGEDUPS="19" # recommanded for desktop users. 2.1.3.3. `BM_ARCHIVE_PURGEDUPS' ------------------------------- _Type: boolean, default: `true'._ If disk usage matters in your backup strategy, you might find useful to use Backup Manager's duplicates purging feature. When an archive is generated, Backup Manager looks at the previous versions of this archive. If it finds that a previous archive is the same file as the one it has just built, the previous one is replaced by a symlink to the new one. This is useful if you don't want to have the same archive twice in the repository. Example: export BM_ARCHIVE_PURGEDUPS="true" host-etc.20051115.tar.gz host-etc.20051116.tar.gz -> /var/archives/host-etc.20051117.tar.gz host-etc.20051117.tar.gz 2.1.3.4. `BM_ARCHIVE_TTL' ------------------------- _Type: integer, default: `5'._ One of the main concepts behind the handling of the repository is to purge deprecated archives automatically. The purge session is always performed when you launch Backup Manager. During this phase, all archives older than the authorized lifetime are dropped. Since version 0.7.3, Backup Manager purges only files it has created whereas in previous versions, it used to purge also other files within the repository. Note that when using the incremental method for building archives, Backup Manager will handle differently master backups and incremental ones. The incremental backups will be purged like any other archives (when exceeding the authorized lifetime). On the ohter hand, deprecated master backups won't be purged unless there is a younger master backup in the repository. Then, even with a lifetime set to three days, a master backup will live more than three days, until a newer master backup is built. Example: export BM_ARCHIVE_TTL="5" 2.1.3.5. `BM_REPOSITORY_RECURSIVEPURGE' --------------------------------------- _Type: boolean, default: `false'._ On most setups, all the archives are stored in the top-level directory specified by the configuration key `BM_REPOSITORY_ROOT'. But it can make sense to have subdirectories, for instance to store archives uploaded from other hosts running Backup Manager. In this case, it is possible to ask Backup Manager to purge those directories too, by setting `BM_REPOSITORY_RECURSIVEPURGE' to `true'. Please note that the `BM_ARCHIVE_TTL' value is global, so if you want to have different lifetimes for some archives, this is not the way to go. In this case you should save them outside `BM_REPOSITORY_ROOT' and write a cron job to do the purge (possibly calling `backup-manager --purge' with an alternate configuration file). Example: export BM_REPOSITORY_RECURSIVEPURGE="false" 2.1.3.6. `BM_ARCHIVE_PREFIX' ---------------------------- _Type: string, default: `$HOSTNAME'._ This is the prefix used for naming archives. Example: export BM_ARCHIVE_PREFIX="$HOSTNAME" # echo $HOSTNAME ouranos # ls /var/archives ouranos-20051123.md5 ouranos-usr-local-src.20051123.tar.gz ouranos-etc.20051123.tar.gz 2.2. Backup Methods ------------------- The core feature of Backup Manager is to make archives, for doing this, a _method_ is used. Each method can require a set of configuration keys. We will describe here every method supported in the version 0.7.7. The method you choose must be defined in the configuration key `BM_ARCHIVE_METHOD'. You can put here a list of all the different methods you want to use. Take care to put every configuration key needed by all the methods you choose. Note that you can also choose none of the proposed methods, if you don't want to build archives with this configuration file, then just put `none'. A couple of other configuration keys may be needed depending on the method you choose. Example: export BM_ARCHIVE_METHOD="tarball-incremental mysql" 2.2.1. Tarballs --------------- 2.2.1.1. Description -------------------- _Method name: `tarball', configuration key prefix: `BM_TARBALL'._ If all you want to do is to handle a couple of tarballs of your file system, you can use this method. This method takes a list of directories and builds the corresponding tarballs. This method is the default one, this is the easiest to use, it just builds tarballs as you could do with your own tar script. Its main drawback is to eat a lot of disk space: archives can be big from a day to another, even if there are no changes in their content. See the `tarball-incremental' method if you want to optimize archives' size. When building full backups (when not building incremental ones), Backup Manager will append the keyword "master" to the name of the archive. This is very useful when using the `tarball-incremental' method for seeing where the full backups are quickly. A couple of options are available: the name format of the archive, the compression type (gzip, zip, bzip2, none) and the facility to dereference symlinks when building the tarball. 2.2.1.2. `BM_TARBALL_NAMEFORMAT' -------------------------------- This configuration key defines how to perform the naming of the archive. Two values are possible: * `long': the name will be made with the absolute path of the directory (eg: `var-log-apache' for `/var/log/apache'). * `short': the name will just contain the directory (eg: `apache' for `/var/log/apache'). Suggested value: `long'. 2.2.1.3. `BM_TARBALL_FILETYPE' ------------------------------ _Type: enum(tar, tar.gz, tar.bz2, tar.lz, zip, dar), default: `tar.gz'._ Basically, this configuration key defines the filetype of the resulting archive. In a way, it defines which compressor to use (zip, gzip, dar or bzip2). Here are the supported values: `tar', `tar.gz', `tar.bz2', `zip' and `dar'. Note that depending on the filetype you choose, you will have to make sure you have the corresponding compressor installed. For the best compression rate, choose `tar.bz2' or `tar.lz'. Since version 0.7.1, Backup Manager supports _dar_ archives. This archiver provides some interesting features like the archive slicing. Since version 0.7.5, Backup Manager supports _lzma_ archives. Make sure to statisfy dependencies according to the filetype you choose: * tar.bz2 : needs "bzip2". * tar.lz : needs "lzma". * dar : needs "dar". * zip : needs "zip". 2.2.1.4. `BM_TARBALL_SLICESIZE' ------------------------------- _Type: string_ If you want to make sure your archives won't exceed a given size (for instance 2 GB) you can use that configuration variable, but only if you are using the `dar' `BM_TARBALL_FILETYPE'. Indeed this feature is only supported by dar. If you want to limit your archives size to 1 giga byte, use such a statement: BM_TARBALL_SLICESIZE="1000M" Refer to the dar manpage for details about slices. 2.2.1.5. `BM_TARBALL_EXTRA_OPTIONS' ----------------------------------- _Type: string_ If you want to provide extra options to "tar" or "dar" you may do so here. Leave blank unless you know what you are doing. Example: to enable verbosity with tar (which would appeard in the logfiles), use this: BM_TARBALL_EXTRA_OPTIONS="-v" 2.2.1.6. `BM_TARBALL_DUMPSYMLINKS' ---------------------------------- _Type: boolean, default: `true'._ It is possible, when generating the tarball (or the zip file) to dereference the symlinks. If you enable this feature, every symbolic link in the file system will be replaced in the archive by the file it points to. Use this feature with care, it can quickly lead to huge archives, or even worse: if you have a circular symlink somewhere, this will lead to an infinite archive! In most of the cases, you should not use this feature. 2.2.1.7. `BM_TARBALL_DIRECTORIES' --------------------------------- _Type: space-separated list, default: `null'._ Since version 0.7.3, this variable is replaced by the array BM_TARBALL_TARGETS[], it's still supported for backward compatibility though. You can use this variable for defining the locations to backup, but you must not use this variable if one or more of the paths you want to archive contain a space. If you want to backup some targets that have spaces in their name (eg "Program Files"), you must not use this variable, but the array BM_TARBALL_TARGETS[] instead. Example: export BM_TARBALL_DIRECTORIES="/etc /home /var/log/apache" 2.2.1.8. `BM_TARBALL_TARGETS' ----------------------------- _Type: array, default: `"/etc", "/boot"'._ This variable holds every place you want to backup. This is the recommanded variable to use for defining your backup targets (`BM_TARBALL_DIRECTORIES' is deprecated since version 0.7.3). You can safely put items that contain spaces (eg: "Program Files") whereas you can't with `BM_TARBALL_DIRECTORIES'. You can also put Bash patterns in BM_TARBALL_TARGETS[], it will be expanded at runtime to find the resulting targets. For instance : BM_TARBALL_TARGETS[0]="/home/*" will lead to backup every home's sub-directory. Example BM_TARBALL_TARGETS[0]="/etc" BM_TARBALL_TARGETS[1]="/home/*" BM_TARBALL_TARGETS[2]="/boot" BM_TARBALL_TARGETS[3]="/mnt/win/Program Files" 2.2.1.9. `BM_TARBALL_BLACKLIST' ------------------------------- _Type: space-separated list, default: `"/proc /dev /sys /tmp"'._ It can be very useful to prevent some locations of your filesytem from being included in the archives. This is really useful when you use wildcards in BM_TARBALL_DIRECTORIES. Indeed, you may want to backup every top-level directory of your filesystem (`/*') but without volatile locations like `/tmp', `/dev' and `/proc'. You can also use this variable for excluding every files of a given extension, like for instance mp3 or mpg files. Example: export BM_TARBALL_BLACKLIST="/tmp /dev /proc *.mp3 *.mpg" 2.2.1.10. `BM_TARBALL_OVER_SSH' ------------------------------- _Type: boolean, default: `false'._ _Dependency: `BM_UPLOAD_SSH'_ If you want to archive some remote locations from a server where Backup Manager is insalled, you can choose to build archives over SSH. This is useful if you don't want to install Backup Manager every where and setup some upload methods from all thoses servers to a central data storage server. This way, Backup Manager will build some archives directly over SSH and will store the resulting tarballs locally, as if it was built like any other archive. The resulting archive will be prefixed with the remote hostname instead of `BM_ARCHIVE_PREFIX'. This feature requires that the following variables are set in the BM_UPLOAD_SSH section: * `BM_UPLOAD_SSH_USER': the user to use for connecting to the remote server. Note that this user will run tar remotely, so take care to archive something this user can read! * `BM_UPLOAD_SSH_KEY': as usal, the path to the private key to use for establishing the connection. * `BM_UPLOAD_SSH_HOSTS': A list of hosts where to run the tarball builds. If you enable this feature, note that the resulting configuration file will have the following restrictions: * Remote tarball build only works with the `tarball' method, it will silently behaves the same with `tarball-incremental'. * You cannot use the remote build and the local one in the same configuration file. If you want to do both, use two configuration files. Example: You have three hosts: host01, host02 and host03. You want to set up host01 as a data storage server, it has a big /var/archives partition. You want to archive "/etc", "/home" and "/var/log" on box02 and box03 and store the archives on host01. [...] export BM_ARCHIVE_METHOD="tarball" export BM_TARBALL_OVER_SSH="true" export BM_TARBALL_FILETYPE="tar.bz2" export BM_TARBALL_DIRECTORIES="/etc /home /var/log" export BM_UPLOAD_SSH_USER="bamuser" export BM_UPLOAD_SSH_KEY="/home/bamuser/.ssh/id_dsa" export BM_UPLOAD_SSH_HOSTS="box02 box03" Of course, for this to work correctly, ``bamuser'' should be a valid user on box02 and box03; it must be allowed to connect to them with SSH key autentication and has to be able to read those directories. 2.2.2. Incremental tarballs --------------------------- 2.2.2.1. Description -------------------- _Method name: `tarball-incremental', configuration key prefix: `BM_TARBALLINC'._ If you want to handle tarballs without wasting disk space, you should use this method. The concept of this method is simple: You choose a frequency when a full backup is made (exactly like the one made by the tarball mehod). All the days between two full backups, archives contain only the files that have changed from the previous archive. For instance, let's say you want to backup /home with this method. Your /home directory is composed by two sub-directories: /home/foo and /home/bar. You choose a weekly frequency and say that monday will be the "fullbackup" day. Obviously, you will have a full tarball of /home on monday. Then, if a file changed inside /home/foo and if /home/bar remains unchanged, tuesday's archive will only contain the modified files of /home/foo. Using this method will save a lot of disk space. To build incremental tarballs, Backup Manager uses tar's switch `--listed-incremental'. This will create a file for each target which will contain some statistics used by tar to figure out if a file should be backed up or not. When Backup Manager is run for the first time, this file doesn't exist, so the first tarballs made are always master backups. If the _incremental list_ files get removed, the next backups won't be incremental. Since version 0.7.3, it's possible to see at the first glance if a backup is a master or an incremental one: master backup have the keyword `master' appended to the date. When purging the repository, the master backups are not removed as the incremental ones. Backup Manager always keep a master backup that is older than incremental archives. This method uses all the tarball's configuration keys and adds two more. One to define the kind of frequency, the other to choose on which day the full backups should be done. 2.2.2.2. `BM_TARBALLINC_MASTERDATETYPE' --------------------------------------- _Type: enum(weekly, monthly), default: `weekly'._ This is the type of frequency you want to use. If you choose `weekly', you'll have to choose a day number between 0 and 6 for the BM_TARBALLINC_MASTERDATEVALUE configuration key, if you choose `monthly', the day number will be between 1 and 31. 2.2.2.3. `BM_TARBALLINC_MASTERDATEVALUE' ---------------------------------------- _Type: integer, default: `1'._ The number of the day when making full backups. Note that its meaning directly depends on the `BM_TARBALLINC_MASTERDATETYPE'. For instance, 1 means _"monday"_ if you choose a weekly frequency, but it means _"the first day of the month"_ if you choose a monthly frequency. 2.2.3. MySQL databases ---------------------- 2.2.3.1. Description -------------------- _Method name: `mysql', configuration keys prefix: `BM_MYSQL'._ This method provides a way to archive MySQL databases, the archives are made with mysqldump (SQL text files) and can be compressed. In versions prior to 0.7.6, Backup Manager used to pass the MySQL client's password through the command line. As explained by the MySQL manual, that's a security issue as the password is then readable for a short time in the /proc directory (or using the ps command). To close that vulnerability, the MySQL client password is not passed through the command line anymore, it is written in a configuration file located in the home directory of the user running Backup Manager : `~/.my.cnf'. If that file doesn't exist at runtime, Backup Manager will create it and will then write the password provided in `BM_MYSQL_ADMINPASS' inside. 2.2.3.2. `BM_MYSQL_DATABASES' ----------------------------- _Type: space-separated list, default: `__ALL__'._ This is the list of databases you want to archive. You can put the keyword `__ALL__' if you like to backup every database without having to list them. Example: export BM_MYSQL_DATABASES="mysql mybase wordpress dotclear phpbb2" 2.2.3.3. `BM_MYSQL_SAFEDUMPS' ----------------------------- _Type: boolean, default: `true'._ The best way to produce MySQL dumps is done by using mysqldump's `--opt' switch. This makes the dump directly usable with mysql (adds the drop table statements), locks tables during the dump generation and other cool things (see `mysqldump'). This is recommended for full-clean-safe backups, but needs a privileged user (for the lock permissions). Example: export BM_MYSQL_SAFEDUMPS="true" 2.2.3.4. `BM_MYSQL_ADMINLOGIN' ------------------------------ _Type: string, default: `root'._ The MySQL login you want to use for connecting to the database. Make sure this login can read all the databases you've set in `BM_MYSQL_DATABASES'. Example: export BM_MYSQL_ADMINLOGIN="root" 2.2.3.5. `BM_MYSQL_ADMINPASS' ----------------------------- _Type: string, default: `undefined'._ The MySQL client password. If you have already made your own ~/.my.cnf configuration file, you don't have to set that variable. If you don't know what is the `~/.my.cnf' configuration file, set the password, then Backup Manager will take care of creating the MySQL client configuration file. Example: export BM_MYSQL_ADMINPASS="MySecretPass" 2.2.3.6. `BM_MYSQL_HOST' ------------------------ _Type: string, default: `localhost'._ The database host where the databases are. Example: export BM_MYSQL_HOST="localhost" 2.2.3.7. `BM_MYSQL_PORT' ------------------------ _Type: string, default: `3306'._ The port on `BM_MYSQL_HOST' where the mysql server is listening. Example: export BM_MYSQL_PORT="3306" 2.2.3.8. `BM_MYSQL_FILETYPE' ---------------------------- _Type: enum(gzip, bzip2), default: `bzip2'._ The archive is made with mysqldump which renders SQL lines; the resulting text file can be compressed. If you want to compress the file, choose the compressor you want. Leave it blank if you want pure SQL files. Example: export BM_MYSQL_FILETYPE="bzip2" 2.2.4. Subversion repositories ------------------------------ 2.2.4.1. Description -------------------- You can archive Subversion repositories with this method. The archive will be made with `svnadmin' and will contain XML data (text files). Like the mysql method, you can choose to compress it. 2.2.4.2. `BM_SVN_REPOSITORIES' ------------------------------ _Type: space-separated list_ This is the list of absolute paths to the SVN repositories to archive. Example: export BM_SVN_REPOSITORIES="/srv/svnroot/repo1 /srv/svnroot/repo2" 2.2.4.3. `BM_SVN_COMPRESSWITH' ------------------------------ _Type: enum(gzip, bzip2), default: `bzip2'._ If you want to compress the resulting XML files, choose a compressor here. Leave this blank if you don't want any compression. Example: export BM_SVN_COMPRESSWITH="gzip" 2.2.5. Generic methods ---------------------- 2.2.5.1. Description -------------------- Even if most of the common needs are covered by the existing methods, there is always a case uncovered. Backup Manager provides a way for backing up anything, and can be used in such circumstances. This method is called `pipe', it is more complex to use but can virtually backup anything. The concept is simple, a pipe method is defined by the following items: * A name (for naming the archive) * A command (that produces content on stdout) * A file type (txt, sql, dump, ...) * A compressor (gzip, bzip2) Those configuration keys are arrays, so you can implement as many pipe methods as you like. For each pipe method defined, Backup Manager will launch the command given and redirect the content sent to stdout by this command to a file named with the name of the method and its filetype. Then, if the method uses a compressor, the file will be compressed. 2.2.5.2. Example ---------------- Example for archiving a remote MySQL database through SSH: BM_PIPE_COMMAND[0]="ssh host -c \"mysqldump -ufoo -pbar base\"" BM_PIPE_NAME[0]="base" BM_PIPE_FILETYPE[0]="sql" BM_PIPE_COMPRESS[0]="gzip" Imagine you have a second pipe method to implement, for instance building a tarball trough SSH: BM_PIPE_COMMAND[1]="ssh host -c \"tar -c -z /home/user\"" BM_PIPE_NAME[1]="host.home.user" BM_PIPE_FILETYPE[1]="tar.gz" BM_PIPE_COMPRESS[1]="" Note that we have incremented the array's index. 2.3. Upload Methods ------------------- 2.3.1. Description ------------------ _One of the most important thing to do when backing up file systems is to store the archives on different places. The more different physical spaces you have, the better. Backup Manager provides a way for achieving this goal : the upload methods._ There are different upload methods, each of them behaves differently and provides particular features. In Backup Manager 0.7.7 you can use FTP, SSH, RSYNC or Amazon S3 uploads. In the same manner as for backup methods, you can choose to use as many upload methods as you like. If you don't want to use this feature at all, just put the keyword `none' in the configuration `BM_UPLOAD_METHOD'. Note that the FTP, SSH and S3 methods are dedicated to upload archives, using those method depends on the use of at least one backup method. On the opposite, the RSYNC method uploads a directory to remote locations, this directory can be your repository or whatever other location of your file sytem. 2.3.2. Global configuration keys -------------------------------- The following configuration keys are global in the upload section: 2.3.2.1. `BM_UPLOAD_HOSTS' -------------------------- _Type: space-separated list_ Each of the hosts defined in that list is used by all the upload methods when establishing connections. For instance if you want to perform SSH uploads of your archives and RSYNC upload of a location to the same host, put it in this list. Example: export BM_UPLOAD_HOSTS="mirror1.lan.mysite.net mirror2.lan.mysite.net" 2.3.2.2. `BM_UPLOAD_DESTINATION' -------------------------------- _Type: string_ This is the absolute path of the directory in the remote hosts where to put the files uploaded. If you have installed installed Backup Manager on the remote host, a good idea is to choose a sub-directory of the repository. Then, during the remote host purge phase, your uploads will be cleaned at the same time. You can also define a destination dedicated to your host: `BM_UPLOAD_DESTINATION="/var/archives/$HOSTNAME"' Example: Let's say you want that all your uploads are performed on the host mirror2.lan.mysite.net, in the sub-directory /var/archives/uploads export BM_UPLOAD_HOSTS="mirror2.lan.mysite.net" export BM_UPLOAD_DESTINATION="/var/archives/uploads" 2.3.3. SSH uploads ------------------ 2.3.3.1. Description -------------------- _Method name: `ssh', goal: upload archives to remote hosts over SSH. This method depends on a backup method._ If you want to upload your archives on remote locations, you can use the SSH method. This method is good if you like to use a secure tunnel between the two points of the upload. The call to `scp' will be done with the identity of the user `BM_UPLOAD_SSH_USER', thus, you have to make sure this user can have access to the repository (take care to the secure mode). 2.3.3.2. `BM_UPLOAD_SSH_USER' ----------------------------- _Type: string_ This is the user to use for performing the ssh connection. Make sure this user can access repository. Example: export BM_UPLOAD_SSH_USER="bmngr" 2.3.3.3. `BM_UPLOAD_SSH_KEY' ---------------------------- _Type: string_ This is the path to the private key of the user BM_UPLOAD_SSH_USER. Example: export BM_UPLOAD_SSH_KEY="/home/bmngr/.ssh/id_dsa" 2.3.3.4. `BM_UPLOAD_SSH_PORT' ----------------------------- _Type: integer_ You may want to connect to remote hosts with a specific port. Use this configuration key then. Example: export BM_UPLOAD_SSH_PORT="1352" 2.3.3.5. `BM_UPLOAD_SSH_HOSTS' ------------------------------ _Type: space-separated list_ Put here the list of hosts to use for SSH-only uploads. Note that if you put some hosts in `BM_UPLOAD_HOSTS', they will be used as well. Example: export BM_UPLOAD_SSH_HOSTS="mirror3.lan.mysite.net" 2.3.3.6. `BM_UPLOAD_SSH_PURGE' ------------------------------ _Type: boolean_ If you set this boolean to "true", the remote archives will be purged before the new ones are uploaded. The purging rules are the same as the ones Backup Manager uses for local purging. If `BM_UPLOAD_SSH_TTL' is defined, this time to live will be used, else `BM_ARCHIVE_TTL' will be used. Example: export BM_UPLOAD_SSH_PURGE="true" export BM_UPLOAD_SSH_TTL="10" 2.3.3.7. `BM_UPLOAD_SSH_DESTINATION' ------------------------------------ _Type: string_ Put here the destination for SSH-only uploads, this key overrides `BM_UPLOAD_DESTINATION'. Example: export BM_UPLOAD_SSH_DESTINATION="/var/archives/scp-uploads" 2.3.4. Encrypted SSH uploads ---------------------------- 2.3.4.1. Description -------------------- _Method name: `ssh-gpg', goal: encrypt arcives using public key encryption and upload the result to untrusted remote hosts over SSH. This method depends on a backup method._ The upload using SSH can also be combined with public key encryption provided by `gpg'. The archives will be encrypted using a public key prior to sending them over the network, so on the remote server your files are protected from inspection. This method can be used to protect your data from inspection on untrusted remote servers. However, since the encrypted files are not signed, this does not protect you from archive manipulation. So the _md5_ hases are still needed. This method uses all of the configuartion keys of the _ssh_ method. One additional key is required. 2.3.4.2. `BM_UPLOAD_SSH_GPG_RECIPIENT' -------------------------------------- _Type: string_ This parameter sets the recipient for which the archive is encrypted. A valid specification is a short or long key id, or a descriptive name, as explained in the `gpg' man page. The public key for this identity must be in the key ring of the user running `gpg', which is the same as specified by `BM_UPLOAD_SSH_USER'. To test this run the command `gpg --list-keys ID' as that user, where `ID' is the ID as you give it to this parameter. If `gpg' displays exactly one key, then you are fine. Refer to the `gpg' man page for further details. Example: export BM_UPLOAD_SSH_GPG_RECIPIENT="email@address.com" export BM_UPLOAD_SSH_GPG_RECIPIENT="ECE009856" 2.3.5. FTP uploads ------------------ 2.3.5.1. Description -------------------- If security does not matter much on your lan (between the two points of the upload) you can choose to use the FTP method. One of the main pros of this method is that it can perform purging independently. You can safely use this method for uploading files to a host where you just have an FTP account. 2.3.5.2. `BM_UPLOAD_FTP_SECURE' ------------------------------- _Type: boolean, default: false._ If this variable is set to true, all FTP transfers will be done over SSL. Example: export BM_UPLOAD_FTP_SECURE="true" 2.3.5.3. `BM_UPLOAD_FTP_PASSIVE' -------------------------------- _Type: boolean, default: true._ If this variable is set to true, FTP transfers will be performed in passive mode, which is mandatory in NATed/firewalled environments. Example: export BM_UPLOAD_FTP_PASSIVE="true" 2.3.5.4. `BM_UPLOAD_FTP_TTL' ---------------------------- _Type: integer, default: $BM_ARCHIVE_TTL_ Using different _time to live_ values for local and remote archives can be useful in certain situations. For instance, it's possible to install Backup Manager locally, make it build archives, upload them to a remote FTP host and then purge them locally (but not on the remote host). Doing this is possible with setting a null value to the local TTL (BM_ARCHIVE_TTL) and a non-null value to BM_UPLOAD_FTP_TTL. Example: # in your main conffile -- /etc/backup-manager.conf export BM_ARCHIVE_TTL="0" export BM_UPLOAD_FTP_TTL="5" export BM_POST_BACKUP_COMMAND="/usr/sbin/backup-manager --purge" # in your cron job: /usr/sbin/backup-manager /usr/sbin/backup-manager --purge (Don't put the post-command in the main conffile or you'll face an infinite loop.) 2.3.5.5. `BM_UPLOAD_FTP_USER' ----------------------------- _Type: string._ Put here the FTP user to use for opening the connections. Example: export BM_UPLOAD_FTP_USER="bmngr" 2.3.5.6. `BM_UPLOAD_FTP_PASSWORD' --------------------------------- _Type: string._ Put here the password to use for authenticating the FTP session,(in plain text). Example: export BM_UPLOAD_FTP_PASSWORD="secret" 2.3.5.7. `BM_UPLOAD_FTP_HOSTS' ------------------------------ _Type: space-separated list_ Put here the list of hosts to use for FTP-only uploads. Note that if you put some hosts in `BM_UPLOAD_HOSTS', they will be used as well. Example: export BM_UPLOAD_FTP_HOSTS="mirror4.lan.mysite.net" 2.3.5.8. `BM_UPLOAD_FTP_DESTINATION' ------------------------------------ _Type: string_ Put here the destination for FTP-only uploads, this key overrides `BM_UPLOAD_DESTINATION'. Example: export BM_UPLOAD_FTP_DESTINATION="/var/archives/ftp-uploads" 2.3.5.9. `BM_UPLOAD_FTP_PURGE' ------------------------------ _Type: boolean, default: `true'_ You can choose to purge deprecated archives before uploading new ones. This purge is done over FTP and uses the configuration key `BM_ARCHIVE_TTL' in the same manner as the local purge behaves (the FTP purge is not recursive though). Example: export BM_UPLOAD_FTP_PURGE="true" 2.3.6. Amazon S3 uploads ------------------------ 2.3.6.1. Description -------------------- Amazon's new Simple Storage Service (S3) is an Internet "web service" that permits you to store unlimited blocks of data on their replicated and managed systems. See http://aws.amazon.com for more information. Registration is free and the rates are quite reasonable. Using the S3 upload method will permit your archives to be stored on Amazon's S3 service. You must allocate a "bucket" to the exclusive use of Backup Manager. Each of your created archives will be uploaded to S3 and stored within this bucket in a key name that matches the name of the archive. As with the other backup methods Backup Manager does not assist you in restoring files from archives. You must retrieve archives from S3 using other mechanisms such as the S3Shell provided as an examle command line utility by Amazon. Note that when using this upload method, the `BM_UPLOAD_HOSTS' variable is ignored as the only valid host for S3 uploads in `s3.amazon.com'. 2.3.6.2. `BM_UPLOAD_S3_DESTINATION' ----------------------------------- _Type: string._ This option is required for the S3 upload method. This specifies the bucket used to store backup data. If the bucket does not exist it will be created as a private bucket. This key overrides `BM_UPLOAD_DESTINATION'. Note that Amazon requires that bucket names be globally unique. Be creative picking one. Example: export BM_UPLOAD_S3_DESTINATION="my_backup_bucket" 2.3.6.3. `BM_UPLOAD_S3_ACCESS_KEY' ---------------------------------- _Type: string._ This option is required for the S3 upload method. After you have registered Amazon will provide you an access key. You must use this key to access your storage on S3. Example: export BM_UPLOAD_S3_ACCESS_KEY="a9sabkz0342dasv" 2.3.6.4. `BM_UPLOAD_S3_SECRET_KEY' ---------------------------------- _Type: string._ This option is required for the S3 upload method. After you have registered Amazon will provide you a secret key. You must use this key to write to your storage on S3. Example: export BM_UPLOAD_S3_SECRET_KEY="lkj2341askj123sa" 2.3.6.5. `BM_UPLOAD_S3_PURGE' ----------------------------- _Type: boolean, default: `true'_ You can choose to purge deprecated archives before uploading new ones. This purge is done over S3 and uses the configuration key `BM_ARCHIVE_TTL' in the same manner as the local purge behaves (the S3 purge is not recursive though). Example: export BM_UPLOAD_S3_PURGE="true" 2.3.7. RSYNC uploads -------------------- 2.3.7.1. Description -------------------- You may want to upload some parts of your file system to some remote hosts. In these cases, archives are not needed, you just want to synchronize some directories to remote places. This is where the RSYNC upload method is useful. RSYNC uploads need a SSH user/key pair to behave correctly, thus there is a dependency against the keys `BM_UPLOAD_SSH_USER' and `BM_UPLOAD_SSH_KEY'. 2.3.7.2. `BM_UPLOAD_RSYNC_DIRECTORIES' -------------------------------------- _Type: space-separated list_ Put here the list of local directories you want to upload with rsync. Example: export BM_UPLOAD_RSYNC_DIRECTORIES="/data/photos /data/videos /data/mp3" 2.3.7.3. `BM_UPLOAD_RSYNC_HOSTS' -------------------------------- _Type: space-separated list_ Put here the list of hosts to use for RSYNC-only uploads. Note that if you put some hosts in `BM_UPLOAD_HOSTS', they will be used as well. Example: export BM_UPLOAD_RSYNC_HOSTS="mirror5.lan.mysite.net" 2.3.7.4. `BM_UPLOAD_RSYNC_DESTINATION' -------------------------------------- _Type: string_ Put here the destination for RSYNC-only uploads, this key overrides `BM_UPLOAD_DESTINATION'. Example: export BM_UPLOAD_RSYNC_DESTINATION="/var/archives/rsync-snapshots" 2.3.7.5. `BM_UPLOAD_RSYNC_DUMPSYMLINKS' --------------------------------------- _Type: boolean, default: `false'._ You can choose to dereference files pointed by symlinks in your RSYNC snapshots. This feature should be used with care. Example: export BM_UPLOAD_RSYNC_DUMPSYMLINKS="false" 2.4. Exports ------------ _Another way of storing your archives to a safe place is to use external media._ In version 0.7.7, only CDs and DVDs are supported as external media, so we will discuss in this section only the `BM_BURNING' features. Other exports are expected to come in next versions though. 2.4.1. Burning CDR/DVD media ---------------------------- In the version 0.7.7, Backup Manager supports four different kinds of media: CDR, CDRW and DVD+R(W) and DVD-R(W). 2.4.1.1. `BM_BURNING_METHOD' ---------------------------- Set the key `BM_BURNING_METHOD' to the method corresponding to the media you want to burn: * CDR * CDRW * DVD * DVD-RW In _non-interactive mode_ (when backup-manager is not lauchned from a terminal), any of these methods will try to put the whole archive repository in the media, if it does not fit in the media, it will try to put only the archives built on the day, if that's not possible, nothing will be burnt. In _interactive mode_ (when backup-manager is launched from a terminal), the whole repository will be burnt into as many media as needed. When a medium is satured with archives, backup-manager will pause the process asking the user to put a new media inside. The `CDRW' and `DVD-RW' methods will first blank the media, so you can safely use these methods if you want to use the same medium several times. The `CDR' and `DVD' medthods won't blank the medium first (DVD+RW media doesn't need blanking, it's possible to re-burn data on-the-fly over such media).. DVD media are handled by the tool `dvd+rw-tools', problems can occur in CRON environment with `dvd+rw-tools' versions prior to `6.1', make sure to have `6.1' or later if you want to burn DVD media with Backup Manager. As usual, you can put `none' in order to disable the burning process. All those burning methods share the same configuration keys, so it's easy to switch from a medium to another. 2.4.1.2. `BM_BURNING_DEVICE' ---------------------------- _Type: string, default: `/dev/cdrom'._ This is mandatory for using the burning feature, it's the device to use for mounting the media. It's needed by backup manager for performing the MD5 checks and for other needs. Example: export BM_BURNING_DEVICE="/dev/cdrom" 2.4.1.3. `BM_BURNING_DEVFORCED' ------------------------------- _Type: string_ Backup Manager uses `cdrecord' for burning CDs. If when you run `cdrecord -scanbus' you don't see your burning device, that means you will have to force the device in ATA mode. To tell Backup Manager to do so, just put here the path to your device, and a switch will be appended to the cdrecord commandline like the following : `cdrecrord ... dev=$BM_BURNING_DEVFORCED ...'. Leave this configuration key blank if you see your device with `cdrecord -scanbus', in this case, Backup Manager will use the default cdrecord device for burning CDR media. Example: export BM_BURNING_DEVFORCED="/dev/cdrom" 2.4.1.4. `BM_BURNING_ISO_FLAGS' ------------------------------- _Type: string, default: "-R -J"_ Media burned with Backup Manager will be made using a Joliet disc image. The flags defined in that variable will be appended to the mkisofs command lines in order to specify wich media image to use. The default value "-R -J" produces a Joliet image, if you want to make non-Joliet disc images, you can change these flags. Refer to the manpage of mkisofs for details about possible disc images. Don't change that variable if you don't know what you're doing. Example: export BM_BURNING_ISO_FLAGS="-R -J" 2.4.1.5. `BM_BURNING_MAXSIZE' ----------------------------- _Type: integer, default: `700'._ This is where you define the maximum size (in megabytes) of the media you will put in the device. Here is the list of the common sizes: * CDR/CDRW: 650, 700, 800 * DVD: 4700 When Backup Manager looks in the repository for burning data, it will try to put the whole archive repository in the media. If the summarized size of the repository does not fit in `BM_BURNING_MAXSIZE', Backup Manager will then try to put only the archives of the day. Example for a CD burner export BM_BURNING_METHOD="CDRW" export BM_BURNING_MAXSIZE="700" Example for a DVD burner: export BM_BURNING_METHOD="DVD" export BM_BURNING_MAXSIZE="4700" 2.4.1.6. `BM_BURNING_CHKMD5' ---------------------------- _Type: boolean, default: `true'._ If this boolean is set to a true value, every MD5 sum will be checked when the media is burned in order to make sure everything is ok. Note that you can choose to perform this checkup with the command switch `--md5check'. Example: exports BM_BURNING_CHKMD5="true" 2.5. Advanced features ---------------------- _A couple of advanced features are provided, they will be covered in this section._ 2.5.1. `BM_TEMP_DIR' -------------------- _Type: string, default: `/tmp/backup-manager'._ This is the temporary directory where temporary files are created by Backup Manager. Example: export BM_ARCHIVE_CHMOD="/tmp/backup-manager" 2.5.2. Logging to syslog ------------------------ If you want to log Backup Manager actions to syslog, you can enable the internal logger, this is done with the configuration key `BM_LOGGER'. You are also able to choose which syslog facility to use thanks to the key `BM_LOGGER_FACILITY'. 2.5.2.1. `BM_LOGGER' -------------------- _Type: boolean, default: `true'._ If this boolean is set to true, Backup Manager will log everything to syslog. Example: exports BM_LOGGER="true" 2.5.2.2. `BM_LOGGER_FACILITY' ----------------------------- _Type: string, default: `user'._ You can specify here a syslog facility to use, this can be useful if you like to filter messages from Backup Manager to a special syslog file. Example: exports BM_LOGGER_FACILITY="cron" 2.5.3. Writing external hooks ----------------------------- You have the availability to write your own hooks if you want to automate some special beaviours within the Backup Manager process. You may like to mount over NFS your archive repository _before_ the backup session and unmount it after, or you may like to launch your own uploader script when the backup session is finished. In order to let you implement any solution you like, Backup Manager provides two different hooks: the _pre-command_ and _post-command_ hooks. 2.5.3.1. `BM_PRE_BACKUP_COMMAND' -------------------------------- _Type: string_ Put here the path to a program (or a shell command) to launch before the backup session. If the command fails (exits with non zero value, or prints the keyword `false' on stdout) the backup session will stop. If the pre-command succeeds, the process can follow. Example with a basic shell command: export BM_PRE_BACKUP_COMMAND="mount -t nfs mirror.lan.net:/exports/backups /var/archives" Example with a custom script: export BM_PRE_BACKUP_COMMAND="/usr/local/bin/backup-prepare.pl $TODAY" 2.5.3.2. `BM_POST_BACKUP_COMMAND' --------------------------------- _Type: string_ Put here the path to a program (or a shell command) to launch after the backup session. If the command fails (exits with non zero value, or prints the keyword `false' on stdout) Backup Manager will exit with an error code (and will log to syslog the post-command failure if the logger is enabled). Example with a basic shell command: export BM_POST_BACKUP_COMMAND="umount /var/archives" Example with a custom script: export BM_POST_BACKUP_COMMAND="/usr/local/bin/backup-cleanup.pl $TODAY" ------------------------------------------------------------------------------- 3. Using Backup Manager ----------------------- _Now that you know in details how to write your configuration files, let's see how to use Backup Manager._ 3.1. Command line ----------------- 3.1.1. Restrictions ------------------- In version 0.7.7, Backup Manager can only be used by `root', as it has be designed as a systemwide tool. $ backup-manager backup-manager must be run as root. If you want to launch it from the command line, you first have to use the `root' account. $ su Password: # backup-manager -h /usr/sbin/backup-manager [options] Output: --help|-h : Print this short help message. --verbose|-v : Print what happens on STDOUT. --no-warnings : Disable warnings. Single actions: --upload|-u : Just upload the files of the day. --burn|-b : Just burn the files of the day. --md5check|-m : Just test the md5 sums. --purge|-p : Just purge old archives. Behaviour: --conffile|-c file : Choose an alternate config file. --force|-f : Force overwrite of existing archives. Unwanted actions: --no-upload : Disable the upload process. --no-burn : Disable the burning process. --no-purge : Disable the purge process. ouranos:/home/sukria# As you can see in the example above, using the `-h' switch (or `--help') gives a short help message and prints all supported command switches. We will cover in this section each of them. 3.1.2. Options -------------- The following switches can be used for altering Backup Manager's behaviour. 3.1.2.1. `--version' -------------------- Prints on stdout the Backup Manager version installed on the system and exit. Example: # backup-manager --version Backup Manager 0.6 3.1.2.2. `--verbose' or `-v' ---------------------------- Using this switch will enabled the verbose mode. All actions are reported on stdout. Example: # backup-manager -v Getting lock for backup-manager 10605 with /etc/backup-manager.conf: ok Cleaning /var/archives Entering directory /var/archives/lost+found. [...] 3.1.2.3. `--no-warnings' ------------------------ When a non-critical problem occurs (an error occured but the backup process can follow) Backup Manager will print a warning message (and will log it if the logger is enabled). If you don't want to see warning messages, you can append this switch on the command line. 3.1.2.4. `--conffile' or `-c' ----------------------------- Backup Manager relies on configuration files, by default, the file `/etc/backup-manager.conf' is used but you can choose to run it with a different one. This is done by using the following syntax : # backup-manager -c Note that Backup Manager is designed to work properly when launched in parallel mode with different configuration files, but it will refuse to run twice at the same time with the same configuration file. You can then safely do something like that: # backup-manager -c /etc/backup-manager/backup-nfs.conf & # backup-manager -c /etc/backup-manager/backup-homedirs.conf & # backup-manager -c /etc/backup-manager/backup-rsync-filer.conf 3.1.2.5. `--force' ------------------ When building an archive, Backup Manager looks if the archive already exists in the repository, if so, a warning is sent saying that the archive exists. If you want to bypass this warning and overwrite archives, use this switch. 3.1.2.6. `--upload' or `-u' --------------------------- If you have made a configuration file that enables the uploading system, you can ask Backup Manager to perform the uploading session instead of the whole process with this switch. 3.1.2.7. `--burn' or `-b' [] ---------------------------------- If you have made a configuration file that enables the burning system, you can ask Backup Manager to perform the burning session instead of the whole process with this switch. You can also ask Backup Manager to burn only archives of a given date with providing a timestamp after the `--burn' switch. Example: Burning all the archives made on March, 12nd 2006: # backup-manager --bnurn 20060312 3.1.2.8. `--md5check' or `-m' ----------------------------- If you have made a configuration file that enables the MD5 checks on burnt media, you can ask Backup Manager to perform the MD5 checks instead of the whole process with this switch. 3.1.2.9. `--purge' or `-p' -------------------------- This switch will as Backup Manager to just perform the archive repository purge: removing any depreacted archives (according to `BM_ARCHIVE_TTL'. 3.1.2.10. `--no-upload' or `-p' ------------------------------- Use this switch if you have a configuration file that enables the uploading system and want to run Backup Manager without it. 3.1.2.11. `--no-burn' --------------------- Use this switch if you have a configuration file that enables the burning system and want to run Backup Manager without it. 3.1.2.12. `--no-purge' or `-p' ------------------------------ Use this switch if you want to disable the purging phase. This can be useful if you like to implement another kind of purging system, with a post-command hook for instance. 3.2. CRON integration --------------------- There is a global idea behind Backup Manager's design: "_You won't do it if you have to think about it_". This is specifically true for backup concerns and it is strongly adviced to automate your backup process with a tasks scheduler like CRON. Setting up a Backup Manager job in cron is pretty easy, you just have to write a shell script under the appropriate CRON sub-directory that will call backup-manager. The best sub-directory to choose is `/etc/cron.daily' as Backup Manager handles daily archives. Here is an example of a CRON script: cat > /etc/cron.daily/backup-manager #!/bin/sh /usr/sbin/backup-manager If you want to be notified by mail if a problem occurs during the backup session, just make sure you receive mails coming from CRON. When the verbose mode is off, only warnings and errors are printed on stdout, so you will receive a mail from the Backup Manager CRON job only in case of unexpected effects. On the other hand, if you like to receive daily mails from the job, even if everything went well, just append the --verbose switch like that : cat > /etc/cron.daily/backup-manager #!/bin/sh /usr/sbin/backup-manager --verbose ------------------------------------------------------------------------------- Backup Manager 0.7.7 User Guide Alexis Sukrieh 1.7 - 14 Apr, 2008 Backup-Manager-0.7.10.1/doc/user-guide.sgml0000644000175000017500000017221011503702461017553 0ustar alexisalexis %versiondata; %commondata; FIXME: "> ]> &bmngr; &bmngr-version; User Guide <author>Alexis Sukrieh <version>&version; - &date-en; <copyright> <copyrightsummary> copyright © 2010 Alexis Sukrieh </copyrightsummary> <p> This user guide is free software; you may redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. <p> This is distributed in the hope that it will be useful, but <em>without any warranty</em>; without even the implied warranty of was merchantability or fitness for a particular purpose. See the GNU General Public License for more details. <p> A copy of the GNU General Public License is available on the World Wide Web at <url id="&url-gpl;" name="the GNU web site">. You can also obtain it by writing to the &fsf-addr;. <toc detail="sect1"> <chapt id="about">About this manual <sect id="about-scope">Scope <p> &bmngr; is a system tool designed to handle backups. It is written with simplicity in mind. <p> If you want to handle a couple of tarballs, reading the default configuration file might be enough to understand the main design. On the other hand, if you want to know more about the global design of the program, how to write your own backup methods or even look at some real life examples, this guide is for you. <p> This document describes the main design of the software and gives information about supported configuration keys. All backup methods are described, with a sample configuration file as illustration. Whenever possible, advices and best practices are given. <p> This manual also describes every configuration variables supported in the version &bmngr-version;. <sect id="about-version">Version <p> This document is updated whenever a new release of &bmngr; is published. The current version covers all features and configuration details about version &bmngr-version;. <p> The first version of this document was written with the release 0.6 of &bmngr;. <sect id="about-authors">Authors <p> The first version of this document was made in late 2005, by Alexis Sukrieh and has been reviewed by Sven Joachim. <p> While the author of this document has tried hard to avoid typos and other errors, these do still occur. If you discover an error in this manual or if you want to give any comments, suggestions, or criticisms please send an email to the development list, backup-manager-devel@backup-manager.org, or submit a bug report against the "Documentation" product, in the bug tracking system<footnote>http://bugzilla.backup-manager.org/</footnote>. <chapt id="configuration">Configuration files <p> <em>&bmngr;'s behaviour is defined in configuration files. You can run &bmngr; with different configuration files (at the same time or not). This chapter will cover all the configuration keys supported in version &bmngr-version; and will explain their meaning.</em> <sect id="design">Repository and Archives <p> &bmngr; stores <em>archives</em> it builds in a <em>repository</em>. <em>Archives</em> are built by using a <em>backup method</em>. <sect1 id="archive-repo">The Repository <!-- --> <sect2 id="BM_REPOSITORY_ROOT"><tt>BM_REPOSITORY_ROOT</tt> <p> <em>Type: string, default: <tt>/var/archives</tt>.</em> <p> The repository is the place in your filesystem where all archives are stored. This is a particular place for &bmngr;, it will be cleaned during backup sessions: archives older than the authorized lifetime will be purged. If the repository does not exist, it will be created at runtime. <p> Isolating the repository on a dedicated partition is a good idea. This can prevent the repository from eating all the disk space of the partition. With a bad configuration file, backup sessions can lead to huge archives, for many reasons, so take care. <p> Example: <example> export BM_REPOSITORY_ROOT="/var/archives" </example> <sect2 id="BM_REPOSITORY_SECURE"><tt>BM_REPOSITORY_SECURE</tt> <p> <em>Type: boolean, default: <tt>true</tt>.</em> <p> For security reasons, the repository can be accessible by a specific user/group pair. This will prevent the archives from being readable (and writable) by any user in the system. This mode is enabled by default (owned by <tt>root:root</tt>). <p> To enable this mode, set the configuration key <tt>BM_REPOSITORY_SECURE</tt> to <tt>yes</tt>, then update <tt>BM_REPOSITORY_USER</tt> and <tt>BM_REPOSITORY_GROUP</tt> to your needs. <p> You can also change the permission of the repository and the archives, that is possible with two configuration variables: <tt>BM_REPOSITORY_CHMOD</tt> and <tt>BM_ARCHIVE_CHMOD</tt>. <p> Example: <example> export BM_REPOSITORY_SECURE="true" export BM_REPOSITORY_USER="root" export BM_REPOSITORY_GROUP="root" export BM_REPOSITORY_CHMOD="770" export BM_ARCHIVE_CHMOD="660" </example> <sect1 id="encryption">Encryption <p> <em> If you cannot trust the place where you store your archives, you can choose to encrypt them so you are the only one who can read their content. That's a very good idea for archives you plan to upload to some remote place, or even for the archives you want to daily export on removable media. </em> <sect2 id="BM_ENCRYPTION_METHOD"><tt>BM_ENCRYPTION_METHOD</tt> <p> <em>Type: string, default: undefined.</em> <p> For &bmngr;, encryption is defined in one place in the configuration file. If the variable "<tt>BM_ENCRYPTION_METHOD</tt>" is not defined, no encryption occurs during the archive build process, if a method is defined there, then any archive built are encrypted through a pipeline with that method. <p> Be aware that encryption is supported for the methods "mysql", "pipe", "tarball" and "tarball-incremental" but only for those file types: tar, tar.gz, tar.bz2. <p> The only valid method supported for encrypting archives is "gpg". <p> &bmngr; will encrypt your archive through a pipeline in order not to write any byte of unencrypted data on the physical media. The encryption will be performed with a command line like the following: <example> <command> | gpg -r "$BM_ENCRYPTION_RECIPIENT" -e > archive.gpg </example> <p> To decrypt an archive built with GPG encryption, you have to be the owner of the private GPG key for which the encryption was made. Then issue the following: <example> $ gpg -d <archive.gpg> > archive </example> <p> GPG will then prompt you for the private key passphrase and will decrypt the content of the archive if the passphrase is valid. <p> Refer to the GPG documentation for more details of encryption. <sect2 id="BM_ENCRYPTION_RECIPIENT"><tt>BM_ENCRYPTION_RECIPIENT</tt> <p> <em>Type: string, default: undefined.</em> <p> As explained in the previous section, that variable should contain the GPG recipient for the encryption, eg: your GPG ID. <p> Examples of valid GPG ID: <example> export BM_ENCRYPTION_RECIPIENT="0x1EE5DD34" export BM_ENCRYPTION_RECIPIENT="Alexis Sukrieh" export BM_ENCRYPTION_RECIPIENT="sukria@sukria.net" </example> <sect1 id="archives">Archives <p> <em>Archives are produced by backup methods, they can be virtually anything, but will always be named like the following: <tt>prefix-name-date.filetype</tt>. An archive is a file that contains data, it can be compressed or not, in a binary form or not.</em> <sect2 id="BM_ARCHIVE_STRICTPURGE"><tt>BM_ARCHIVE_STRICTPURGE</tt> <p> <em>Type: boolean, default: <tt>true</tt>.</em> <p> As explained in the BM_REPOSITORY_ROOT section, every archive built by &bmngr; will be purged when their lifetime expires. In versions prior to 0.7.6, any archive were purged. <p> You can now choose to purge only the archive built in the scope of the configuration file, that is: archives prefixed with BM_ARCHIVE_PREFIX. <p> This is useful if you share the same BM_REPOSITORY_ROOT with different instances of &bmngr; that have different purging rules (eg: a BM_REPOSITORY_ROOT shared over NFS for multiple &bmngr; configuration). <p> Example: <example> export BM_ARCHIVE_STRICTPURGE="true" </example> <sect2 id="BM_ARCHIVE_NICE_LEVEL"><tt>BM_ARCHIVE_NICE_LEVEL</tt> <p> <em>Type: string, default: <tt>10</tt>.</em> <p> Backup Manager does handle several archive methods, which can use a lot of ressources (mostly CPU); although this can be acceptable if Backup Manager is run at night, on a always-running server, it can seriously slow-down a desktop computer. Indeed, most of the time, desktop users use anacron to run backup-manager when possible, and most of time this is when the desktop is actually used. <p> To enhance the desktop-experience when archives are built, you can adjust the niceness used for archive creation with this configuration variable. <p> To set a low priority to the archive creation processes, use a high number (max: 19). See the manpage of nice for details. <p> Example: <example> export BM_ARCHIVE_NICE_LEVEL="19" # recommanded for desktop users. </example> <sect2 id="BM_ARCHIVE_PURGEDUPS"><tt>BM_ARCHIVE_PURGEDUPS</tt> <p> <em>Type: boolean, default: <tt>true</tt>.</em> <p> If disk usage matters in your backup strategy, you might find useful to use &bmngr;'s duplicates purging feature. When an archive is generated, &bmngr; looks at the previous versions of this archive. If it finds that a previous archive is the same file as the one it has just built, the previous one is replaced by a symlink to the new one. This is useful if you don't want to have the same archive twice in the repository. <p> Example: <example> export BM_ARCHIVE_PURGEDUPS="true" host-etc.20051115.tar.gz host-etc.20051116.tar.gz -> /var/archives/host-etc.20051117.tar.gz host-etc.20051117.tar.gz </example> <sect2 id="BM_ARCHIVE_TTL"><tt>BM_ARCHIVE_TTL</tt> <p> <em>Type: integer, default: <tt>5</tt>.</em> <p> One of the main concepts behind the handling of the repository is to purge deprecated archives automatically. The purge session is always performed when you launch &bmngr;. During this phase, all archives older than the authorized lifetime are dropped. <p> Since version 0.7.3, &bmngr; purges only files it has created whereas in previous versions, it used to purge also other files within the repository. <p> Note that when using the incremental method for building archives, &bmngr; will handle differently master backups and incremental ones. The incremental backups will be purged like any other archives (when exceeding the authorized lifetime). On the ohter hand, deprecated master backups won't be purged unless there is a younger master backup in the repository. Then, even with a lifetime set to three days, a master backup will live more than three days, until a newer master backup is built. <p> Example: <example> export BM_ARCHIVE_TTL="5" </example> <sect2 id="BM_REPOSITORY_RECURSIVEPURGE"><tt>BM_REPOSITORY_RECURSIVEPURGE</tt> <p> <em>Type: boolean, default: <tt>false</tt>.</em> <p> On most setups, all the archives are stored in the top-level directory specified by the configuration key <tt>BM_REPOSITORY_ROOT</tt>. But it can make sense to have subdirectories, for instance to store archives uploaded from other hosts running &bmngr;. In this case, it is possible to ask &bmngr; to purge those directories too, by setting <tt>BM_REPOSITORY_RECURSIVEPURGE</tt> to <tt>true</tt>. <p> Please note that the <tt>BM_ARCHIVE_TTL</tt> value is global, so if you want to have different lifetimes for some archives, this is not the way to go. In this case you should save them outside <tt>BM_REPOSITORY_ROOT</tt> and write a cron job to do the purge (possibly calling <tt>backup-manager --purge</tt> with an alternate configuration file). <p> Example: <example> export BM_REPOSITORY_RECURSIVEPURGE="false" </example> <sect2 id="BM_ARCHIVE_PREFIX"><tt>BM_ARCHIVE_PREFIX</tt> <p> <em>Type: string, default: <tt>$HOSTNAME</tt>.</em> <p> This is the prefix used for naming archives. <p> Example: <example> export BM_ARCHIVE_PREFIX="$HOSTNAME" # echo $HOSTNAME ouranos # ls /var/archives ouranos-20051123.md5 ouranos-usr-local-src.20051123.tar.gz ouranos-etc.20051123.tar.gz </example> <sect id="methods">Backup Methods <p> The core feature of &bmngr; is to make archives, for doing this, a <em>method</em> is used. Each method can require a set of configuration keys. We will describe here every method supported in the version &bmngr-version;. <p> The method you choose must be defined in the configuration key <tt>BM_ARCHIVE_METHOD</tt>. You can put here a list of all the different methods you want to use. Take care to put every configuration key needed by all the methods you choose. Note that you can also choose none of the proposed methods, if you don't want to build archives with this configuration file, then just put <tt>none</tt>. <p> A couple of other configuration keys may be needed depending on the method you choose. <p> Example: <example> export BM_ARCHIVE_METHOD="tarball-incremental mysql" </example> <sect1 id="tarball">Tarballs <sect2 id="tarball-desc">Description <p> <em>Method name: <tt>tarball</tt>, configuration key prefix: <tt>BM_TARBALL</tt>.</em> <p> If all you want to do is to handle a couple of tarballs of your file system, you can use this method. This method takes a list of directories and builds the corresponding tarballs. This method is the default one, this is the easiest to use, it just builds tarballs as you could do with your own tar script. Its main drawback is to eat a lot of disk space: archives can be big from a day to another, even if there are no changes in their content. See the <tt>tarball-incremental</tt> method if you want to optimize archives' size. <p> When building full backups (when not building incremental ones), &bmngr; will append the keyword "master" to the name of the archive. This is very useful when using the <tt>tarball-incremental</tt> method for seeing where the full backups are quickly. <p> A couple of options are available: the name format of the archive, the compression type (gzip, zip, bzip2, none) and the facility to dereference symlinks when building the tarball. <sect2 id="BM_TARBALL_NAMEFORMAT"><tt>BM_TARBALL_NAMEFORMAT</tt> <p> This configuration key defines how to perform the naming of the archive. Two values are possible: <list> <item><tt>long</tt>: the name will be made with the absolute path of the directory (eg: <tt>var-log-apache</tt> for <tt>/var/log/apache</tt>). <item><tt>short</tt>: the name will just contain the directory (eg: <tt>apache</tt> for <tt>/var/log/apache</tt>). </list> <p> Suggested value: <tt>long</tt>. <sect2 id="BM_TARBALL_FILETYPE"><tt>BM_TARBALL_FILETYPE</tt> <p> <em>Type: enum(tar, tar.gz, tar.bz2, tar.lz, zip, dar), default: <tt>tar.gz</tt>.</em> <p> Basically, this configuration key defines the filetype of the resulting archive. In a way, it defines which compressor to use (zip, gzip, dar or bzip2). Here are the supported values: <tt>tar</tt>, <tt>tar.gz</tt>, <tt>tar.bz2</tt>, <tt>zip</tt> and <tt>dar</tt>. Note that depending on the filetype you choose, you will have to make sure you have the corresponding compressor installed. <p> For the best compression rate, choose <tt>tar.bz2</tt> or <tt>tar.lz</tt>. <p> Since version 0.7.1, &bmngr; supports <em>dar</em> archives. This archiver provides some interesting features like the archive slicing. <p> Since version 0.7.5, &bmngr; supports <em>lzma</em> archives. <p> Make sure to statisfy dependencies according to the filetype you choose: <list> <item> tar.bz2 : needs "bzip2". <item> tar.lz : needs "lzma". <item> dar : needs "dar". <item> zip : needs "zip". </list> <sect2 id="BM_TARBALL_SLICESIZE"><tt>BM_TARBALL_SLICESIZE</tt> <p> <em>Type: string</em> <p> If you want to make sure your archives won't exceed a given size (for instance 2 GB) you can use that configuration variable, but only if you are using the <tt>dar</tt> <tt>BM_TARBALL_FILETYPE</tt>. Indeed this feature is only supported by dar. <p> If you want to limit your archives size to 1 giga byte, use such a statement: <example> BM_TARBALL_SLICESIZE="1000M" </example> <p> Refer to the dar manpage for details about slices. <sect2 id="BM_TARBALL_EXTRA_OPTIONS"><tt>BM_TARBALL_EXTRA_OPTIONS</tt> <p> <em>Type: string</em> <p> If you want to provide extra options to "tar" or "dar" you may do so here. Leave blank unless you know what you are doing. <p> Example: to enable verbosity with tar (which would appeard in the logfiles), use this: <example> BM_TARBALL_EXTRA_OPTIONS="-v" </example> <sect2 id="BM_TARBALL_DUMPSYMLINKS"><tt>BM_TARBALL_DUMPSYMLINKS</tt> <p> <em>Type: boolean, default: <tt>true</tt>.</em> <p> It is possible, when generating the tarball (or the zip file) to dereference the symlinks. If you enable this feature, every symbolic link in the file system will be replaced in the archive by the file it points to. Use this feature with care, it can quickly lead to huge archives, or even worse: if you have a circular symlink somewhere, this will lead to an infinite archive! <p> In most of the cases, you should not use this feature. <sect2 id="BM_TARBALL_DIRECTORIES"><tt>BM_TARBALL_DIRECTORIES</tt> <p> <em>Type: space-separated list, default: <tt>null</tt>.</em> <p> Since version 0.7.3, this variable is replaced by the array BM_TARBALL_TARGETS[], it's still supported for backward compatibility though. You can use this variable for defining the locations to backup, but you must not use this variable if one or more of the paths you want to archive contain a space. <p> If you want to backup some targets that have spaces in their name (eg "Program Files"), you must not use this variable, but the array BM_TARBALL_TARGETS[] instead. <p> Example: <example> export BM_TARBALL_DIRECTORIES="/etc /home /var/log/apache" </example> <sect2 id="BM_TARBALL_TARGETS"><tt>BM_TARBALL_TARGETS</tt> <p> <em>Type: array, default: <tt>"/etc", "/boot"</tt>.</em> <p> This variable holds every place you want to backup. This is the recommanded variable to use for defining your backup targets (<tt>BM_TARBALL_DIRECTORIES</tt> is deprecated since version 0.7.3). <p> You can safely put items that contain spaces (eg: "Program Files") whereas you can't with <tt>BM_TARBALL_DIRECTORIES</tt>. <p> You can also put Bash patterns in BM_TARBALL_TARGETS[], it will be expanded at runtime to find the resulting targets. For instance : BM_TARBALL_TARGETS[0]="/home/*" will lead to backup every home's sub-directory. <p> Example <example> BM_TARBALL_TARGETS[0]="/etc" BM_TARBALL_TARGETS[1]="/home/*" BM_TARBALL_TARGETS[2]="/boot" BM_TARBALL_TARGETS[3]="/mnt/win/Program Files" </example> <sect2 id="BM_TARBALL_BLACKLIST"><tt>BM_TARBALL_BLACKLIST</tt> <p> <em>Type: space-separated list, default: <tt>"/proc /dev /sys /tmp"</tt>.</em> <p> It can be very useful to prevent some locations of your filesytem from being included in the archives. This is really useful when you use wildcards in BM_TARBALL_DIRECTORIES. Indeed, you may want to backup every top-level directory of your filesystem (<tt>/*</tt>) but without volatile locations like <tt>/tmp</tt>, <tt>/dev</tt> and <tt>/proc</tt>. <p> You can also use this variable for excluding every files of a given extension, like for instance mp3 or mpg files. <p> Example: <example> export BM_TARBALL_BLACKLIST="/tmp /dev /proc *.mp3 *.mpg" </example> <sect2 id="BM_TARBALL_OVER_SSH"><tt>BM_TARBALL_OVER_SSH</tt> <p> <em>Type: boolean, default: <tt>false</tt>.</em> <p> <strong>Dependency: <tt>BM_UPLOAD_SSH</tt></strong> <p> If you want to archive some remote locations from a server where &bmngr; is insalled, you can choose to build archives over SSH. This is useful if you don't want to install &bmngr; every where and setup some upload methods from all thoses servers to a central data storage server. This way, &bmngr; will build some archives directly over SSH and will store the resulting tarballs locally, as if it was built like any other archive. The resulting archive will be prefixed with the remote hostname instead of <tt>BM_ARCHIVE_PREFIX</tt>. <p> This feature requires that the following variables are set in the BM_UPLOAD_SSH section: <list> <item><tt>BM_UPLOAD_SSH_USER</tt>: the user to use for connecting to the remote server. Note that this user will run tar remotely, so take care to archive something this user can read! <item><tt>BM_UPLOAD_SSH_KEY</tt>: as usal, the path to the private key to use for establishing the connection. <item><tt>BM_UPLOAD_SSH_HOSTS</tt>: A list of hosts where to run the tarball builds. </list> <p> If you enable this feature, note that the resulting configuration file will have the following restrictions: <list> <item>Remote tarball build only works with the <tt>tarball</tt> method, it will silently behaves the same with <tt>tarball-incremental</tt>. <item>You cannot use the remote build and the local one in the same configuration file. If you want to do both, use two configuration files. </list> <p> Example: You have three hosts: host01, host02 and host03. You want to set up host01 as a data storage server, it has a big /var/archives partition. You want to archive "/etc", "/home" and "/var/log" on box02 and box03 and store the archives on host01. <example> [...] export BM_ARCHIVE_METHOD="tarball" export BM_TARBALL_OVER_SSH="true" export BM_TARBALL_FILETYPE="tar.bz2" export BM_TARBALL_DIRECTORIES="/etc /home /var/log" export BM_UPLOAD_SSH_USER="bamuser" export BM_UPLOAD_SSH_KEY="/home/bamuser/.ssh/id_dsa" export BM_UPLOAD_SSH_HOSTS="box02 box03" </example> Of course, for this to work correctly, <tt>`bamuser'</tt> should be a valid user on box02 and box03; it must be allowed to connect to them with SSH key autentication and has to be able to read those directories. <sect1 id="tarballinc">Incremental tarballs <sect2 id="tarballinc-desc">Description <p> <em>Method name: <tt>tarball-incremental</tt>, configuration key prefix: <tt>BM_TARBALLINC</tt>.</em> <p> If you want to handle tarballs without wasting disk space, you should use this method. The concept of this method is simple: You choose a frequency when a full backup is made (exactly like the one made by the tarball mehod). All the days between two full backups, archives contain only the files that have changed from the previous archive. <p> For instance, let's say you want to backup /home with this method. Your /home directory is composed by two sub-directories: /home/foo and /home/bar. You choose a weekly frequency and say that monday will be the "fullbackup" day. Obviously, you will have a full tarball of /home on monday. Then, if a file changed inside /home/foo and if /home/bar remains unchanged, tuesday's archive will only contain the modified files of /home/foo. Using this method will save a lot of disk space. <p> To build incremental tarballs, &bmngr; uses tar's switch <tt>--listed-incremental</tt>. This will create a file for each target which will contain some statistics used by tar to figure out if a file should be backed up or not. When &bmngr; is run for the first time, this file doesn't exist, so the first tarballs made are always master backups. If the <em>incremental list</em> files get removed, the next backups won't be incremental. <p> Since version 0.7.3, it's possible to see at the first glance if a backup is a master or an incremental one: master backup have the keyword <tt>master</tt> appended to the date. When purging the repository, the master backups are not removed as the incremental ones. &bmngr; always keep a master backup that is older than incremental archives. <p> This method uses all the tarball's configuration keys and adds two more. One to define the kind of frequency, the other to choose on which day the full backups should be done. <sect2 id="BM_TARBALLINC_MASTERDATETYPE"><tt>BM_TARBALLINC_MASTERDATETYPE</tt> <p> <em>Type: enum(weekly, monthly), default: <tt>weekly</tt>.</em> <p> This is the type of frequency you want to use. If you choose <tt>weekly</tt>, you'll have to choose a day number between 0 and 6 for the BM_TARBALLINC_MASTERDATEVALUE configuration key, if you choose <tt>monthly</tt>, the day number will be between 1 and 31. <sect2 id="BM_TARBALLINC_MASTERDATEVALUE"><tt>BM_TARBALLINC_MASTERDATEVALUE</tt> <p> <em>Type: integer, default: <tt>1</tt>.</em> <p> The number of the day when making full backups. Note that its meaning directly depends on the <tt>BM_TARBALLINC_MASTERDATETYPE</tt>. For instance, 1 means <em>"monday"</em> if you choose a weekly frequency, but it means <em>"the first day of the month"</em> if you choose a monthly frequency. <sect1 id="mysql">MySQL databases <sect2 id="mysql-desc">Description <p> <em>Method name: <tt>mysql</tt>, configuration keys prefix: <tt>BM_MYSQL</tt>.</em> <p> This method provides a way to archive MySQL databases, the archives are made with mysqldump (SQL text files) and can be compressed. <p> In versions prior to 0.7.6, &bmngr; used to pass the MySQL client's password through the command line. As explained by the MySQL manual, that's a security issue as the password is then readable for a short time in the /proc directory (or using the ps command). <p> To close that vulnerability, the MySQL client password is not passed through the command line anymore, it is written in a configuration file located in the home directory of the user running &bmngr; : <tt>~/.my.cnf</tt>. <p> If that file doesn't exist at runtime, &bmngr; will create it and will then write the password provided in <tt>BM_MYSQL_ADMINPASS</tt> inside. <sect2 id="BM_MYSQL_DATABASES"><tt>BM_MYSQL_DATABASES</tt> <p> <em>Type: space-separated list, default: <tt>__ALL__</tt>.</em> <p> This is the list of databases you want to archive. You can put the keyword <tt>__ALL__</tt> if you like to backup every database without having to list them. <p> Example: <example> export BM_MYSQL_DATABASES="mysql mybase wordpress dotclear phpbb2" </example> <sect2 id="BM_MYSQL_SAFEDUMPS"><tt>BM_MYSQL_SAFEDUMPS</tt> <p> <em>Type: boolean, default: <tt>true</tt>.</em> <p> The best way to produce MySQL dumps is done by using mysqldump's <tt>--opt</tt> switch. This makes the dump directly usable with mysql (adds the drop table statements), locks tables during the dump generation and other cool things (see <tt>mysqldump</tt>). This is recommended for full-clean-safe backups, but needs a privileged user (for the lock permissions). <p> Example: <example> export BM_MYSQL_SAFEDUMPS="true" </example> <sect2 id="BM_MYSQL_ADMINLOGIN"><tt>BM_MYSQL_ADMINLOGIN</tt> <p> <em>Type: string, default: <tt>root</tt>.</em> <p> The MySQL login you want to use for connecting to the database. Make sure this login can read all the databases you've set in <tt>BM_MYSQL_DATABASES</tt>. <p> Example: <example> export BM_MYSQL_ADMINLOGIN="root" </example> <sect2 id="BM_MYSQL_ADMINPASS"><tt>BM_MYSQL_ADMINPASS</tt> <p> <em>Type: string, default: <tt>undefined</tt>.</em> <p> The MySQL client password. <p> If you have already made your own ~/.my.cnf configuration file, you don't have to set that variable. <p> If you don't know what is the <tt>~/.my.cnf</tt> configuration file, set the password, then &bmngr; will take care of creating the MySQL client configuration file. <p> Example: <example> export BM_MYSQL_ADMINPASS="MySecretPass" </example> <sect2 id="BM_MYSQL_HOST"><tt>BM_MYSQL_HOST</tt> <p> <em>Type: string, default: <tt>localhost</tt>.</em> <p> The database host where the databases are. <p> Example: <example> export BM_MYSQL_HOST="localhost" </example> <sect2 id="BM_MYSQL_PORT"><tt>BM_MYSQL_PORT</tt> <p> <em>Type: string, default: <tt>3306</tt>.</em> <p> The port on <tt>BM_MYSQL_HOST</tt> where the mysql server is listening. <p> Example: <example> export BM_MYSQL_PORT="3306" </example> <sect2 id="BM_MYSQL_FILETYPE"><tt>BM_MYSQL_FILETYPE</tt> <p> <em>Type: enum(gzip, bzip2), default: <tt>bzip2</tt>.</em> <p> The archive is made with mysqldump which renders SQL lines; the resulting text file can be compressed. If you want to compress the file, choose the compressor you want. Leave it blank if you want pure SQL files. <p> Example: <example> export BM_MYSQL_FILETYPE="bzip2" </example> <sect1 id="svn">Subversion repositories <sect2 id="svn-desc">Description <p> You can archive Subversion repositories with this method. The archive will be made with <tt>svnadmin</tt> and will contain XML data (text files). Like the mysql method, you can choose to compress it. <sect2 id="BM_SVN_REPOSITORIES"><tt>BM_SVN_REPOSITORIES</tt> <p> <em>Type: space-separated list</em> <p> This is the list of absolute paths to the SVN repositories to archive. <p> Example: <example> export BM_SVN_REPOSITORIES="/srv/svnroot/repo1 /srv/svnroot/repo2" </example> <sect2 id="BM_SVN_COMPRESSWITH"><tt>BM_SVN_COMPRESSWITH</tt> <p> <em>Type: enum(gzip, bzip2), default: <tt>bzip2</tt>.</em> <p> If you want to compress the resulting XML files, choose a compressor here. Leave this blank if you don't want any compression. <p> Example: <example> export BM_SVN_COMPRESSWITH="gzip" </example> <sect1 id="pipe">Generic methods <sect2 id="pipe-desc">Description <p> Even if most of the common needs are covered by the existing methods, there is always a case uncovered. &bmngr; provides a way for backing up anything, and can be used in such circumstances. <p> This method is called <tt>pipe</tt>, it is more complex to use but can virtually backup anything. The concept is simple, a pipe method is defined by the following items: <list> <item>A name (for naming the archive) <item>A command (that produces content on stdout) <item>A file type (txt, sql, dump, ...) <item>A compressor (gzip, bzip2) </list> <p> Those configuration keys are arrays, so you can implement as many pipe methods as you like. <p> For each pipe method defined, &bmngr; will launch the command given and redirect the content sent to stdout by this command to a file named with the name of the method and its filetype. Then, if the method uses a compressor, the file will be compressed. <sect2 id="pipe-example">Example <p> Example for archiving a remote MySQL database through SSH: <example> BM_PIPE_COMMAND[0]="ssh host -c \"mysqldump -ufoo -pbar base\"" BM_PIPE_NAME[0]="base" BM_PIPE_FILETYPE[0]="sql" BM_PIPE_COMPRESS[0]="gzip" </example> <p> Imagine you have a second pipe method to implement, for instance building a tarball trough SSH: <example> BM_PIPE_COMMAND[1]="ssh host -c \"tar -c -z /home/user\"" BM_PIPE_NAME[1]="host.home.user" BM_PIPE_FILETYPE[1]="tar.gz" BM_PIPE_COMPRESS[1]="" </example> <p> Note that we have incremented the array's index. <sect id="uploads">Upload Methods <sect1 id="uploads-desc">Description <p> <em>One of the most important thing to do when backing up file systems is to store the archives on different places. The more different physical spaces you have, the better. &bmngr; provides a way for achieving this goal : the upload methods. </em> <p> There are different upload methods, each of them behaves differently and provides particular features. In &bmngr; &bmngr-version; you can use FTP, SSH, RSYNC or Amazon S3 uploads. <p>In the same manner as for backup methods, you can choose to use as many upload methods as you like. If you don't want to use this feature at all, just put the keyword <tt>none</tt> in the configuration <tt>BM_UPLOAD_METHOD</tt>. <p> Note that the FTP, SSH and S3 methods are dedicated to upload archives, using those method depends on the use of at least one backup method. <p> On the opposite, the RSYNC method uploads a directory to remote locations, this directory can be your repository or whatever other location of your file sytem. <sect1 id="uploads-global">Global configuration keys <p> The following configuration keys are global in the upload section: <sect2 id="BM_UPLOAD_HOSTS"><tt>BM_UPLOAD_HOSTS</tt> <p> <em>Type: space-separated list</em> <p> Each of the hosts defined in that list is used by all the upload methods when establishing connections. For instance if you want to perform SSH uploads of your archives and RSYNC upload of a location to the same host, put it in this list. <p> Example: <example> export BM_UPLOAD_HOSTS="mirror1.lan.mysite.net mirror2.lan.mysite.net" </example> <sect2 id="BM_UPLOAD_DESTINATION"><tt>BM_UPLOAD_DESTINATION</tt> <p> <em>Type: string</em> <p> This is the absolute path of the directory in the remote hosts where to put the files uploaded. <p> If you have installed installed &bmngr; on the remote host, a good idea is to choose a sub-directory of the repository. Then, during the remote host purge phase, your uploads will be cleaned at the same time. <p> You can also define a destination dedicated to your host: <tt>BM_UPLOAD_DESTINATION="/var/archives/$HOSTNAME"</tt> <p>Example: <p> Let's say you want that all your uploads are performed on the host mirror2.lan.mysite.net, in the sub-directory /var/archives/uploads <example> export BM_UPLOAD_HOSTS="mirror2.lan.mysite.net" export BM_UPLOAD_DESTINATION="/var/archives/uploads" </example> <sect1 id="upload-ssh">SSH uploads <sect2 id="uploads-ssh-desc">Description <p> <em>Method name: <tt>ssh</tt>, goal: upload archives to remote hosts over SSH. This method depends on a backup method. </em> <p> If you want to upload your archives on remote locations, you can use the SSH method. This method is good if you like to use a secure tunnel between the two points of the upload. <p> The call to <tt>scp</tt> will be done with the identity of the user <tt>BM_UPLOAD_SSH_USER</tt>, thus, you have to make sure this user can have access to the repository (take care to the secure mode). <sect2 id="BM_UPLOAD_SSH_USER"><tt>BM_UPLOAD_SSH_USER</tt> <p> <em>Type: string</em> <p> This is the user to use for performing the ssh connection. Make sure this user can access repository. <p> Example: <example> export BM_UPLOAD_SSH_USER="bmngr" </example> <sect2 id="BM_UPLOAD_SSH_KEY"><tt>BM_UPLOAD_SSH_KEY</tt> <p> <em>Type: string</em> <p> This is the path to the private key of the user BM_UPLOAD_SSH_USER. <p> Example: <example> export BM_UPLOAD_SSH_KEY="/home/bmngr/.ssh/id_dsa" </example> <sect2 id="BM_UPLOAD_SSH_PORT"><tt>BM_UPLOAD_SSH_PORT</tt> <p> <em>Type: integer</em> <p> You may want to connect to remote hosts with a specific port. Use this configuration key then. <p> Example: <example> export BM_UPLOAD_SSH_PORT="1352" </example> <sect2 id="BM_UPLOAD_SSH_HOSTS"><tt>BM_UPLOAD_SSH_HOSTS</tt> <p> <em>Type: space-separated list</em> <p> Put here the list of hosts to use for SSH-only uploads. Note that if you put some hosts in <tt>BM_UPLOAD_HOSTS</tt>, they will be used as well. <p> Example: <example> export BM_UPLOAD_SSH_HOSTS="mirror3.lan.mysite.net" </example> <sect2 id="BM_UPLOAD_SSH_PURGE"><tt>BM_UPLOAD_SSH_PURGE</tt> <p> <em>Type: boolean</em> <p> If you set this boolean to "true", the remote archives will be purged before the new ones are uploaded. The purging rules are the same as the ones &bmngr; uses for local purging. If <tt>BM_UPLOAD_SSH_TTL</tt> is defined, this time to live will be used, else <tt>BM_ARCHIVE_TTL</tt> will be used. <p> Example: <example> export BM_UPLOAD_SSH_PURGE="true" export BM_UPLOAD_SSH_TTL="10" </example> <sect2 id="BM_UPLOAD_SSH_DESTINATION"><tt>BM_UPLOAD_SSH_DESTINATION</tt> <p> <em>Type: string</em> <p> Put here the destination for SSH-only uploads, this key overrides <tt>BM_UPLOAD_DESTINATION</tt>. <p> Example: <example> export BM_UPLOAD_SSH_DESTINATION="/var/archives/scp-uploads" </example> <sect1 id="upload-ssh-gpg"> Encrypted SSH uploads <sect2 id="upload-ssh-gpg-desc"> Description <p> <em>Method name: <tt>ssh-gpg</tt>, goal: encrypt arcives using public key encryption and upload the result to untrusted remote hosts over SSH. This method depends on a backup method. </em> <p> The upload using SSH can also be combined with public key encryption provided by <tt>gpg</tt>. The archives will be encrypted using a public key prior to sending them over the network, so on the remote server your files are protected from inspection. <p> This method can be used to protect your data from inspection on untrusted remote servers. However, since the encrypted files are not signed, this does not protect you from archive manipulation. So the <em>md5</em> hases are still needed. <p> This method uses all of the configuartion keys of the <em>ssh</em> method. One additional key is required. <sect2 id="BM_UPLOAD_SSH_GPG_RECIPIENT"><tt>BM_UPLOAD_SSH_GPG_RECIPIENT</tt> <p> <em>Type: string</em> <p> This parameter sets the recipient for which the archive is encrypted. A valid specification is a short or long key id, or a descriptive name, as explained in the <tt>gpg</tt> man page. The public key for this identity must be in the key ring of the user running <tt>gpg</tt>, which is the same as specified by <tt>BM_UPLOAD_SSH_USER</tt>. To test this run the command <tt> gpg --list-keys ID </tt> as that user, where <tt>ID</tt> is the ID as you give it to this parameter. If <tt>gpg</tt> displays exactly one key, then you are fine. Refer to the <tt>gpg</tt> man page for further details. <p> Example: <example> export BM_UPLOAD_SSH_GPG_RECIPIENT="email@address.com" export BM_UPLOAD_SSH_GPG_RECIPIENT="ECE009856" </example> <sect1 id="upload-ftp">FTP uploads <sect2 id="uploads-ftp-desc">Description <p> If security does not matter much on your lan (between the two points of the upload) you can choose to use the FTP method. One of the main pros of this method is that it can perform purging independently. You can safely use this method for uploading files to a host where you just have an FTP account. <sect2 id="BM_UPLOAD_FTP_SECURE"><tt>BM_UPLOAD_FTP_SECURE</tt> <p> <em>Type: boolean, default: false.</em> <p> If this variable is set to true, all FTP transfers will be done over SSL. <p> Example: <example> export BM_UPLOAD_FTP_SECURE="true" </example> <sect2 id="BM_UPLOAD_FTP_PASSIVE"><tt>BM_UPLOAD_FTP_PASSIVE</tt> <p> <em>Type: boolean, default: true.</em> <p> If this variable is set to true, FTP transfers will be performed in passive mode, which is mandatory in NATed/firewalled environments. <p> Example: <example> export BM_UPLOAD_FTP_PASSIVE="true" </example> <sect2 id="BM_UPLOAD_FTP_TTL"><tt>BM_UPLOAD_FTP_TTL</tt> <p> <em>Type: integer, default: $BM_ARCHIVE_TTL</em> <p> Using different <em>time to live</em> values for local and remote archives can be useful in certain situations. For instance, it's possible to install &bmngr; locally, make it build archives, upload them to a remote FTP host and then purge them locally (but not on the remote host). Doing this is possible with setting a null value to the local TTL (BM_ARCHIVE_TTL) and a non-null value to BM_UPLOAD_FTP_TTL. <p> Example: <example> # in your main conffile -- /etc/backup-manager.conf export BM_ARCHIVE_TTL="0" export BM_UPLOAD_FTP_TTL="5" export BM_POST_BACKUP_COMMAND="/usr/sbin/backup-manager --purge" # in your cron job: /usr/sbin/backup-manager /usr/sbin/backup-manager --purge (Don't put the post-command in the main conffile or you'll face an infinite loop.) </example> <sect2 id="BM_UPLOAD_FTP_USER"><tt>BM_UPLOAD_FTP_USER</tt> <p> <em>Type: string.</em> <p> Put here the FTP user to use for opening the connections. <p> Example: <example> export BM_UPLOAD_FTP_USER="bmngr" </example> <sect2 id="BM_UPLOAD_FTP_PASSWORD"><tt>BM_UPLOAD_FTP_PASSWORD</tt> <p> <em>Type: string.</em> <p> Put here the password to use for authenticating the FTP session,(in plain text). <p> Example: <example> export BM_UPLOAD_FTP_PASSWORD="secret" </example> <sect2 id="BM_UPLOAD_FTP_HOSTS"><tt>BM_UPLOAD_FTP_HOSTS</tt> <p> <em>Type: space-separated list</em> <p> Put here the list of hosts to use for FTP-only uploads. Note that if you put some hosts in <tt>BM_UPLOAD_HOSTS</tt>, they will be used as well. <p> Example: <example> export BM_UPLOAD_FTP_HOSTS="mirror4.lan.mysite.net" </example> <sect2 id="BM_UPLOAD_FTP_DESTINATION"><tt>BM_UPLOAD_FTP_DESTINATION</tt> <p> <em>Type: string</em> <p> Put here the destination for FTP-only uploads, this key overrides <tt>BM_UPLOAD_DESTINATION</tt>. <p> Example: <example> export BM_UPLOAD_FTP_DESTINATION="/var/archives/ftp-uploads" </example> <sect2 id="BM_UPLOAD_FTP_PURGE"><tt>BM_UPLOAD_FTP_PURGE</tt> <p> <em>Type: boolean, default: <tt>true</tt></em> <p> You can choose to purge deprecated archives before uploading new ones. This purge is done over FTP and uses the configuration key <tt>BM_ARCHIVE_TTL</tt> in the same manner as the local purge behaves (the FTP purge is not recursive though). <p> Example: <example> export BM_UPLOAD_FTP_PURGE="true" </example> <sect1 id="upload-s3">Amazon S3 uploads <sect2 id="uploads-s3-desc">Description <p> Amazon's new Simple Storage Service (S3) is an Internet "web service" that permits you to store unlimited blocks of data on their replicated and managed systems. See http://aws.amazon.com for more information. Registration is free and the rates are quite reasonable. <p> Using the S3 upload method will permit your archives to be stored on Amazon's S3 service. You must allocate a "bucket" to the exclusive use of Backup Manager. Each of your created archives will be uploaded to S3 and stored within this bucket in a key name that matches the name of the archive. <p> As with the other backup methods Backup Manager does not assist you in restoring files from archives. You must retrieve archives from S3 using other mechanisms such as the S3Shell provided as an examle command line utility by Amazon. <p> Note that when using this upload method, the <tt>BM_UPLOAD_HOSTS</tt> variable is ignored as the only valid host for S3 uploads in <tt>s3.amazon.com</tt>. <sect2 id="BM_UPLOAD_S3_DESTINATION"><tt>BM_UPLOAD_S3_DESTINATION</tt> <p> <em>Type: string.</em> <p> This option is required for the S3 upload method. This specifies the bucket used to store backup data. If the bucket does not exist it will be created as a private bucket. This key overrides <tt>BM_UPLOAD_DESTINATION</tt>. Note that Amazon requires that bucket names be globally unique. Be creative picking one. <p> Example: <example> export BM_UPLOAD_S3_DESTINATION="my_backup_bucket" </example> <sect2 id="BM_UPLOAD_S3_ACCESS_KEY"><tt>BM_UPLOAD_S3_ACCESS_KEY</tt> <p> <em>Type: string.</em> <p> This option is required for the S3 upload method. After you have registered Amazon will provide you an access key. You must use this key to access your storage on S3. <p> Example: <example> export BM_UPLOAD_S3_ACCESS_KEY="a9sabkz0342dasv" </example> <sect2 id="BM_UPLOAD_S3_SECRET_KEY"><tt>BM_UPLOAD_S3_SECRET_KEY</tt> <p> <em>Type: string.</em> <p> This option is required for the S3 upload method. After you have registered Amazon will provide you a secret key. You must use this key to write to your storage on S3. <p> Example: <example> export BM_UPLOAD_S3_SECRET_KEY="lkj2341askj123sa" </example> <sect2 id="BM_UPLOAD_S3_PURGE"><tt>BM_UPLOAD_S3_PURGE</tt> <p> <em>Type: boolean, default: <tt>true</tt></em> <p> You can choose to purge deprecated archives before uploading new ones. This purge is done over S3 and uses the configuration key <tt>BM_ARCHIVE_TTL</tt> in the same manner as the local purge behaves (the S3 purge is not recursive though). <p> Example: <example> export BM_UPLOAD_S3_PURGE="true" </example> <sect1 id="upload-rsync">RSYNC uploads <sect2 id="upload-rsync-desc">Description <p> You may want to upload some parts of your file system to some remote hosts. In these cases, archives are not needed, you just want to synchronize some directories to remote places. This is where the RSYNC upload method is useful. <p> RSYNC uploads need a SSH user/key pair to behave correctly, thus there is a dependency against the keys <tt>BM_UPLOAD_SSH_USER</tt> and <tt>BM_UPLOAD_SSH_KEY</tt>. <sect2 id="BM_UPLOAD_RSYNC_DIRECTORIES"><tt>BM_UPLOAD_RSYNC_DIRECTORIES</tt> <p> <em>Type: space-separated list</em> <p> Put here the list of local directories you want to upload with rsync. <p> Example: <example> export BM_UPLOAD_RSYNC_DIRECTORIES="/data/photos /data/videos /data/mp3" </example> <sect2 id="BM_UPLOAD_RSYNC_HOSTS"><tt>BM_UPLOAD_RSYNC_HOSTS</tt> <p> <em>Type: space-separated list</em> <p> Put here the list of hosts to use for RSYNC-only uploads. Note that if you put some hosts in <tt>BM_UPLOAD_HOSTS</tt>, they will be used as well. <p> Example: <example> export BM_UPLOAD_RSYNC_HOSTS="mirror5.lan.mysite.net" </example> <sect2 id="BM_UPLOAD_RSYNC_DESTINATION"><tt>BM_UPLOAD_RSYNC_DESTINATION</tt> <p> <em>Type: string</em> <p> Put here the destination for RSYNC-only uploads, this key overrides <tt>BM_UPLOAD_DESTINATION</tt>. <p> Example: <example> export BM_UPLOAD_RSYNC_DESTINATION="/var/archives/rsync-snapshots" </example> <sect2 id="BM_UPLOAD_RSYNC_DUMPSYMLINKS"><tt>BM_UPLOAD_RSYNC_DUMPSYMLINKS</tt> <p> <em>Type: boolean, default: <tt>false</tt>.</em> <p> You can choose to dereference files pointed by symlinks in your RSYNC snapshots. This feature should be used with care. <p> Example: <example> export BM_UPLOAD_RSYNC_DUMPSYMLINKS="false" </example> <sect id="exports">Exports <p> <em> Another way of storing your archives to a safe place is to use external media. </em> <p> In version &bmngr-version;, only CDs and DVDs are supported as external media, so we will discuss in this section only the <tt>BM_BURNING</tt> features. Other exports are expected to come in next versions though. <sect1 id="exports-burning">Burning CDR/DVD media <p> In the version &bmngr-version;, &bmngr; supports four different kinds of media: CDR, CDRW and DVD+R(W) and DVD-R(W). <sect2 id="BM_BURNING_METHOD"><tt>BM_BURNING_METHOD</tt> <p> Set the key <tt>BM_BURNING_METHOD</tt> to the method corresponding to the media you want to burn: <list> <item>CDR <item>CDRW <item>DVD <item>DVD-RW </list> <p> In <em>non-interactive mode</em> (when backup-manager is not lauchned from a terminal), any of these methods will try to put the whole archive repository in the media, if it does not fit in the media, it will try to put only the archives built on the day, if that's not possible, nothing will be burnt. <p> In <em>interactive mode</em> (when backup-manager is launched from a terminal), the whole repository will be burnt into as many media as needed. When a medium is satured with archives, backup-manager will pause the process asking the user to put a new media inside. <p> The <tt>CDRW</tt> and <tt>DVD-RW</tt> methods will first blank the media, so you can safely use these methods if you want to use the same medium several times. <p> The <tt>CDR</tt> and <tt>DVD</tt> medthods won't blank the medium first (DVD+RW media doesn't need blanking, it's possible to re-burn data on-the-fly over such media).. <p> DVD media are handled by the tool <tt>dvd+rw-tools</tt>, problems can occur in CRON environment with <tt>dvd+rw-tools</tt> versions prior to <tt>6.1</tt>, make sure to have <tt>6.1</tt> or later if you want to burn DVD media with Backup Manager. <p> As usual, you can put <tt>none</tt> in order to disable the burning process. <p> All those burning methods share the same configuration keys, so it's easy to switch from a medium to another. <sect2 id="BM_BURNING_DEVICE"><tt>BM_BURNING_DEVICE</tt> <p> <em>Type: string, default: <tt>/dev/cdrom</tt>.</em> <p> This is mandatory for using the burning feature, it's the device to use for mounting the media. It's needed by backup manager for performing the MD5 checks and for other needs. <p> Example: <example> export BM_BURNING_DEVICE="/dev/cdrom" </example> <sect2 id="BM_BURNING_DEVFORCED"><tt>BM_BURNING_DEVFORCED</tt> <p> <em>Type: string</em> <p> &bmngr; uses <tt>cdrecord</tt> for burning CDs. If when you run <tt>cdrecord -scanbus</tt> you don't see your burning device, that means you will have to force the device in ATA mode. To tell &bmngr; to do so, just put here the path to your device, and a switch will be appended to the cdrecord commandline like the following : <tt>cdrecrord ... dev=$BM_BURNING_DEVFORCED ...</tt>. <p> Leave this configuration key blank if you see your device with <tt>cdrecord -scanbus</tt>, in this case, &bmngr; will use the default cdrecord device for burning CDR media. <p> Example: <example> export BM_BURNING_DEVFORCED="/dev/cdrom" </example> <sect2 id="BM_BURNING_ISO_FLAGS"><tt>BM_BURNING_ISO_FLAGS</tt> <p> <em>Type: string, default: "-R -J"</em> <p> Media burned with &bmngr; will be made using a Joliet disc image. The flags defined in that variable will be appended to the mkisofs command lines in order to specify wich media image to use. <p> The default value "-R -J" produces a Joliet image, if you want to make non-Joliet disc images, you can change these flags. Refer to the manpage of mkisofs for details about possible disc images. <p> Don't change that variable if you don't know what you're doing. <p> Example: <example> export BM_BURNING_ISO_FLAGS="-R -J" </example> <sect2 id="BM_BURNING_MAXSIZE"><tt>BM_BURNING_MAXSIZE</tt> <p> <em>Type: integer, default: <tt>700</tt>.</em> <p> This is where you define the maximum size (in megabytes) of the media you will put in the device. Here is the list of the common sizes: <list> <item>CDR/CDRW: 650, 700, 800 <item>DVD: 4700 </list> <p> When &bmngr; looks in the repository for burning data, it will try to put the whole archive repository in the media. If the summarized size of the repository does not fit in <tt>BM_BURNING_MAXSIZE</tt>, &bmngr; will then try to put only the archives of the day. <p> Example for a CD burner <example> export BM_BURNING_METHOD="CDRW" export BM_BURNING_MAXSIZE="700" </example> <p> Example for a DVD burner: <example> export BM_BURNING_METHOD="DVD" export BM_BURNING_MAXSIZE="4700" </example> <sect2 id="BM_BURNING_CHKMD5"><tt>BM_BURNING_CHKMD5</tt> <p> <em>Type: boolean, default: <tt>true</tt>.</em> <p> If this boolean is set to a true value, every MD5 sum will be checked when the media is burned in order to make sure everything is ok. <p> Note that you can choose to perform this checkup with the command switch <tt>--md5check</tt>. <p> Example: <example> exports BM_BURNING_CHKMD5="true" </example> <sect id="advanced">Advanced features <p> <em>A couple of advanced features are provided, they will be covered in this section.</em> <sect1 id="BM_TEMP_DIR"><tt>BM_TEMP_DIR</tt> <p> <em>Type: string, default: <tt>/tmp/backup-manager</tt>.</em> <p> This is the temporary directory where temporary files are created by Backup Manager. <p> Example: <example> export BM_ARCHIVE_CHMOD="/tmp/backup-manager" </example> <sect1 id="advanced-logger">Logging to syslog <p> If you want to log &bmngr; actions to syslog, you can enable the internal logger, this is done with the configuration key <tt>BM_LOGGER</tt>. You are also able to choose which syslog facility to use thanks to the key <tt>BM_LOGGER_FACILITY</tt>. <sect2 id="BM_LOGGER"><tt>BM_LOGGER</tt> <p> <em>Type: boolean, default: <tt>true</tt>.</em> <p> If this boolean is set to true, &bmngr; will log everything to syslog. <p> Example: <example> exports BM_LOGGER="true" </example> <sect2 id="BM_LOGGER_FACILITY"><tt>BM_LOGGER_FACILITY</tt> <p> <em>Type: string, default: <tt>user</tt>.</em> <p> You can specify here a syslog facility to use, this can be useful if you like to filter messages from &bmngr; to a special syslog file. <p> Example: <example> exports BM_LOGGER_FACILITY="cron" </example> <sect1 id="advanced-externals">Writing external hooks <p> You have the availability to write your own hooks if you want to automate some special beaviours within the &bmngr; process. You may like to mount over NFS your archive repository <em>before</em> the backup session and unmount it after, or you may like to launch your own uploader script when the backup session is finished. <p> In order to let you implement any solution you like, &bmngr; provides two different hooks: the <em>pre-command</em> and <em>post-command</em> hooks. <sect2 id="BM_PRE_BACKUP_COMMAND"><tt>BM_PRE_BACKUP_COMMAND</tt> <p> <em>Type: string</em> <p> Put here the path to a program (or a shell command) to launch before the backup session. If the command fails (exits with non zero value, or prints the keyword <tt>false</tt> on stdout) the backup session will stop. If the pre-command succeeds, the process can follow. <p> Example with a basic shell command: <example> export BM_PRE_BACKUP_COMMAND="mount -t nfs mirror.lan.net:/exports/backups /var/archives" </example> <p> Example with a custom script: <example> export BM_PRE_BACKUP_COMMAND="/usr/local/bin/backup-prepare.pl $TODAY" </example> <sect2 id="BM_POST_BACKUP_COMMAND"><tt>BM_POST_BACKUP_COMMAND</tt> <p> <em>Type: string</em> <p> Put here the path to a program (or a shell command) to launch after the backup session. If the command fails (exits with non zero value, or prints the keyword <tt>false</tt> on stdout) &bmngr; will exit with an error code (and will log to syslog the post-command failure if the logger is enabled). <p> Example with a basic shell command: <example> export BM_POST_BACKUP_COMMAND="umount /var/archives" </example> <p> Example with a custom script: <example> export BM_POST_BACKUP_COMMAND="/usr/local/bin/backup-cleanup.pl $TODAY" </example> <chapt id="using">Using &bmngr; <p> <em>Now that you know in details how to write your configuration files, let's see how to use &bmngr;.</em> <sect id="command">Command line <sect1 id="command-desc">Restrictions <p> In version &bmngr-version;, &bmngr; can only be used by <tt>root</tt>, as it has be designed as a systemwide tool. <example> $ backup-manager backup-manager must be run as root. </example> If you want to launch it from the command line, you first have to use the <tt>root</tt> account. <example> $ su Password: # backup-manager -h /usr/sbin/backup-manager [options] Output: --help|-h : Print this short help message. --verbose|-v : Print what happens on STDOUT. --no-warnings : Disable warnings. Single actions: --upload|-u : Just upload the files of the day. --burn|-b : Just burn the files of the day. --md5check|-m : Just test the md5 sums. --purge|-p : Just purge old archives. Behaviour: --conffile|-c file : Choose an alternate config file. --force|-f : Force overwrite of existing archives. Unwanted actions: --no-upload : Disable the upload process. --no-burn : Disable the burning process. --no-purge : Disable the purge process. ouranos:/home/sukria# </example> <p> As you can see in the example above, using the <tt>-h</tt> switch (or <tt>--help</tt>) gives a short help message and prints all supported command switches. We will cover in this section each of them. <sect1 id="command-switched">Options <p> The following switches can be used for altering &bmngr;'s behaviour. <sect2 id="version"><tt>--version</tt> <p> Prints on stdout the &bmngr; version installed on the system and exit. <p> Example: <example> # backup-manager --version Backup Manager 0.6 </example> <sect2 id="verbose"><tt>--verbose</tt> or <tt>-v</tt> <p> Using this switch will enabled the verbose mode. All actions are reported on stdout. <p> Example: <example> # backup-manager -v Getting lock for backup-manager 10605 with /etc/backup-manager.conf: ok Cleaning /var/archives Entering directory /var/archives/lost+found. [...] </example> <sect2 id="no-warnings"><tt>--no-warnings</tt> <p> When a non-critical problem occurs (an error occured but the backup process can follow) &bmngr; will print a warning message (and will log it if the logger is enabled). If you don't want to see warning messages, you can append this switch on the command line. <sect2 id="conffile"><tt>--conffile</tt> or <tt>-c</tt> <p> &bmngr; relies on configuration files, by default, the file <tt>/etc/backup-manager.conf</tt> is used but you can choose to run it with a different one. This is done by using the following syntax : <example> # backup-manager -c <FILE> </example> <p> Note that &bmngr; is designed to work properly when launched in parallel mode with different configuration files, but it will refuse to run twice at the same time with the same configuration file. You can then safely do something like that: <example> # backup-manager -c /etc/backup-manager/backup-nfs.conf & # backup-manager -c /etc/backup-manager/backup-homedirs.conf & # backup-manager -c /etc/backup-manager/backup-rsync-filer.conf </example> <sect2 id="force"><tt>--force</tt> <p> When building an archive, &bmngr; looks if the archive already exists in the repository, if so, a warning is sent saying that the archive exists. If you want to bypass this warning and overwrite archives, use this switch. <sect2 id="upload"><tt>--upload</tt> or <tt>-u</tt> <p> If you have made a configuration file that enables the uploading system, you can ask &bmngr; to perform the uploading session instead of the whole process with this switch. <sect2 id="burn"><tt>--burn</tt> or <tt>-b</tt> [<DATE>] <p> If you have made a configuration file that enables the burning system, you can ask &bmngr; to perform the burning session instead of the whole process with this switch. <p> You can also ask &bmngr; to burn only archives of a given date with providing a timestamp after the <tt>--burn</tt> switch. <p> Example: <p> Burning all the archives made on March, 12nd 2006: <example> # backup-manager --bnurn 20060312 </example> <sect2 id="md5check"><tt>--md5check</tt> or <tt>-m</tt> <p> If you have made a configuration file that enables the MD5 checks on burnt media, you can ask &bmngr; to perform the MD5 checks instead of the whole process with this switch. <sect2 id="purge"><tt>--purge</tt> or <tt>-p</tt> <p> This switch will as &bmngr; to just perform the archive repository purge: removing any depreacted archives (according to <tt>BM_ARCHIVE_TTL</tt>. <sect2 id="no-upload"><tt>--no-upload</tt> or <tt>-p</tt> <p> Use this switch if you have a configuration file that enables the uploading system and want to run &bmngr; without it. <sect2 id="no-burn"><tt>--no-burn</tt> <p> Use this switch if you have a configuration file that enables the burning system and want to run &bmngr; without it. <sect2 id="no-purge"><tt>--no-purge</tt> or <tt>-p</tt> <p> Use this switch if you want to disable the purging phase. This can be useful if you like to implement another kind of purging system, with a post-command hook for instance. <sect id="cron">CRON integration <p> There is a global idea behind &bmngr;'s design: "<em>You won't do it if you have to think about it</em>". This is specifically true for backup concerns and it is strongly adviced to automate your backup process with a tasks scheduler like CRON. <p> Setting up a &bmngr; job in cron is pretty easy, you just have to write a shell script under the appropriate CRON sub-directory that will call backup-manager. The best sub-directory to choose is <tt>/etc/cron.daily</tt> as &bmngr; handles daily archives. <p> Here is an example of a CRON script: <example> cat > /etc/cron.daily/backup-manager #!/bin/sh /usr/sbin/backup-manager </example> <p> If you want to be notified by mail if a problem occurs during the backup session, just make sure you receive mails coming from CRON. When the verbose mode is off, only warnings and errors are printed on stdout, so you will receive a mail from the &bmngr; CRON job only in case of unexpected effects. <p> On the other hand, if you like to receive daily mails from the job, even if everything went well, just append the --verbose switch like that : <example> cat > /etc/cron.daily/backup-manager #!/bin/sh /usr/sbin/backup-manager --verbose </example> <!-- <chapt id="restore">Restoring Archives <p> You make archives for being ready to back your system up when needed. When such a time comes, you will have to restore an archive. In the current version, Backup Manager does not provide a way to automatically restore an archive. You'll have to do it by hand. This is planed to be supported in next versions though. <p> We will cover in this chapter evry method for restoring archives. Of course the restore method depends on the kind of archive you have to manipulate. <sect id="restore-tarballs">Tarballs <p> Let's begin with the basic kind of archives, the "tarballs". <sect1 id="restore-tar"><tt>tar</tt>, <tt>tar.gz</tt> and <tt>tar.bz2</tt> archives <p> All these archives are made using the <tt>tar</tt> command, restoring them will be about to use tar with the appropriate options for uncompressing the archive. <p> Exemple: <p> We want to restore the file <tt>/etc/passwd</tt> and the directory <tt>/home/john/work/</tt>. Every toplevel directory of our filesystem is archived: <example> BM_TARBALL_DIRECTORIES="/*" BM_TARBALL_BLACKLIST="/tmp /dev /proc /sys" </example> <p> We have to <sect1 id="restore-zip"><tt>zip</tt> archives <sect1 id="restore-dar"><tt>dar</tt> archives <sect id="restore-incremental">Incremental tarballs <sect id="restore-mysql">MySQL dumps <sect id="restore-svn">SVN dumps --> </book> </debiandoc> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:2 sgml-indent-data:nil sgml-parent-document:nil sgml-exposed-tags:nil sgml-declaration:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: --> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/doc/common.ent��������������������������������������������������������������0000644�0001750�0001750�00000001620�11503702461�016612� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="iso-8859-1"?> <!-- common entities file Bits of text which are language independent. In some cases it makes sense to break these out because repetitively maintaining them in different translations of the Developer's Reference is wasteful. In other cases, the data is rather volatile and breaking it out make maintenance easier. --> <!-- standard information --> <!ENTITY fsf-addr "Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"> <!ENTITY file-GPL "<file>/usr/share/common-licenses/GPL</file>"> <!ENTITY debian-formal "Debian GNU/Linux"> <!ENTITY url-gpl "http://www.gnu.org/copyleft/gpl.html"> <!-- Backup Manager related information --> <!ENTITY bmngr "Backup Manager"> <!ENTITY bmngr-version "0.7.7"> <!-- Email addresses --> <!ENTITY doc-email "<email>backup-manager-devel@backup-manager.org</email>"> ����������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/doc/README������������������������������������������������������������������0000644�0001750�0001750�00000000377�11503702461�015502� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������The text version of the user guide is provided here: user-guide.txt If you want to use the HTML or PDF format, grab it from the Backup Manager website: http://www.backup-manager.org/documentation/ This has been written in SGML with the debiandoc tools. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/��������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11503702461�014311� 5����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t14-purging-system.sh�����������������������������������������������������0000644�0001750�0001750�00000011447�11503702461�020257� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf source confs/tarball.conf export BM_REPOSITORY_ROOT="repository" export BM_ARCHIVE_METHOD="tarball" export BM_TARBALL_DIRECTORIES="$PWD" export BM_ARCHIVE_TTL="3" # Test the purge with BM_REPOSITORY_RECURSIVEPURGE set to false export BM_REPOSITORY_RECURSIVEPURGE="false" export BM_ARCHIVE_STRICTPURGE="false" source $locallib/sanitize.sh # The test actions if [[ -e $BM_REPOSITORY_ROOT ]]; then rm -rf $BM_REPOSITORY_ROOT/* fi date_today=$(date +"%Y%m%d") date_1_days_ago=$(date +"%Y%m%d" --date "1 days ago") date_2_days_ago=$(date +"%Y%m%d" --date "2 days ago") date_3_days_ago=$(date +"%Y%m%d" --date "3 days ago") date_4_days_ago=$(date +"%Y%m%d" --date "4 days ago") bm_init_env bm_init_today function create_test_repository() { create_directories # a md5 file touch $BM_REPOSITORY_ROOT/ouranos-$date_today.md5 touch $BM_REPOSITORY_ROOT/ouranos-$date_1_days_ago.md5 touch $BM_REPOSITORY_ROOT/ouranos-$date_2_days_ago.md5 touch $BM_REPOSITORY_ROOT/ouranos-$date_3_days_ago.md5 touch $BM_REPOSITORY_ROOT/ouranos-$date_4_days_ago.md5 # some files touch $BM_REPOSITORY_ROOT/ouranoqsdq.md5 touch $BM_REPOSITORY_ROOT/foo-bar.txt touch $BM_REPOSITORY_ROOT/passwd # Some archives of /usr/loca/bin touch $BM_REPOSITORY_ROOT/ouranos01-usr-local-bin.incremental-list.txt touch $BM_REPOSITORY_ROOT/ouranos01-usr-local-bin.$date_today.tar.bz2 touch $BM_REPOSITORY_ROOT/ouranos01-usr-local-bin.$date_1_days_ago.tar.bz2 touch $BM_REPOSITORY_ROOT/ouranos01-usr-local-bin.$date_2_days_ago.tar.bz2 touch $BM_REPOSITORY_ROOT/ouranos01-usr-local-bin.$date_3_days_ago.tar.bz2 # deprecated but should not be removed, as master. touch $BM_REPOSITORY_ROOT/ouranos01-usr-local-bin.$date_4_days_ago.master.tar.bz2 # some deprecated master backup isolated, should be removed touch $BM_REPOSITORY_ROOT/ouranos01-home-sukria.$date_4_days_ago.master.tar.bz2 # Some master archive touch $BM_REPOSITORY_ROOT/ouranos-etc.$date_1_days_ago.master.txt touch $BM_REPOSITORY_ROOT/ouranos-etc.$date_2_days_ago.master.txt touch $BM_REPOSITORY_ROOT/ouranos-etc.$date_3_days_ago.master.txt touch $BM_REPOSITORY_ROOT/ouranos-etc.$date_4_days_ago.master.txt # an archive with a prefix containing 8 digits touch $BM_REPOSITORY_ROOT/ouranos-01020102-fdisk.incremental-list.txt touch $BM_REPOSITORY_ROOT/ouranos01020102-fdisk.incremental-list.txt } function create_test_repository_subdirs() { for dir in subdir1 subdir2 subdir3 subdir4 do mkdir -p $BM_REPOSITORY_ROOT/$dir touch "$BM_REPOSITORY_ROOT/$dir/host-path-to-dir.$date_1_days_ago.master.txt" touch "$BM_REPOSITORY_ROOT/$dir/host-path-to-dir.$date_2_days_ago.txt" touch "$BM_REPOSITORY_ROOT/$dir/host-path-to-dir.$date_3_days_ago.txt" touch "$BM_REPOSITORY_ROOT/$dir/host-path-to-dir.$date_4_days_ago.txt" done } # build the repository create_test_repository create_test_repository_subdirs # call the purging system clean_directory "$BM_REPOSITORY_ROOT" # test what it did error=0 if [[ -e $BM_REPOSITORY_ROOT/ouranos-$date_4_days_ago.md5 ]]; then info "$BM_REPOSITORY_ROOT/ouranos-$date_4_days_ago.md5 exists" error=1 fi if [[ ! -e $BM_REPOSITORY_ROOT/ouranos01-usr-local-bin.$date_4_days_ago.master.tar.bz2 ]]; then info "$BM_REPOSITORY_ROOT/ouranos01-usr-local-bin.$date_4_days_ago.master.tar.bz2 has been removed" error=2 fi if [[ ! -e $BM_REPOSITORY_ROOT/passwd ]]; then info "$BM_REPOSITORY_ROOT/passwd has been removed" error=3 fi if [[ ! -e $BM_REPOSITORY_ROOT/ouranos-01020102-fdisk.incremental-list.txt ]] || [[ ! -e $BM_REPOSITORY_ROOT/ouranos01020102-fdisk.incremental-list.txt ]]; then info "files with 8 digits in their prefix removed" error=4 fi # the archive under a depth greater than 0 should not be purged if [[ ! -e "$BM_REPOSITORY_ROOT/subdir1/host-path-to-dir.$date_4_days_ago.txt" ]]; then info "archive $BM_REPOSITORY_ROOT/subdir1/host-path-to-dir.$date_4_days_ago.txt does not exist." error=5 fi rm -rf $BM_REPOSITORY_ROOT # Test the purging system in recursive mode export BM_REPOSITORY_RECURSIVEPURGE="true" create_test_repository create_test_repository_subdirs clean_directory "$BM_REPOSITORY_ROOT" # the archive under a depth greater than 0 should be purged if [[ -e "$BM_REPOSITORY_ROOT/subdir1/host-path-to-dir.$date_4_days_ago.txt" ]]; then info "archive $BM_REPOSITORY_ROOT/subdir1/host-path-to-dir.$date_4_days_ago.txt exists." error=5 fi # rm -rf $BM_REPOSITORY_ROOT exit $error �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t16-whitespaces.sh��������������������������������������������������������0000644�0001750�0001750�00000002036�11503702461�017575� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # $Revision: $ # $Date: $ set -e # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf export BM_ARCHIVE_METHOD="tarball" export BM_TARBALL_NAMEFORMAT="long" export BM_TARBALL_FILETYPE="tar.gz" export BM_TARBALL_DUMPSYMLINKS="false" export BM_ARCHIVE_ROOT="repository" export BM_ARCHIVE_METHOD="tarball" declare -a BM_TARBALL_TARGETS BM_TARBALL_TARGETS[0]="$PWD/dir*" BM_TARBALL_TARGETS[1]="$PWD/Name with spaces and s" source $locallib/sanitize.sh bm_init_env bm_init_today # The test actions rm -rf $BM_REPOSITORY_ROOT rm -rf dir1 dir2 "Name with spaces and s" mkdir dir1 cat /etc/passwd > dir1/file1 mkdir dir2 mkdir "Name with spaces and s" touch "Name with spaces and s"/toto create_directories make_archives rm -rf dir1 rm -rf dir2 rm -rf "Name with spaces and s" rm -rf repository exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t03-none.sh���������������������������������������������������������������0000644�0001750�0001750�00000001101�11503702461�016201� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash set -e # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf export BM_ARCHIVE_METHOD="none" export BM_UPLOAD_METHOD="none" export BM_BURNING_METHOD="none" source $locallib/sanitize.sh # The test actions bm_init_env bm_init_today create_directories make_archives upload_files burn_files rm -rf repository exit 0 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t08-regexp.sh�������������������������������������������������������������0000644�0001750�0001750�00000002575�11503702461�016561� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash set -e # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf source confs/tarball.conf export BM_ARCHIVE_ROOT="repository" export BM_ARCHIVE_METHOD="tarball" export BM_TARBALL_DIRECTORIES="$PWD/foo-*.d $PWD/bar[0-9][0-9] $PWD/static $PWD/rep-[a-zA-Z\-]*test" subdirs_to_create="$PWD/foo-bar.d $PWD/foo-foo.d $PWD/bar01 $PWD/bar21 $PWD/static $PWD/rep-sukria-test $PWD/rep-BackupManagertest" subdirs_to_ignore="foo.d bar-foo rep-132312-test" source $locallib/sanitize.sh # The test actions if [[ -e $BM_ARCHIVE_ROOT ]]; then rm -f $BM_ARCHIVE_ROOT/* fi for dir in "$subdirs_to_ignore $subdirs_to_create" do mkdir -p $dir done bm_init_env bm_init_today create_directories make_archives err_code=0 for dir in $subdirs_to_create do name=$(get_dir_name $dir long) if [[ ! -e "$BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$TODAY.master.tar.gz" ]]; then err_code=$(($err_code + 1)) echo "ERR: $BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX-$name.$TODAY.master.tar.gz" fi done rm -rf $BM_ARCHIVE_ROOT for dir in "$subdirs_to_ignore $subdirs_to_create" do rm -rf $dir done exit $err_code �����������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t17-tarball-lzma.sh�������������������������������������������������������0000644�0001750�0001750�00000001540�11503702461�017640� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags #verbose="true" #warnings="true" #verbosedebug="true" # The conffile part of the test, see confs/* for details. source confs/base.conf source confs/tarball.conf export BM_ARCHIVE_ROOT="repository" export BM_ARCHIVE_METHOD="tarball" export BM_TARBALL_DIRECTORIES="$PWD" export BM_TARBALL_FILETYPE="tar.lz" source $locallib/sanitize.sh # The test actions if [[ -e $BM_ARCHIVE_ROOT ]]; then rm -f $BM_ARCHIVE_ROOT/* fi bm_init_env bm_init_today create_directories make_archives name=$(get_dir_name $PWD long) if [[ -e "$BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$TODAY.master.tar.lz" ]]; then rm -rf $BM_ARCHIVE_ROOT exit 0 else exit 1 fi ����������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t11.2-pipe-encrypted.sh���������������������������������������������������0000644�0001750�0001750�00000002671�11503702461�020346� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e source testlib.sh # verbose="true" # warnings="true" source confs/base.conf # taken verbatim from file attached to bug #4 # http://bugzilla.backup-manager.org/cgi-bin/attachment.cgi?id=1&action=view export BM_REPOSITORY_ROOT="$PWD/repository" export BM_ARCHIVE_METHOD="pipe" export BM_ENCRYPTION_METHOD="gpg" export BM_ENCRYPTION_RECIPIENT="0x1EE5DD34" source $locallib/sanitize.sh bm_init_env bm_init_today BM_PIPE_COMMAND[0]="cat /etc/passwd" BM_PIPE_NAME[0]="passwd" BM_PIPE_FILETYPE[0]="txt" BM_PIPE_COMPRESS[0]="gzip" files[0]="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX-passwd.$TODAY.txt.gz.gpg" BM_PIPE_COMMAND[1]="echo 'sukria' ; date " BM_PIPE_NAME[1]="sukria" BM_PIPE_FILETYPE[1]="txt" BM_PIPE_COMPRESS[1]="bzip2" files[1]="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX-sukria.$TODAY.txt.bz2.gpg" BM_PIPE_COMMAND[2]="ls -lh /" BM_PIPE_NAME[2]="ls-root" BM_PIPE_FILETYPE[2]="txt" BM_PIPE_COMPRESS[2]="" files[2]="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX-ls-root.$TODAY.txt.gpg" # BM_PIPE_COMMAND[3]="/usr/bin/tototot" # BM_PIPE_NAME[3]="failure" # BM_PIPE_FILETYPE[3]="txt" # BM_PIPE_COMPRESS[3]="" # clean if [[ -e $PWD/repository ]]; then rm -rf $PWD/repository fi # BM actions create_directories make_archives # test of success/failure for file in $files do if [[ ! -e $file ]]; then warning "file $file does not exist" rm -rf $BM_ARCHIVE_ROOT exit 10 fi done rm -rf $BM_ARCHIVE_ROOT exit 0 �����������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t04-tarball-blacklist.sh��������������������������������������������������0000644�0001750�0001750�00000003466�11503702461�020652� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash set -e source testlib.sh source confs/base.conf # taken verbatim from file attached to bug #4 # http://bugzilla.backup-manager.org/cgi-bin/attachment.cgi?id=1&action=view export BM_REPOSITORY_ROOT="$PWD/repository" export BM_ARCHIVE_METHOD="tarball" export BM_TARBALL_NAMEFORMAT="long" export BM_TARBALL_FILETYPE="tar.gz" export BM_TARBALL_DUMPSYMLINKS="false" export BM_TARBALL_DIRECTORIES="$PWD/var/www/" export BM_TARBALL_BLACKLIST="$PWD/var/www/xim $PWD/var/www/Upload" # verbose="true" # warnings="true" source $locallib/sanitize.sh # clean if [[ -e $PWD/var ]]; then rm -rf $PWD/var fi if [[ -e $PWD/repository ]]; then rm -rf $PWD/repository fi # environement mkdir $PWD/var mkdir $PWD/var/www mkdir $PWD/var/www/real mkdir $PWD/var/www/xim mkdir $PWD/var/www/Upload touch $PWD/var/www/file1 touch $PWD/var/www/xim/file2 touch $PWD/var/www/Upload/file3 touch $PWD/var/www/real/file4 # BM actions bm_init_env bm_init_today create_directories make_archives # test of success/failure name=$(get_dir_name "$PWD/var/www" "long") archive="$BM_ARCHIVE_PREFIX$name.$TODAY.master.tar.gz" if [[ -e $BM_REPOSITORY_ROOT/$archive ]] then tempfile=$(mktemp) tar tvzf $BM_REPOSITORY_ROOT/$archive > $tempfile if grep "xim/file2" $tempfile then warning "Archive seems to have the blacklisted dirs:" if [[ "$warnings" = "true" ]]; then cat $tempfile fi rm -f $tempfile rm -rf $PWD/var rm -rf $PWD/repository exit 1 else rm -f $tempfile rm -rf $PWD/var rm -rf $PWD/repository exit 0 fi else warning "$archive doesn't exists" rm -rf $PWD/var rm -rf $PWD/repository exit 1 fi ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t02-rsync.sh��������������������������������������������������������������0000644�0001750�0001750�00000001317�11503702461�016410� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash set -e # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf source confs/upload-global.conf source confs/upload-rsync.conf source $locallib/sanitize.sh # The test actions bm_init_env bm_init_today create_directories make_archives upload_files # same test without SSH keys export BM_UPLOAD_SSH_HOST="localhost" export BM_UPLOAD_SSH_USER="" export BM_UPLOAD_SSH_KEY="" make_archives upload_files # remove the stuff generated # rm -rf repository exit 0 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t19-masterdatevalue.sh����������������������������������������������������0000644�0001750�0001750�00000001024�11503702461�020443� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash set -e # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf source confs/tarball-incremental.conf export BM_TARBALLINC_MASTERDATEVALUE=7 source $locallib/sanitize.sh # The test actions bm_init_env bm_init_today # remove the stuff generated rm -rf repository exit 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t12-tarball-incremental-dar.sh��������������������������������������������0000644�0001750�0001750�00000003412�11503702461�021735� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf source confs/tarball.conf export BM_ARCHIVE_ROOT="repository" export BM_ARCHIVE_METHOD="tarball-incremental" export BM_TARBALL_DIRECTORIES="$PWD/test" export BM_TARBALL_FILETYPE="dar" export BM_TARBALLINC_MASTERDATETYPE="weekly" # This test is for incremental backups, we don't want master backups! export BM_TARBALLINC_MASTERDATEVALUE="999" source $locallib/sanitize.sh # The test actions rm -rf test mkdir -p test mkdir test/dir1 touch test/file1 if [[ -e $BM_ARCHIVE_ROOT ]]; then rm -f $BM_ARCHIVE_ROOT/* fi bm_init_env bm_init_today create_directories make_archives YESTERDAY=$(date +%Y%m%d --date '1 days ago') name=$(get_dir_name "$PWD/test" long) if [[ -e "$BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$TODAY.master.1.dar" ]]; then mv "$BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$TODAY.master.1.dar" "$BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$YESTERDAY.master.1.dar" mkdir test/dir2 touch test/file2 make_archives # Now make sure file2 and dir2 are not saved in last darball for file in file1 dir1 do saved=$(dar -l $BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$TODAY.master | grep $file | awk '{print $1}') if [[ "$saved" == "[saved]" ]]; then warning "$file is saved in last archive, shouldn't." rm -rf $PWD/test rm -rf repository exit 1 fi done rm -rf $PWD/test rm -rf repository exit 0 else rm -rf $PWD/test rm -rf repository exit 1 fi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t11-pipe-method.sh��������������������������������������������������������0000644�0001750�0001750�00000002551�11503702461�017466� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash set -e source testlib.sh # verbose="true" # warnings="true" source confs/base.conf # taken verbatim from file attached to bug #4 # http://bugzilla.backup-manager.org/cgi-bin/attachment.cgi?id=1&action=view export BM_REPOSITORY_ROOT="$PWD/repository" export BM_ARCHIVE_METHOD="pipe" source $locallib/sanitize.sh bm_init_env bm_init_today BM_PIPE_COMMAND[0]="cat /etc/passwd" BM_PIPE_NAME[0]="passwd" BM_PIPE_FILETYPE[0]="txt" BM_PIPE_COMPRESS[0]="gzip" files[0]="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX-passwd.$TODAY.txt.gz" BM_PIPE_COMMAND[1]="echo 'sukria' ; date " BM_PIPE_NAME[1]="sukria" BM_PIPE_FILETYPE[1]="txt" BM_PIPE_COMPRESS[1]="bzip2" files[1]="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX-sukria.$TODAY.txt.bz2" BM_PIPE_COMMAND[2]="ls -lh /" BM_PIPE_NAME[2]="ls-root" BM_PIPE_FILETYPE[2]="txt" BM_PIPE_COMPRESS[2]="" files[2]="$BM_REPOSITORY_ROOT/$BM_ARCHIVE_PREFIX-ls-root.$TODAY.txt" # BM_PIPE_COMMAND[3]="/usr/bin/tototot" # BM_PIPE_NAME[3]="failure" # BM_PIPE_FILETYPE[3]="txt" # BM_PIPE_COMPRESS[3]="" # clean if [[ -e $PWD/repository ]]; then rm -rf $PWD/repository fi # BM actions create_directories make_archives # test of success/failure for file in $files do if [[ ! -e $file ]]; then warning "file $file does not exist" rm -rf $BM_ARCHIVE_ROOT exit 10 fi done rm -rf $BM_ARCHIVE_ROOT exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/Makefile������������������������������������������������������������������0000644�0001750�0001750�00000000310�11503702461�015743� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������trash=\ repository \ rep-BackupManagertest \ bar-foo \ foo-foo.d \ static \ var \ test.pl \ rep-132312-test \ rep-sukria-test \ foo.d \ bar01 \ foo-bar.d \ bar21 clean: rm -rf $(trash) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t09-tarball-incremental.sh������������������������������������������������0000644�0001750�0001750�00000005303�11503702461�021200� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash # $Revision: $ # $Date: $ set -e function clean() { rm -rf $BM_ARCHIVE_ROOT rm -rf $testdir # echo clean } # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf source confs/tarball.conf export BM_ARCHIVE_ROOT="repository" export BM_ARCHIVE_METHOD="tarball-incremental" export BM_TARBALL_DIRECTORIES="$PWD/testdir" export BM_TARBALL_FILETYPE="tar.gz" bm_init_env bm_init_today # cleaning rm -rf $BM_REPOSITORY_ROOT rm -rf testdir ############################################################## # first make a master backup of testdir/ ############################################################# master_day=$(date +'%w') export BM_TARBALLINC_MASTERDATEVALUE="${master_day}" export BM_TARBALLINC_MASTERDATETYPE="weekly" TODAY=$(date +%Y%m%d --date '1 days ago') info "making a master backup for $TODAY" source $locallib/sanitize.sh mkdir testdir mkdir testdir/dir1 cp /etc/passwd testdir/dir1/file1 create_directories make_archives # Very important, or tar won't notice differnce between files # added before or after that point. info "Waiting 5 seconds..." sleep 5 cat /etc/passwd > testdir/dir1/file_new_for_incremental ############################################################## # then make an incremental backup ############################################################# bm_init_today info "making an incremental backup for $TODAY" cp /etc/group testdir/dir1 touch testdir/newfile-only-incremental # frocing incremental backup with a false value export BM_TARBALLINC_MASTERDATEVALUE="999" export BM_TARBALLINC_MASTERDATETYPE="weekly" make_archives ############################################################## # Testing backups content ############################################################# info "Testing content" YESTERDAY=$(date +%Y%m%d --date '1 days ago') name=$(get_dir_name "$PWD/testdir" long) if [[ -e "$BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$YESTERDAY.master.tar.gz" ]]; then # Now make sure file2 and dir2 are not saved in last darball for file in file1 do grep=`tar tvzf $BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$TODAY.tar.gz 2>/dev/null | grep $file` || true if [[ -n "$grep" ]]; then warning "$file is saved in last archive, shouldn't." if [[ $verbose == true ]]; then tar tvzf $BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$TODAY.tar.gz fi clean exit 10 fi done clean exit 0 else clean exit 20 fi �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t20-hooks-bug235.sh�������������������������������������������������������0000644�0001750�0001750�00000001207�11503702461�017400� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash set -e export BM_TEST_EXIT_CODE_EXPECTED=10 # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf export BM_PRE_BACKUP_COMMAND="/NON_EXISTANT_FILE.pre.sh" export BM_POST_BACKUP_COMMAND="NON_EXISTANT_FILE.post.sh" source $locallib/sanitize.sh # The test actions bm_init_env bm_init_today exec_pre_command # FIXME: try to catch the exit 10 that will be thrown exec_post_command exit 0 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t10-tarball-dar-blacklist.sh����������������������������������������������0000644�0001750�0001750�00000004010�11503702461�021375� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e source testlib.sh #verbose="true" #warnings="true" source confs/base.conf # taken verbatim from file attached to bug #4 # http://bugzilla.backup-manager.org/cgi-bin/attachment.cgi?id=1&action=view export BM_REPOSITORY_ROOT="$PWD/repository" export BM_ARCHIVE_METHOD="tarball" export BM_TARBALL_NAMEFORMAT="long" export BM_TARBALL_FILETYPE="dar" export BM_TARBALL_DUMPSYMLINKS="no" export BM_TARBALL_DIRECTORIES="$PWD/var/www/" export BM_TARBALL_BLACKLIST="$PWD/var/www/xim $PWD/var/www/Upload/ /tmp/ titi" source $locallib/sanitize.sh if [[ ! -x $dar ]]; then info "cannot run test, need $dar" exit 1 fi # clean if [[ -e $PWD/var ]]; then rm -rf $PWD/var fi if [[ -e $PWD/repository ]]; then rm -rf $PWD/repository fi # environement mkdir $PWD/var mkdir $PWD/var/www mkdir $PWD/var/www/real mkdir $PWD/var/www/xim mkdir $PWD/var/www/Upload touch $PWD/var/www/file1 touch $PWD/var/www/xim/file2 touch $PWD/var/www/Upload/file3 touch $PWD/var/www/real/file4 # BM actions bm_init_env bm_init_today create_directories make_archives # test of success/failure name=$(get_dir_name "$PWD/var/www" "long") archive="$BM_ARCHIVE_PREFIX$name.$TODAY.master.1.dar" archive_name="$BM_ARCHIVE_PREFIX$name.$TODAY.master" if [[ -e $BM_REPOSITORY_ROOT/$archive ]] then tempfile=$(mktemp) dar -l $BM_REPOSITORY_ROOT/$archive_name > $tempfile if grep "xim/file2" $tempfile >/dev/null then warning "Archive seems to have the blacklisted dirs:" if [[ "$warnings" = "true" ]]; then echo "BM_TARBALL_BLACKLIST = $BM_TARBALL_BLACKLIST" cat $tempfile fi rm -f $tempfile rm -rf $PWD/repository rm -rf $PWD/var exit 1 else rm -f $tempfile rm -rf $PWD/repository rm -rf $PWD/var exit 0 fi else warning "$archive doesn't exists" rm -rf $PWD/repository rm -rf $PWD/var exit 1 fi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/confs/��������������������������������������������������������������������0000755�0001750�0001750�00000000000�11503702461�015421� 5����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/confs/tarball.conf��������������������������������������������������������0000644�0001750�0001750�00000000326�11503702461�017712� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������export BM_ARCHIVE_METHOD="tarball" export BM_TARBALL_NAMEFORMAT="long" export BM_TARBALL_FILETYPE="tar.gz" export BM_TARBALL_DUMPSYMLINKS="false" export BM_TARBALL_DIRECTORIES="$PWD" export BM_TARBALL_BLACKLIST="" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/confs/backup-manager.conf�������������������������������������������������0000644�0001750�0001750�00000000000�11503702461�021133� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/confs/base.conf�����������������������������������������������������������0000644�0001750�0001750�00000001275�11503702461�017207� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������export BM_REPOSITORY_ROOT="./repository" export BM_REPOSITORY_USER="$USER" export BM_REPOSITORY_GROUP="$USER" export BM_REPOSITORY_SECURE="false" export BM_REPOSITORY_RECURSIVEPURGE="false" export BM_ARCHIVE_TTL="5" export BM_ARCHIVE_PURGEDUPS="true" export BM_ARCHIVE_PREFIX="$HOSTNAME" export BM_ARCHIVE_METHOD="tarball" export BM_ARCHIVE_STRICTPURGE="true" export BM_LOGGER="true" export BM_LOGGER_LEVEL="warning" export BM_LOGGER_FACILITY="user" export BM_PRE_BACKUP_COMMAND="" export BM_POST_BACKUP_COMMAND="" export BM_TEMP_DIR="/tmp/backup-manager" export BM_ARCHIVE_NICE_LEVEL=10 export BM_TARBALL_FILETYPE="tar.gz" export BM_TARBALL_NAMEFORMAT="long" export BM_TARBALL_DUMPSYMLINKS="false" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/confs/upload-global.conf��������������������������������������������������0000644�0001750�0001750�00000000264�11503702461�021014� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������export BM_UPLOAD_METHOD="rsync" export BM_UPLOAD_HOSTS="" export BM_UPLOAD_DESTINATION="/tmp/uploads" if [[ ! -d $BM_UPLOAD_DESTINATION ]]; then mkdir $BM_UPLOAD_DESTINATION fi ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/confs/tarball-incremental.conf��������������������������������������������0000644�0001750�0001750�00000000470�11503702461�022211� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������export BM_ARCHIVE_METHOD="tarball-incremental" export BM_TARBALL_NAMEFORMAT="long" export BM_TARBALL_FILETYPE="tar.gz" export BM_TARBALL_DUMPSYMLINKS="false" export BM_TARBALL_DIRECTORIES="$PWD" export BM_TARBALL_BLACKLIST="" export BM_TARBALLINC_MASTERDATETYPE="weekly" export BM_TARBALLINC_MASTERDATEVALUE="1" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/confs/upload-rsync.conf���������������������������������������������������0000644�0001750�0001750�00000000253�11503702461�020710� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������export BM_UPLOAD_RSYNC_DIRECTORIES="$PWD" export BM_UPLOAD_RSYNC_HOSTS="localhost" export BM_UPLOAD_SSH_USER="$USER" export BM_UPLOAD_SSH_KEY="/home/${USER}/.ssh/bm-test" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/confs/pipe.conf�����������������������������������������������������������0000644�0001750�0001750�00000000173�11503702461�017226� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������export BM_ARCHIVE_METHOD="pipe" export BM_PIPE_COMMAND export BM_PIPE_NAME export BM_PIPE_FILETYPE export BM_PIPE_COMPRESS �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/confs/svn.conf������������������������������������������������������������0000644�0001750�0001750�00000000140�11503702461�017071� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������export BM_ARCHIVE_METHOD="svn" export BM_SVN_REPOSITORIES="" export BM_SVN_COMPRESSWITH="bzip2" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/confs/burning.conf��������������������������������������������������������0000644�0001750�0001750�00000000277�11503702461�017742� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������export BM_BURNING="false" export BM_BURNING_CHKMD5="true" export BM_BURNING_DEVICE="/dev/cdrom" export BM_BURNING_DEVFORCED="" export BM_BURNING_METHOD="CDRW" export BM_BURNING_MAXSIZE="700" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/confs/upload-ftp.conf�����������������������������������������������������0000644�0001750�0001750�00000000305�11503702461�020341� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������export BM_UPLOAD_FTP_USER="" export BM_UPLOAD_FTP_PASSWORD="" export BM_UPLOAD_FTP_HOSTS="" export BM_UPLOAD_FTP_PURGE="false" export BM_UPLOAD_FTP_TEST="false" export BM_UPLOAD_FTP_DESTINATION="" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/confs/upload-ssh.conf�����������������������������������������������������0000644�0001750�0001750�00000000173�11503702461�020350� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������export BM_UPLOAD_SSH_USER="" export BM_UPLOAD_SSH_KEY="" export BM_UPLOAD_SSH_HOSTS="" export BM_UPLOAD_SSH_DESTINATION="" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/confs/mysql.conf����������������������������������������������������������0000644�0001750�0001750�00000000340�11503702461�017432� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������export BM_ARCHIVE_METHOD="mysql" export BM_MYSQL_DATABASES="mysql" export BM_MYSQL_ADMINLOGIN="root" export BM_MYSQL_ADMINPASS="" export BM_MYSQL_HOST="localhost" export BM_MYSQL_PORT="3306" export BM_MYSQL_FILETYPE="bzip2" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t06-bug14.sh��������������������������������������������������������������0000644�0001750�0001750�00000001662�11503702461�016203� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash set -e # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf source confs/tarball.conf export BM_ARCHIVE_ROOT="repository" export BM_ARCHIVE_METHOD="tarball-incremental pipe" export BM_TARBALL_DIRECTORIES="$PWD" export BM_TARBALLINC_MASTERDATETYPE="weekly" export BM_TARBALLINC_MASTERDATEVALUE="1" source ../lib/sanitize.sh # The test actions if [[ -e $BM_ARCHIVE_ROOT ]]; then rm -f $BM_ARCHIVE_ROOT/* fi bm_init_env bm_init_today create_directories make_archives name=$(get_dir_name $PWD long) if [[ -e "$BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$TODAY.master.tar.gz" ]]; then rm -rf $PWD/repository exit 0 else rm -rf $PWD/repository exit 1 fi ������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/run-tests.sh��������������������������������������������������������������0000755�0001750�0001750�00000001767�11503702461�016627� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash set -e # set -x function count() { total=$(($total + 1)) } function test_failure() { file="$1" nb_failure=$(($nb_failure + 1)) echo "failed" } function test_success() { file="$1" nb_success=$(($nb_success + 1)) echo "ok" } # the conffile to test if [[ -f ./backup-manager.conf ]]; then conffile="./backup-manager.conf" source $conffile source $libdir/sanitize.sh init_default_vars fi total=0 nb_failure=0 # Now process the tests for file in t[0-9][0-9]*.sh do count echo -n "[t $total] Running test $file: " if bash $file 2>/dev/null; then test_success $file else test_failure $file fi done echo "------------------------------------------------------------------------------" pct_success=$(($nb_success * 100 / $total)) echo "Success score: $pct_success% ($nb_success/$total)" if [[ "$nb_failure" -gt 0 ]]; then echo "Failed tests: $nb_failure" fi ���������Backup-Manager-0.7.10.1/t/testlib.sh����������������������������������������������������������������0000644�0001750�0001750�00000003016�11503702461�016313� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� # Load the backup-manager's library locallib="../lib" libdir="$locallib" source $locallib/externals.sh source $locallib/gettext.sh source $locallib/logger.sh source $locallib/dialog.sh source $locallib/files.sh source $locallib/md5sum.sh source $locallib/backup-methods.sh source $locallib/upload-methods.sh source $locallib/burning-methods.sh source $locallib/actions.sh source $locallib/dbus.sh VERSION="0.7.1+svn" # external programs (cannot be sure where the are) zip=$(which zip) || true bzip=$(which bzip2) || true gzip=$(which gzip) || true gpg=$(which gpg) || true lzma=$(which lzma) || true dar=$(which dar) || true tar=$(which tar) || true rsync=$(which rsync) || true mkisofs=$(which mkisofs) || true growisofs=$(which growisofs) || true dvdrwformat=$(which dvd+rw-format) || true cdrecord=$(which cdrecord) || true md5sum=$(which md5sum) || true bc=$(which bc) || true mysqldump=$(which mysqldump) || true svnadmin=$(which svnadmin) || true logger=$(which logger) || true # Find which lockfile to use # If we are called by an unprivileged user, use a lockfile inside the user's home; # else, use /var/run/backup-manager.lock systemlockfile="/var/run/backup-manager.lock" userlockfile="$HOME/.backup-manager.lock" if [[ "$UID" != 0 ]]; then lockfile="$userlockfile" else lockfile="$systemlockfile" fi libdir="../lib" bmu="../backup-manager-upload" conffile="confs/base.conf" version="false" force="false" upload="false" burn="false" help="false" md5check="false" purge="false" warnings="false" verbose="false" bm_dbus_init ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t18-tarball-encryption.sh�������������������������������������������������0000644�0001750�0001750�00000001640�11503702461�021071� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf source confs/tarball.conf export BM_ARCHIVE_ROOT="repository" export BM_ARCHIVE_METHOD="tarball" export BM_TARBALL_DIRECTORIES="$PWD" export BM_TARBALL_FILETYPE="tar.gz" export BM_ENCRYPTION_METHOD="gpg" export BM_ENCRYPTION_RECIPIENT="0x1EE5DD34" source $locallib/sanitize.sh # The test actions if [[ -e $BM_ARCHIVE_ROOT ]]; then rm -f $BM_ARCHIVE_ROOT/* fi bm_init_env bm_init_today create_directories make_archives name=$(get_dir_name $PWD long) if [[ -e "$BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$TODAY.master.tar.gz.gpg" ]]; then # rm -rf $BM_ARCHIVE_ROOT exit 0 else exit 1 fi ������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t01-tarball.sh������������������������������������������������������������0000644�0001750�0001750�00000001556�11503702461�016677� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash set -e # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # verbosedebug="true" # warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf source confs/tarball.conf export BM_ARCHIVE_ROOT="repository" export BM_ARCHIVE_METHOD="tarball" export BM_TARBALL_DIRECTORIES="$PWD" export BM_TARBALL_FILETYPE="tar.gz" source $locallib/sanitize.sh # The test actions if [[ -e $BM_ARCHIVE_ROOT ]]; then rm -f $BM_ARCHIVE_ROOT/* fi bm_init_env bm_init_today create_directories make_archives name=$(get_dir_name $PWD long) if [[ -e "$BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$TODAY.master.tar.gz" ]]; then rm -rf $BM_ARCHIVE_ROOT exit 0 else exit 1 fi ��������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t07-dar.sh����������������������������������������������������������������0000644�0001750�0001750�00000002040�11503702461�016017� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash set -e # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf source confs/tarball.conf export BM_ARCHIVE_ROOT="repository" export BM_ARCHIVE_METHOD="tarball-incremental" export BM_TARBALL_DIRECTORIES="$PWD" export BM_TARBALL_FILETYPE="dar" export BM_TARBALLINC_MASTERDATETYPE="weekly" export BM_TARBALLINC_MASTERDATEVALUE="1" source $locallib/sanitize.sh if [[ ! -x $dar ]]; then info "cannot run test, need $dar" exit 1 fi # The test actions if [[ -e $BM_ARCHIVE_ROOT ]]; then rm -f $BM_ARCHIVE_ROOT/* fi bm_init_env bm_init_today create_directories make_archives name=$(get_dir_name $PWD long) if [[ -e "$BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$TODAY.master.1.dar" ]]; then rm -rf $BM_ARCHIVE_ROOT exit 0 else rm -rf $BM_ARCHIVE_ROOT exit 1 fi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t15-dupes.sh��������������������������������������������������������������0000644�0001750�0001750�00000003073�11503702461�016377� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # $Revision: $ # $Date: $ set -e # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf source confs/tarball.conf export BM_ARCHIVE_ROOT="repository" export BM_ARCHIVE_METHOD="tarball" export BM_TARBALL_DIRECTORIES="$PWD/testdir" export BM_TARBALLINC_MASTERDATETYPE="weekly" export BM_TARBALL_FILETYPE="tar.gz" export BM_ARCHIVE_PURGEDUPS="true" # This test is for incremental backups, we don't want master backups! export BM_TARBALLINC_MASTERDATEVALUE="999" source $locallib/sanitize.sh bm_init_env bm_init_today YESTERDAY=$(date +%Y%m%d --date '1 days ago') TODAY=$YESTERDAY # The test actions rm -rf $BM_REPOSITORY_ROOT rm -rf testdir mkdir testdir mkdir testdir/dir1 cat /etc/passwd > testdir/dir1/file1 create_directories make_archives name=$(get_dir_name "$PWD/testdir" long) if [[ -e "$BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$YESTERDAY.master.tar.gz" ]]; then bm_init_today make_archives if [[ -L "$BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$YESTERDAY.master.tar.gz" ]]; then info "Duplicate has been purged, succes." rm -rf testdir rm -rf $BM_ARCHIVE_ROOT exit 0 else warning "Duplicate has not been purged, failure." rm -rf testdir rm -rf $BM_ARCHIVE_ROOT exit 1 fi else rm -rf testdir rm -rf $BM_ARCHIVE_ROOT exit 20 fi ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t01.2tarball-bug63.sh�����������������������������������������������������0000644�0001750�0001750�00000001532�11503702461�017700� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash set -e # Each test script should include testlib.sh source "./testlib.sh" # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags # verbose="true" # warnings="true" # verbosedebug="true" # The conffile part of the test, see confs/* for details. source confs/base.conf source confs/tarball.conf export BM_ARCHIVE_ROOT="repository" export BM_ARCHIVE_METHOD="tarball" export BM_TARBALL_DIRECTORIES="$PWD" check_logger source $locallib/sanitize.sh # The test actions if [[ -e $BM_ARCHIVE_ROOT ]]; then rm -f $BM_ARCHIVE_ROOT/* fi bm_init_env bm_init_today create_directories make_archives name=$(get_dir_name $PWD long) if [[ -e "$BM_ARCHIVE_ROOT/$BM_ARCHIVE_PREFIX$name.$TODAY.master.tar.gz" ]]; then rm -rf $BM_ARCHIVE_ROOT exit 0 else exit 1 fi ����������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/t/t05-hooks.sh��������������������������������������������������������������0000644�0001750�0001750�00000001010�11503702461�016366� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash set -e # Each test script should include testlib.sh source testlib.sh # When the test is ready, set this to false for nice outputs. # if you want to see what happens, use those flags verbose="true" warnings="true" # The conffile part of the test, see confs/* for details. source confs/base.conf export BM_PRE_BACKUP_COMMAND="/bin/true" export BM_POST_BACKUP_COMMAND="echo true" source $locallib/sanitize.sh # The test actions bm_init_env bm_init_today exec_pre_command exec_post_command exit 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/backup-manager.conf.tpl�����������������������������������������������������0000644�0001750�0001750�00000043236�11503702461�020400� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Backup Manager Configuration File # # * This configuration file is divided into sections. # The 'global' section is mandatory, every keys defined in # this section are inherited in the other sections. # * There is one section per "backup method", you have to # fill the section of the chosen method. # ############################################################## ############################################################## # Repository - everything about where archives are ############################################################# # Where to store the archives export BM_REPOSITORY_ROOT="/var/archives" # Where to place temporary files export BM_TEMP_DIR="/tmp" # For security reasons, the archive repository and the generated # archives will be readable/writable by a given user/group. # This is recommended to set this to true. export BM_REPOSITORY_SECURE="true" # The repository will be readable/writable only by a specific # user:group pair if BM_REPOSITORY_SECURE is set to true. export BM_REPOSITORY_USER="root" export BM_REPOSITORY_GROUP="root" # You can also choose the permission to set the repository, default # is 770, pay attention to what you do there! export BM_REPOSITORY_CHMOD="770" ############################################################## # Archives - let's focus on the precious tarballs... ############################################################## # Each archive generated will be chmoded for security reasons # (BM_REPOSITORY_SECURE should be enabled for this). export BM_ARCHIVE_CHMOD="660" # Number of days we have to keep an archive (Time To Live) export BM_ARCHIVE_TTL="5" # At which frequency will you build your archives? # You can choose either "daily" or "hourly". # This should match your CRON configuration. export BM_ARCHIVE_FREQUENCY="daily" # Do you want to purge only the top-level directory or all # directories under BM_REPOSITORY_ROOT? export BM_REPOSITORY_RECURSIVEPURGE="false" # Do you want to replace duplicates by symlinks? # (archive-DAY is a duplicate of archive-(DAY - 1) if they # are both the same according to MD5 hashes). export BM_ARCHIVE_PURGEDUPS="true" # Prefix of every archive on that box (default is HOSTNAME) export BM_ARCHIVE_PREFIX="$HOSTNAME" # Should we purge only archives built with $BM_ARCHIVE_PREFIX export BM_ARCHIVE_STRICTPURGE="true" # You may want to nice the commands run for archive-creation # (Recommanded for desktop users.) # Choose a nice level from -20 (most favorable scheduling) to 19 (least favorable). export BM_ARCHIVE_NICE_LEVEL="10" # The backup method to use. # Available methods are: # - tarball # - tarball-incremental # - mysql # - pgsql # - svn # - pipe # - none # If you don't want to use any backup method (you don't want to # build archives) then choose "none" export BM_ARCHIVE_METHOD="tarball" ############################################################## # Encryption - because you cannot trust the place your # archives are ############################################################## # If you want to encrypt your archives locally, Backup Manager # can use GPG while building the archive (so the archive is never # written to the disk without being encrypted. # Note: this feature is only possible with the following archive types: # tar, tar.gz, tar.bz2 # Uncomment the following line if you want to enable encryption # export BM_ENCRYPTION_METHOD="gpg" # The encryption will be made using a GPG ID # Examples: # export BM_ENCRYPTION_RECIPIENT="0x1EE5DD34" # export BM_ENCRYPTION_RECIPIENT="Alexis Sukrieh" # export BM_ENCRYPTION_RECIPIENT="sukria@sukria.net" ############################################################## # Section "TARBALL" # - Backup method: tarball ############################################################# # Archive filename format # long : host-full-path-to-folder.tar.gz # short : parentfolder.tar.gz export BM_TARBALL_NAMEFORMAT="long" # Type of archives # Available types are: # tar, tar.gz, tar.bz2, tar.lz, dar, zip. # Make sure to satisfy the appropriate dependencies # (bzip2, dar, lzma, ...). export BM_TARBALL_FILETYPE="tar.gz" # You can choose to build archives remotely over SSH. # You will then need to fill the BM_UPLOAD_SSH variables # (BM_UPLOAD_SSH_HOSTS, BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY). # If this boolean is set to true, archive will be saved locally (in # BM_REPOSITORY_ROOT but will be built by the remote host). # Thus, BM_TARBALL_DIRECTORIES will be used to backup remote directories. # Those archive will be prefixed with the remote host name. export BM_TARBALL_OVER_SSH="false" # Do you want to dereference the files pointed by symlinks ? # enter true or false (true can lead to huge archives, be careful). export BM_TARBALL_DUMPSYMLINKS="false" # Targets to backup # You can use two different variables for defining the targets of # your backups, either a simple space-separated list (BM_TARBALL_DIRECTORIES) # or an array (BM_TARBALL_TARGETS[]). # Use the first one for simple path that doesn't contain spaces in their name. # Use the former if you want to specify paths to backups with spaces. # It's recommanded to use BM_TARBALL_TARGETS[] though. # Warning! You *must not* use both variables at the same time. # Paths without spaces in their name: # export BM_TARBALL_DIRECTORIES="/etc /boot" # If one or more of the targets contain a space, use the array: declare -a BM_TARBALL_TARGETS BM_TARBALL_TARGETS[0]="/etc" BM_TARBALL_TARGETS[1]="/boot" export BM_TARBALL_TARGETS # Files to exclude when generating tarballs, you can put absolute # or relative paths, Bash wildcards are possible. export BM_TARBALL_BLACKLIST="/dev /sys /proc /tmp" # With the "dar" filetype, you can choose a maximum slice limit. export BM_TARBALL_SLICESIZE="1000M" # Extra options to append to the tarball generation # (take care to what you do; this will be silently added to the # command line.) export BM_TARBALL_EXTRA_OPTIONS="" ############################################################## # The tarball-incremental method uses the same keys as the # tarball method, plus two others. ############################################################# # Which frequency to use for the master tarball? # possible values: weekly, monthly export BM_TARBALLINC_MASTERDATETYPE="weekly" # Number of the day, in the BM_TARBALLINC_MASTERDATETYPE frequency # when master tarballs should be made export BM_TARBALLINC_MASTERDATEVALUE="1" # Examples: you want to make master tarballs every friday: # BM_TARBALLINC_MASTERDATETYPE="weekly" # BM_TARBALLINC_MASTERDATEVALUE="5" # # Or every first day of the month: # BM_TARBALLINC_MASTERDATETYPE="monthly" # BM_TARBALLINC_MASTERDATEVALUE="1" ############################################################## # Backup method: MYSQL ############################################################# # This method is dedicated to MySQL databases. # You should not use the tarball method for backing up database # directories or you may have corrupted archives. # Enter here the list of databases to backup. # Wildcard: __ALL__ (will dump all the databases in one archive) export BM_MYSQL_DATABASES="__ALL__" # The best way to produce MySQL dump is done by using the "--opt" switch # of mysqldump. This make the dump directly usable with mysql (add the drop table # statements), lock the tables during the dump and other things. # This is recommended for full-clean-safe backups, but needs a # privileged user (for the lock permissions). export BM_MYSQL_SAFEDUMPS="true" # The user who is allowed to read every databases filled in BM_MYSQL_DATABASES export BM_MYSQL_ADMINLOGIN="root" # its password export BM_MYSQL_ADMINPASS="" # the host where the database is export BM_MYSQL_HOST="localhost" # the port where MySQL listen to on the host export BM_MYSQL_PORT="3306" # which compression format to use? (gzip or bzip2) export BM_MYSQL_FILETYPE="bzip2" # Extra options to append to mysqldump # (take care to what you do; this will be silently added to the # command line.) export BM_MYSQL_EXTRA_OPTIONS="" ############################################################## # Backup method: PostgreSQL ############################################################# # This method is dedicated to PostgreSQL databases. # You should not use the tarball method for backing up database # directories or you may have corrupted archives. # Enter here the list of databases to backup. # Wildcard: __ALL__ (will dump all the databases in one archive) export BM_PGSQL_DATABASES="__ALL__" # The user who is allowed to read every databases filled in BM_PGSQL_DATABASES export BM_PGSQL_ADMINLOGIN="root" # its password export BM_PGSQL_ADMINPASS="" # the host where the database is export BM_PGSQL_HOST="localhost" # the port where PostgreSQL listen to on the host export BM_PGSQL_PORT="5432" # which compression format to use? (gzip or bzip2) export BM_PGSQL_FILETYPE="bzip2" # Extra options to append to pg_dump # (take care to what you do; this will be silently added to the # command line.) export BM_PGSQL_EXTRA_OPTIONS="" ############################################################## # Backup method: svn ############################################################# # Absolute paths to the svn repositories to archive export BM_SVN_REPOSITORIES="" # You can compress the resulting XML files # Supported compressor are: bzip2 and gzip export BM_SVN_COMPRESSWITH="bzip2" ############################################################## # Backup method: pipe ############################################################# # The "pipe" method is a generic way of making archive. # Its concept is simple, for every kind of archive you want # to make, you give: a command which will send output on stdout, # a name, a file type and optionnaly, a compressor. # Be careful, this feature uses arrays! declare -a BM_PIPE_COMMAND declare -a BM_PIPE_NAME declare -a BM_PIPE_FILETYPE declare -a BM_PIPE_COMPRESS # You can virtually implement whatever backup scenario you like # with this method. # # The resulting archives will be named like this: # $BM_ARCHIVE_PREFIX-$BM_PIPE_NAME.$DATE.$BM_PIPE_FILETYPE # If you specified a BM_PIPE_COMPRESS option, the resulting filename # will change as expected (eg, .gz if "gzip"). # # Here are a couple of examples for using this method: # Archive a remote MySQL database through SSH: # BM_PIPE_COMMAND[0]="ssh host -c \"mysqldump -ufoo -pbar base\"" # BM_PIPE_NAME[0]="base" # BM_PIPE_FILETYPE[0]="sql" # BM_PIPE_COMPRESS[0]="gzip" # This will make somthing like: localhost-base.20050421.sql.gz # Archive a specific directory, on a remote server through SSH: # BM_PIPE_COMMAND[0]="ssh host -c \"tar -c -z /home/user\"" # BM_PIPE_NAME[0]="host.home.user" # BM_PIPE_FILETYPE[0]="tar.gz" # BM_PIPE_COMPRESS[0]="" # This will make somthing like: localhost-host.home.user.20050421.tar.gz export BM_PIPE_COMMAND export BM_PIPE_NAME export BM_PIPE_FILETYPE export BM_PIPE_COMPRESS ############################################################## # Section "UPLOAD" # You can upload archives to remote hosts with different # methods. ############################################################# # Which method to use for uploading archives, you can put # multiple methods here. # Available methods: # - scp # - ssh-gpg # - ftp # - rsync # - s3 # - none # If you don't want to use any upload method (you don't want to # upload files to remote hosts) then choose "none" export BM_UPLOAD_METHOD="" # where to upload (global to all methods. Not required to be set for S3) export BM_UPLOAD_HOSTS="" # Where to put archives on the remote hosts (global) export BM_UPLOAD_DESTINATION="" ############################################################## # The SSH method ############################################################# # the user to use for the SSH connections/transfers export BM_UPLOAD_SSH_USER="" # The private key to use for opening the connection export BM_UPLOAD_SSH_KEY="" # specific ssh hosts export BM_UPLOAD_SSH_HOSTS="" # port to use for SSH connections (leave blank for default one) export BM_UPLOAD_SSH_PORT="" # destination for ssh uploads (overrides BM_UPLOAD_DESTINATION) export BM_UPLOAD_SSH_DESTINATION="" # purge archives on remote hosts before uploading? export BM_UPLOAD_SSH_PURGE="true" # If you set BM_UPLOAD_SSH_PURGE, you can specify a time to live # for archives uploaded with SSH. # This can let you use different ttl's locally and remotely # By default, BM_ARCHIVE_TTL will be used. export BM_UPLOAD_SSH_TTL="" ############################################################## # The SSH-GPG method # The ssh-gpg method uses the same configuration keys as the # ssh method, plus one other ############################################################# # The gpg public key used for encryption, this can be a short # or long key id, or a descriptive name. See gpg man page for # all possibilities how to specify a key. export BM_UPLOAD_SSHGPG_RECIPIENT="" ############################################################## # The FTP method ############################################################# # Use FTP secured transfers (FTP over TLS) # User, password and data will be uploaded encrypted with SSL. # Passive mode will be automaticaly activated export BM_UPLOAD_FTP_SECURE="false" # Do you want to use FTP passive mode? # This is mandatory for NATed/firewalled environments export BM_UPLOAD_FTP_PASSIVE="true" # Test the FTP connection before starting archives upload. # This will enable BM to try sending a 2MB test file before # sending any archive export BM_UPLOAD_FTP_TEST="false" # the user to use for the FTP connections/transfers export BM_UPLOAD_FTP_USER="" # the FTP user's password export BM_UPLOAD_FTP_PASSWORD="" # FTP specific remote hosts export BM_UPLOAD_FTP_HOSTS="" # purge archives on remote hosts before uploading? export BM_UPLOAD_FTP_PURGE="true" # You can specify a time to live for archives uploaded with FTP # This can let you use different ttl's locally and remotely # By default, BM_ARCHIVE_TTL will be used. export BM_UPLOAD_FTP_TTL="" # destination for FTP uploads (overrides BM_UPLOAD_DESTINATION) export BM_UPLOAD_FTP_DESTINATION="" ############################################################## # The S3 method ############################################################# # The Amazon S3 method requires that you secure an S3 # account. See http://aws.amazon.com # The bucket to upload to. This bucket must be dedicated to backup-manager export BM_UPLOAD_S3_DESTINATION="" # the S3 access key provided to you export BM_UPLOAD_S3_ACCESS_KEY="" # the S3 secret key provided to you export BM_UPLOAD_S3_SECRET_KEY="" # purge archives on remote hosts before uploading? export BM_UPLOAD_S3_PURGE="false" ############################################################## # The RSYNC method ############################################################# # Which directories should be backuped with rsync export BM_UPLOAD_RSYNC_DIRECTORIES="" # Destination for rsync uploads (overrides BM_UPLOAD_DESTINATION) export BM_UPLOAD_RSYNC_DESTINATION="" # The list of remote hosts, if you want to enable the upload # system, just put some remote hosts here (fqdn or IPs) # Leave it empty if you want to use the hosts that are defined in # BM_UPLOAD_HOSTS export BM_UPLOAD_RSYNC_HOSTS="" # Do you want to dereference the files pointed by symlinks? # enter true or false (true can lead to huge archives, be careful). export BM_UPLOAD_RSYNC_DUMPSYMLINKS="false" ############################################################## # Section "BURNING" # - Automatic CDR/CDRW/DVDR burning ############################################################# # the method of burning archives from the list : # - DVD : burn archives on a DVD medium # (that doesn't need formatting, like DVD+RW). # # - DVD-RW : blank the DVD medium and burn archives # (recommanded for DVD-RW media). # # - CDRW : blank the CDRW and burn the whole # ARCHIVES_REPOSITORY or only # the generated archives. # # - CDR : burn the whole ARCHIVES_REPOSITORY or # only the generated archives. # - none : disable the burning system # # Note that if backup-manager is run from interactive prompt you # will be asked to insert disc(s) when needed export BM_BURNING_METHOD="none" # When the CD is burnt, it is possible to check every file's # MD5 checksum to see if the CD is not corrupted. export BM_BURNING_CHKMD5="false" # The device to use for mounting the cdrom export BM_BURNING_DEVICE="/dev/cdrom" # You can force cdrecord to use a specific device # Fill in the full path to the device to use or even # e.g. BM_BURNING_DEVFORCED="/dev/cdrom" # If none specified, the default cdrecord device will be used. export BM_BURNING_DEVFORCED="" # By default backup-manager will make Joliet media (using the mkisofs switches # : "-R -J"). You can change these if you want to use non-Joliet disc images. # Change this only if you know what you're doing. Refer to mkisofs(8) for # details. export BM_BURNING_ISO_FLAGS="-R -J" # enter here the max size of your media # (usal sizes are 4200 for DVD media and 700 or 800 for CDR media) export BM_BURNING_MAXSIZE="650" ############################################################## # Advanced settings, use this with care. ############################################################# # Every output made can be sent to syslog # set this to "true" or "false" export BM_LOGGER="true" # Which level of messages do you want to log to syslog? # possible values are : debug,info,warning,error export BM_LOGGER_LEVEL="warning" # You can choose which facility to use export BM_LOGGER_FACILITY="user" # Enter here some shell script. # It will be executed before the first action of backup-manager. export BM_PRE_BACKUP_COMMAND="" # Enter here some shell script. # It will be executed after the last action of backup-manager. export BM_POST_BACKUP_COMMAND="" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/THANKS����������������������������������������������������������������������0000644�0001750�0001750�00000000555�11503702461�014766� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������I would like to thank Esteban Manchado Velázquez who has helped me a lot in the debianization of backup-manager. All his advices and comments made me aware of some interesting issues and gave backup-manager a better shape. Also a big thank to everyone who helped the backup-manager project, translators, contributors and of course, users. - Alexis Sukrieh. ���������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/backup-manager-purge��������������������������������������������������������0000755�0001750�0001750�00000021077�11503702461�020000� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl # Copyright © 2005-2010 Alexis Sukrieh # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. use strict; use warnings; =pod =head1 NAME backup-manager-purge - backup-manager's wrapper for outdating files =head1 SYNOPSIS backup-manager-purge [TTL] <options> =head1 DESCRIPTION B<backup-manager-purge> is the only authorized entity that can say if an archive should be purged or not. Any tasks used by backup-manager may have to know if an archive is deprecated (eg: the purging phase of an upload method). This tool is here to fulfill that need. Given a I<time to live (TTL)> and a list of archives, B<backup-manager-purge> will return another list of archives, corresponding to the ones that are outdated by the TTL. =head1 REQUIRED ARGS =over 4 =item B<--ttl=>I<time-to-live> Specify the time to live (in days) for the archives. Any archive that is older than I<ttl> days will be outdated. =back =head1 OPTIONAL ARGS =item B<--files-from=>file A file containing a list of archives to parse, one archive per line. If this option is not used, STDIN will be used for catching the files to parse. =back =head1 RETURN B<backup-manager-purge> will return the list of outdated files on STDOUT, one file per line. =head1 ERROR CODES If an error occurs, it will print the error message on stderr and will exit with an error code greater than 0. Here are the possible error codes: =over 4 =item bad command line (wrong arguments) : 10 =item internal error (should be reported as a bug) : 20 =back =head1 SEE ALSO backup-manager(8) backup-manager-upload(8) =head1 AUTHORS Concept and design by Alexis Sukrieh and Jan Metzger. =cut ############################################################## # Uses ############################################################## use BackupManager::Config; use BackupManager::Logger; use BackupManager::Dialog; use POSIX qw(strftime); use File::Basename; use Data::Dumper; ############################################################## # Constants ############################################################## use constant E_SUCCESS => 0; use constant E_INVALID => 10; use constant E_INTERNAL => 20; use constant TRUE => 1; use constant FALSE => 0; use constant DIALOG_VERBOSE => 0; use constant MSG_INTERNAL => "Internal system error, please report the bug."; ############################################################## # Global variables ############################################################## my $g_ttl = undef; my $g_filelist = undef; my @g_archives = (); my @g_outdated = (); my $g_fh = *STDIN; my $g_rh_archives = {}; ############################################################## # Command line parsing ############################################################## BackupManager::Config::getopt("$0 -ttl=<TTL> --files-from=<FILE>\n --ttl|-t: the time to live for outdating files --files-from|-f: a file that contains the list of archives to process", 'ttl|t=s' => \$g_ttl, 'files-from|f=s' => \$g_filelist, ); ############################################################## # Subs ############################################################## # Takes an archive an returns all meta-data contained in its name sub parse_archive ($) { my ($archive) = @_; unless (defined $archive) { print_error MSG_INTERNAL; exit E_INTERNAL; } my ($prefix, $name, $date, $master, $filetype); $archive = basename ($archive); if ($archive =~ m/^\s*($ENV{BM_ARCHIVE_PREFIX})-?(\S+)?\.?(\d{8})\.(master\.)?(\S+)\s*$/) { ($prefix, $name, $date, $master, $filetype) = ($1, $2, $3, $4, $5); $master = $master ? 1 : 0; $name = "$prefix-md5" if $filetype eq 'md5' and not $name; } # The archive pattern elsif ($archive =~ /^\s*([^-]+)-(\S+)\.(\d{8})\.(\S+)\s*$/) { $prefix = $1; $name = $2; $date = $3; my $suffix = $4; if ($suffix =~ /master\.(\S+)/) { $master = 1; $filetype = $1; } elsif ($suffix =~ /\.?(.+)/) { $master = 0; $filetype = $1; } } # The md5 file pattern elsif ($archive =~ /^\s*([^-]+)-(\d{8})\.md5\s*$/) { $prefix = $1; $name = "$prefix-md5"; $date = $2; $filetype = "md5"; $master = 0; } # Unknown pattern else { return undef; } return { prefix => $prefix, name => $name, date => $date, master => $master, filetype => $filetype}; } # Takes a file handle and an array ref, parse the file's content # and store in the array exiting filenames. sub read_archives($$) { my ($ra_archives, $fh) = @_; my $archive = ""; while (<$fh>) { chomp(); if (/^\s*(\S+)\s*$/) { $archive = $1; } my $rh_data = parse_archive ($archive); next unless defined $rh_data; next unless defined $rh_data->{date}; if ($rh_data->{master}) { $g_rh_archives->{$rh_data->{name}}{pathByDateMasters}{$rh_data->{date}} = $archive; } $g_rh_archives->{$rh_data->{name}}{pathByDate}{$rh_data->{date}} = $archive; $g_rh_archives->{dataByPath}{$archive} = $rh_data; push @{$ra_archives}, $archive; } } # Takes an archive and a meta-data hash ref # and return 1 if the archive is outded according to $g_ttl, # 0 else. sub outdate_master_archive($$$$$) { my ($archive, $rh_meta, $purge_date, $ra_archives, $ra_outdated) = @_; } # Takes two array refs. Reads from the first one the list of archives # to process, and push in the second one the outdated archives. sub outdate_archives($$) { my ($ra_archives, $ra_outdated) = @_; unless (defined $ra_archives and defined $ra_outdated) { exit E_INTERNAL; } my $purge_date = strftime ('%Y%m%d', localtime(time() - $g_ttl * 24 * 3600)); print_info "Outdating archives made before $purge_date"; my %seen = (); foreach my $archive (sort @{$ra_archives}) { my $data = $g_rh_archives->{dataByPath}{$archive}; next unless defined $data; next unless defined $data->{date}; next if $seen{$archive}; $seen{$archive} = 1; # if the date of the archive is older than $purge_date, we may have to outdate it # unless, nothing to do for that archive. next if ($data->{date} > $purge_date); # we can outdate a master only if a younger master exists if ($data->{master}) { foreach my $master_date ( keys %{$g_rh_archives->{$data->{name}}{pathByDateMasters}}) { if ($master_date > $data->{date}) { push @{$ra_outdated}, $archive; last; } } } # here the archive is deprecated, its date is < to $purge_date else { # if BM_ARCHIVE_STRICTPURGE is true, we can only purge # an archive prefixed with BM_ARCHIVE_PREFIX next if (($ENV{BM_ARCHIVE_STRICTPURGE} eq "true") and ($data->{prefix} ne $ENV{BM_ARCHIVE_PREFIX})); # now, we're sure we can outdate the archive push @{$ra_outdated}, $archive; } } } ############################################################## # Main ############################################################## # Init init_dialog (DIALOG_VERBOSE); # Args check unless (defined $g_ttl) { print_error "No TTL given"; exit E_INVALID; } # In if (defined $g_filelist and -f $g_filelist) { print_info "Reading archives from $g_filelist"; open $g_fh, $g_filelist or die "Unable to open $g_filelist"; } else { print_info "Reading archives from STDIN"; } read_archives (\@g_archives, $g_fh); # Process outdate_archives (\@g_archives, \@g_outdated); # Out foreach my $archive (@g_outdated) { print "$archive\n"; } exit E_SUCCESS; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/Makefile��������������������������������������������������������������������0000644�0001750�0001750�00000010674�11503702461�015516� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright © 2005-2010 The Backup Manager Authors # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Makefile for Backup Manager written by Alexis Sukrieh, # smart ideas for finding out perl libraries' destination come # from Thomas Parmelan. # $Revision$ # $Date$ # $Author$ # Overwrite that variable if you need to prefix the destination # (needed for vendors). DESTDIR?= PREFIX?=/usr # Overwrite that variable with the Perl vendorlib Config value if # you package Backup Manager PERL5DIR?="$(DESTDIR)$(shell perl -MConfig -e 'print "$$Config{sitelib}"')" # Some static paths, specific to backup-manager BINDIR=$(PREFIX)/bin SBINDIR=$(PREFIX)/sbin LIBDIR=$(DESTDIR)/$(PREFIX)/share/backup-manager CONTRIB=$(LIBDIR)/contrib SHAREDIR=$(DESTDIR)/$(PREFIX)/share/backup-manager SHFILES=\ lib/externals.sh \ lib/dialog.sh \ lib/files.sh \ lib/actions.sh \ lib/dbus.sh \ lib/backup-methods.sh\ lib/upload-methods.sh\ lib/burning-methods.sh\ lib/logger.sh \ lib/gettext.sh \ lib/gettext-real.sh \ lib/gettext-dummy.sh \ lib/sanitize.sh \ lib/md5sum.sh # For the backup-manager-doc package DOCDIR = $(DESTDIR)/$(PREFIX)/share/doc/backup-manager DOCHTMLDIR = $(DOCDIR)/user-guide.html DOCPDF = doc/user-guide.pdf DOCHTMLFILES = doc/user-guide.html/*.html DOCPDF = doc/user-guide.pdf DOCTXT = doc/user-guide.txt # Main build rule (we don't buid the docs as we don't know if debiandocs can be # there) so the docs target has to be called manually by vendors. build: manpages # The backup-manager package install: build install_lib install_bin install_contrib install_man install_po install_binary: build install_lib install_bin install_contrib: @echo -e "*** Contrib files ***\n" install -d $(CONTRIB) install -m0755 contrib/*.sh $(CONTRIB) # The backup-manager-doc package install_doc: @echo -e "\n*** Building the User Guide ***\n" $(MAKE) -C doc DESTDIR=$(DESTDIR) install -d $(DOCDIR) install -o root -g 0 -m 0644 $(DOCPDF) $(DOCDIR) install -o root -g 0 -m 0644 $(DOCTXT) $(DOCDIR) install -d $(DOCHTMLDIR) install -o root -g 0 -m 0644 $(DOCHTMLFILES) $(DOCHTMLDIR) # The translation stuff install_po: $(MAKE) -C po install # The backup-manager libraries install_lib: @echo -e "\n*** Installing libraries ***\n" install -d $(LIBDIR) install -o root -g 0 -m 0644 $(SHFILES) $(LIBDIR) # The main stuff to build the backup-manager package install_bin: @echo -e "\n*** Installing scripts ***\n" mkdir -p $(DESTDIR)/$(SBINDIR) mkdir -p $(DESTDIR)/$(BINDIR) mkdir -p $(SHAREDIR) install -o root -g 0 -m 0755 backup-manager $(DESTDIR)/$(SBINDIR) install -o root -g 0 -m 0755 backup-manager-purge $(DESTDIR)/$(BINDIR) install -o root -g 0 -m 0755 backup-manager-upload $(DESTDIR)/$(BINDIR) install -o root -g 0 -m 0644 backup-manager.conf.tpl $(SHAREDIR) mkdir -p $(PERL5DIR) mkdir -p $(PERL5DIR)/BackupManager install -o root -g 0 -m 0644 BackupManager/*.pm $(PERL5DIR)/BackupManager # Building manpages man/backup-manager-upload.8: PERL5LIB=. pod2man --section 8 --center="backup-manager-upload" backup-manager-upload > man/backup-manager-upload.8 man/backup-manager-purge.8: PERL5LIB=. pod2man --section 8 --center="backup-manager-purge" backup-manager-purge > man/backup-manager-purge.8 # build the manpages manpages: manpages-stamp manpages-stamp: man/backup-manager-upload.8 man/backup-manager-purge.8 touch manpages-stamp # Installing the man pages. install_man: manpages-stamp @echo -e "\n*** Installing man pages ***\n" install -d $(DESTDIR)/$(PREFIX)/share/man/man8/ install -o root -g 0 -m 0644 man/*.8 $(DESTDIR)/$(PREFIX)/share/man/man8/ testperldir: @echo "PERL5DIR: $(PERL5DIR)" docs: make -C doc all clean: rm -f build-stamp rm -rf debian/backup-manager rm -f man/backup-manager-upload.8 #rm -f man/*.8 $(MAKE) -C po clean $(MAKE) -C doc clean ��������������������������������������������������������������������Backup-Manager-0.7.10.1/ChangeLog�������������������������������������������������������������������0000644�0001750�0001750�00000104331�11503702461�015622� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup Manager 0.7.10.1 [ Larsen ] * Fix for bug #237 Add nice level to commands used in lib/backup-methods.sh Backup Manager 0.7.10 [ Philippe Villiers ] * Typo fix in backup_method_pgsql(). * FIX bug #171 Bad file name for tarballs with "short" nameformat (Thanks to Laurent Léonard for the patch) * Fixed regression in fix for bug #179 (it breaks the 'monthly' BM_TARBALLINC_MASTERDATEVALUE). * FIX bug #101 Added support for PostgreSQL backup method (Thanks to Helios de Creisquer for the patch) * FIX bug #225 Added "--version" and "--debug" to --help output (Thanks to Larsen for the patch) * FIX bugs #237 and #244 - fixes incremental backups for tar.lz - fixes exclude patterns for tar.lz - nice level not set for tar.lz archives #237 (Thanks to Maciek Sitarz and Larsen for the patch) * FIX bug #240 Be sure to not treat BM_ARCHIVE_PREFIX as a deprecated boolean. * FIX bug #246 Archives created in "/" never obsoloted. (Thanks to Nicolas Baradakis for the patch) * FIX bug #240 will now create all needed dirs if $BM_REPOSITORY_ROOT or its parents do not exist [ Rached Ben Mustapha ] * Don't hardcode /usr when installing * The root group does not exist on FreeBSD, install using gid 0 * Don't hardcode the path to bash * Fix uploading very big archive files which don't fit in memory to Amazon S3. [ Sven Joachim ] * Search for genisoimage and wodim in addition to mkisofs and cdrecord * Change mode of $mysql_conffile to 600 before writing password to it * Fix long version of -c option in backup-manager.8 (closes Debian #225) [ Alexis Sukrieh ] * FIX bug #223 - New configuration variable `BM_LOGGER_LEVEL' to know which messages should be sent to syslog and which should not. - BackupManager Dialog now reads `BM_LOGGER_LEVEL' and behaves accordingly. - backup-manager-purge users BackupManager Dialog instead of the internal logger by hand. Backup Manager 0.7.8 [ Alexis Sukrieh ] * Tempfiles are correctly created/purged in backup-manager-upload (thanks to Josh Triplett and Thomas Parmelan; closes Debian #461512). * Added a --homedir flag to gnupg commands (thanks to Jochen Zimmermann; closes Debian #494833). * Removes MySQL configuration file when automatically created. (Thanks to Mihnea-Costin Grigore; closes Debian #496051) * Resets the error_code so a failure doesn't propagate. (Thanks to Filippo Giunchedi, closes Debian #482087) * Rewrite of check_error_code() so we can ignore some error codes depending on the program used. (Closes Debian #482089). * backup-manager-upload (closes bug #199) correctly report error when FTP uploads fail (thanks to Henning Bitsch for the report and Thomas Parmelan for the patch) * doc/user-guide.sgml (closes bug #200) Fixed the example for BM_ARCHIVE_NICELEVEL (thanks to Rafa G. for the report) * backup-manager-upload (closes bug #196) Fix in the get_ssh_opts function so we correctly retreive SSH/SCP switches. * backup-manager-upload (closes bug #195) Don't set a port switch to ssh/scp commands if BM_UPLOAD_SSH_PORT is not set. Thanks to Andy Shinn for the report and the diagnostic. * lib/backup-methods.sh (closes #194) Change permission whenever an archive is made, ether if it's correctly built or not. Thansk to Philippe Villiers for the report. * lib/backup-methods.sh (closes bug #178) Don't try to build empty archives for targets found in BM_TARBALL_BLACKLIST. Thanks to Henning Bitsch for the report. * lib/files.sh Process symlinks as well for building the purging list. * Makefile, doc/Makefile + Adding $(DESTDIR) where needed. + Better call to pod2man: --section 8 + Fixes in doc/Makefile * Fixed a typo in the user-guide (bug #167). * Makefile Adding the missing lib/dbus.sh line * Fixed all the tests scripts in t/ * Fixed the lzma commandline so the tar.lz archives are built. [ Rached Ben Mustapha ] * lib/dbus.sh + New module to signal state of backup-manager to listeners on D-BUS * lib/backup-methods.sh, lib/logger.sh, backup-manager + Use progress reporting and logging facilities from lib/dbus.sh * t/testlib.sh + Initialize dbus stuff so we know if it breaks things * doc/README.dbus + some dbus support docs 2007-04-24 Alexis Sukrieh <sukria@backup-manager.org> * Release: 0.7.6 2007-03-13 Alexis Sukrieh <sukria@backup-manager.org> * Support for a new variable that control whether BM should purge archives made by other instance of the one that is running (BM_ARCHIVE_STRICTPURGE) (closes: #153). 2007-02-20 Alexis Sukrieh <sukria@backup-manager.org> * lib/backup-methods.sh + change every call to external command so that we can read their return code. + new function check_error_code() to handle BM's behaviour according to the external command's return codes. + If a return code equals 1 and the archive is created, consider it as a warning instead of an error (closes: #152). * Don't stop the main process if errors are triggered by external commands (closes: #141). 2007-01-02 Alexis Sukrieh <sukria@backup-manager.org> * doc/user-guide.sgml, doc/user-guide.txt + More precise documentation about how to use a zero-TTL for local purging with a different one for remote ones. (closes: #144) 2007-01-02 Alexis Sukrieh <sukria@backup-manager.org> * lib/backup-methods.sh + Fix the security vulnerability about passing MySQL client password through the commandline. Using ~/.my.cnf instead. (closes: #146) 2006-12-29 Alexis Sukrieh <sukria@backup-manager.org> * doc/user-guide.sgml, doc/user-guide.txt + New section about the encryption using GPG. (closes: #132) 2006-12-29 Alexis Sukrieh <sukria@backup-manager.org> * lib/sanitize.sh + Make sure BM_ENCRYPTION_RECIPIENT is defined when BM_ENCRYPTION_METHOD is set to gpg. * lib/backup-methods.sh + Handle gently encryption when building meta commands. (closes: #135) + The code of the gzip and the bzip2 compressors have been merged. Less code, less bugs Luke. 2006-12-11 Alexis Sukrieh <sukria@backup-manager.org> * lib/files.sh + change a call to mktemp so it's compliant with old versions (mktemp <path>). 2006-10-23 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager: + Renamed the trap callback "stop_me()" to "clean_exit()"; more approriate name. * lib/dialog.sh: + Moved stop_me() to lib/backup-methods.sh - clean_exit() * lib/backup-methods.sh: + Handles smartly interrupted builds (remove any incomplete archive and friends if the build process has not been correctly finished). * Messages updates. 2006-10-20 Alexis Sukrieh <sukria@backup-manager.org> * Makefile: + Don't build the docs by default anymore, the debiandoc tools may not be there. (close #134) 2006-10-20 Alexis Sukrieh <sukria@backup-manager.org> * Copyright headers and debugging messages - lib/backup-methods.sh - lib/dialog.sh - lib/files.sh - lib/md5sum.sh - lib/sanitize.sh * If the GPG encryption feature is used, make sur we check if $archive.gpg exists instead of $archive when building archives. 2006-10-19 Alexis Sukrieh <sukria@backup-manager.org> * doc/Makefile: + Don't build the doc files if they are up-to-date. * lib/actions.sh: + Copyright statement + more debug messages + tail -f logfiles * lib/burning-methods.sh: + Copyright statement + more debug messages + tail -f logfiles * po/backup-manager.pot, po/*.po: + Updates 2006-10-11 Alexis Sukrieh <sukria@backup-manager.org> * doc/Makefile: + Don't build the doc files if they are up-to-date. * lib/backup-methods.sh: + lots of debug stuff, use tail_logfile() for outputing temp logfiles to stderr if the switch --debug is enabled. * lib/dialog.sh: + function tail_logfile(). 2006-10-11 Alexis Sukrieh <sukria@backup-manager.org> * lib/logger.sh: + Exec the post-command when exiting. (closes: #118) 2006-10-11 Alexis Sukrieh <sukria@backup-manager.org> * lib/sanitize.sh: + Make sure the $key we test is defined. (closes: #110) 2006-10-11 Alexis Sukrieh <sukria@backup-manager.org> * lib/backup-methods.sh: + look for previous DAR archives in the last 30 ones possible. (closes: #127). 2006-10-06 Alexis Sukrieh <sukria@backup-manager.org> * Makefile: + Added SVN properties to track some metadata. + Uses Perl to find out where to install the perl modules ($Config{sitelib}) thanks to Thomas Parmelan. + Build backup-manager-purge.8 manpage as well as backup-manager-upload.8. + New default target `build' so that everything that needs to be built is built when you issue `make'. * backup-manager: + Back to the unreleased mode, version is 0.7.5+REV 2006-09-16 Alexis Sukrieh <sukria@backup-manager.org> * AUTHORS: + Bits updated in the AUTHORS file. * NEWS: + Release notes for 0.7.5 * backup-manager: + Release, version, and so on. 2006-09-16 Alexis Sukrieh <sukria@backup-manager.org> * lib/backup-methods.sh: + Added `-p ${BM_UPLOAD_SSH_PORT}' when building tarball over SSH so the user can use a different port than 22 (thanks to Henning Bitsch). * lib/sanitize.sh: + Some sanitize statement to make sure BM_UPLOAD_SSH_PORT is defined. 2006-09-15 Alexis Sukrieh <sukria@backup-manager.org> * Translation updates, all messages translated in all languages. 2006-09-13 Alexis Sukrieh <sukria@backup-manager.org> * lib/backup-methods.sh: + Don't ignore BM_TARBALL_OVER_SSH, if it's set to true, actually do the remote stuff we are expected to (closes: #123). 2006-09-09 Alexis Sukrieh <sukria@backup-manager.org> * lib/backup-methods.sh + Uses 'svnadmin -q' for disabling useless verbosity. 2006-09-08 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager-upload: + Fixed a bug with the FTP TLS code, use the correct API instead of the one of Net::FTP. 2006-09-08 Alexis Sukrieh <sukria@backup-manager.org> [ Alexis Sukrieh & Michael Guerin ] * Support for FTP over TLS transfers. * New configuration key, `BM_UPLOAD_FTP_SECURE' in backup-manager.conf.tpl for enabling the FTP over TLS transfer. [ Alexis Sukrieh ] * Rewrite of the FTP part of the code in backup-manager-upload. * Documentation about BM_UPLOAD_FTP_SECURE configuration variable. 2006-09-06 Alexis Sukrieh <sukria@backup-manager.org> [ Bjorn Wetzels ] * All messages translated in po/nl.po. 2006-09-06 Alexis Sukrieh <sukria@backup-manager.org> [ Miroslav Kure ] * All messages transalted in po/cs.po. [ Matteo Frare Barutti ] * All messages translated in po/it.po. [ Alexis Sukrieh ] * Added nl in po/LINGUAS * Applied review from Stephane Blondon in po/fr.po. 2006-09-05 Alexis Sukrieh <sukria@backup-manager.org> [ Sven Joachim ] * Fixes bad messages in + lib/burning-methods.sh + lib/dialog.sh: * All messages translated in de.po [ Alexis Sukrieh ] * Gettext files update + po/backup-manager.pot, po/cs.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/vi.po. 2006-09-05 Alexis Sukrieh <sukria@backup-manager.org> [ Clytie Sidall ] * All messages translated in po/vi.po. 2006-09-05 Alexis Sukrieh <sukria@backup-manager.org> * po/LINGUAS + Added all supported languages in LINGUAS (thanks to Clytie Sidall). 2006-09-04 Alexis Sukrieh <sukria@backup-manager.org> [ Matteo Frare Barutti ] * All messages translated in po/it.po. 2006-09-04 Alexis Sukrieh <sukria@backup-manager.org> [ Carlos Galisteo ] * All messages translated in po/es.po. 2006-09-04 Alexis Sukrieh <sukria@backup-manager.org> * lib/backup-methods.sh + Fixed an if-elif-else structure 2006-09-04 Alexis Sukrieh <sukria@backup-manager.org> * All translations done in po/fr.po 2006-09-02 Alexis Sukrieh <sukria@backup-manager.org> * Translations updates + All messages translated in po/cs.po + Updates in po/fr.po + All messages translated in po/vi.po 2006-09-02 Alexis Sukrieh <sukria@backup-manager.org> * lib/upload-methods.sh: + Passes ssh options through the RSYNC_RSH environement variable instead of using the rsync -e switch in the command line. (closes: #122). 2006-09-01 Alexis Sukrieh <sukria@backup-manager.org> [ Thomas Parmelan ] * Support for optional recursive purging (closes: #121) + Added BM_REPOSITORY_RECURSIVEPURGE in backup-manager.conf.tpl (plus examples). + Documentation about BM_REPOSITORY_RECURSIVEPURGE in the user guide (doc/user-guide.sgml and doc/user-guide.txt). + Change the depth passed to "find" according to BM_REPOSITORY_RECURSIVEPURGE in lib/files.sh. + Make sure BM_REPOSITORY_RECURSIVEPURGE is set in lib/sanitize.sh. [ Alexis Sukrieh ] * Make sure the new variable BM_REPOSITORY_RECURSIVEPURGE is set in base.conf so tests scripts don't produce warnings (t/confs/base.conf). * Test the purging system with/without recursion (t/t14-purging-system.sh). 2006-09-01 Alexis Sukrieh <sukria@backup-manager.org> * lib/files.sh: + Applied patch from Thomas Parmelan for closing bug #120. The recursive purging phase now uses 'find' for building the archive list. (closes: #120) * t/t14-purging-system.sh: + Added some sub-directories in the test repository in order to reproduce bug #120. 2006-09-01 Alexis Sukrieh <sukria@backup-manager.org> * t/testlib.sh: + That file was hit by bug#119 too, all the test scripts were broken. 2006-08-31 Alexis Sukrieh <sukria@backup-manager.org> * lib/gettext.sh + Do not source /usr/share/backup-manager but $libdir instead (was breaking test scripts on boxes where BM isn't installed). * Replaced every #!/bin/sh by #!/bin/bash in test scripts. 2006-08-27 Alexis Sukrieh <sukria@backup-manager.org> * lib/sanitize.sh: + BM_UPLOAD_SSH_HOSTS, BM_UPLOAD_SSH_USER and BM_UPLOAD_SSH_KEY are mandatory if BM_TARBALL_OVER_SSH is set to "true". (closes: #97). 2006-08-27 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager: + Replaced static paths to external programs by $(which statement). (closes: #114) * t/testlib.sh: + Applied the same changes to the teslib.sh library so the test scripts behave the same way. 2006-08-27 Alexis Sukrieh <sukria@backup-manager.org> * BackupManager/Logger.pm: + Applied patch from ilya margolin for propagating BM_LOGGER_FACILITY (closes #115). * backup-manager: + Added a copyright header when BM is launched on verbose mode. 2006-08-07 Alexis Sukrieh <sukria@backup-manager.org> * lib/backup-methods.sh: + the dar build commandline is now working. (closes: #109) 2006-08-05 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager: + Possible to use BM with an unprivileged user thanks to the new path used for the lockfile if run by a non-root user. 2006-08-05 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager-upload: * lib/upload-methods.sh: + No more su to $BM_UPLOAD_USER, it's useless. (closes: #105) 2006-07-05 Alexis Sukrieh <sukria@backup-manager.org> [ Add support for local encryption with GPG - closes: #82 ] * backup-manager: + path to /usr/bin/gpg * backup-manager.conf.tpl: + New configuration variables - BM_ENCRYPTION_METHOD (gpg, none) - BM_ENCRYPTION_RECIPIENT (gpg ID) * lib/backup-methods.sh: + Support for encrypted archives, the build command is piped to gpg directly. * t/testlib.sh: + path to /usr/bin/gpg * t/t18-tarball-encryption.sh: + Test script for that new feature (builds a tar.gz.gpg archive). 2006-07-03 Alexis Sukrieh <sukria@backup-manager.org> * lib/burning-methods.sh: + Fix the way md5 sums are checked (closes: #92) * lib/md5sum.sh: + safe_unmount() now works correctly and is able to unmount several times the media pointed by $BM_BURNING_DEVICE. * po/fr.po: + Fix about a bad translated message. 2006-07-03 Alexis Sukrieh <sukria@backup-manager.org> * lib/backup-methods.sh: + Uses -eq instead of = when testing BM_TARBALLINC_MASTERDATEVALUE (closes: #104). 2006-06-30 Alexis Sukrieh <sukria@backup-manager.org> [ Support for non-Joliet disc images (closes: #89) ] * backup-manager.conf.tpl: + New variable BM_BURNING_ISO_FLAGS for letting the suer choose which disc image to use (default "-R -J"). * doc/user-guide.sgml: + Bits about BM_BURNING_ISO_FLAGS * lib/burning-methods.sh: + Default BM_BURNING_ISO_FLAGS to "-R -J" if not defined for backward compatibility. + Uses $BM_BURNING_ISO_FLAGS instead of "-R -J" in mkisofs/growisofs commands. 2006-06-29 Alexis Sukrieh <sukria@backup-manager.org> * lib/burning-methods.sh: + Correct syntax for the "-use-the-force-luke=tty" option in growisofs command lines (Thanks to Rached Ben Mustapha). 2006-06-29 Alexis Sukrieh <sukria@backup-manager.org> * lib/burning-methods.sh: + Apply patch for adding the "-use-the-force-luke" switch in growisofs commands, possible to burn DVD+RW media within the CRON environement. (closes #102) 2006-06-27 Alexis Sukrieh <sukria@backup-manager.org> [ support for tar.lz archives ] * backup-manager: + path to /usr/bin/lzma * backup-manager.conf.tpl: + adding support for BM_TARBALL_FILETYPE = tar.lz * doc/user-guide.sgml: * doc/user-guide.txt: + Bits in the documentation about tar.lz * lib/backup-methods.sh: + command line for building tar.lz archives 2006-06-21 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager: + VERSION = 0.7.4 * backup-manager.conf.tpl: + New variables, BM_UPLOAD_SSH_PURGE / BM_UPLOAD_SSH_PURGE + BM_TARBALL_OVER_SSH set to false by default. * doc/user-guide.sgml, doc/user-guide.txt: + Bits about SSH purging. * lib/backup-methods.sh: 2006-06-21 Alexis Sukrieh <sukria@backup-manager.org> * NEWS: + Notes about last bug closed, #83). * backup-manager-upload: + Fixed the 'Net::Amazon::S3' error message (closes: #93). 2006-06-21 Alexis Sukrieh <sukria@backup-manager.org> * VERSION: 0.7.4 * lib/backup-methods.sh: + (__exec_meta_command) Handle nicely errors with $? instead of counting words sent to stderr by the command (Closes: #83). + Same fix for the remote_command stuff. * t/t11-pipe-method.sh: + Template of a command that fails. 2006-06-20 Alexis Sukrieh <sukria@backup-manager.org> * NEWS: + More details about bugs fixed in 0.7.4. * backup-manager-upload: + Support of SSH purging (in the same manner as for FTP and S3). * lib/upload-methods.sh: + Gently propagate the BM_UPLOAD_SSH_PURGE thing. 2006-06-20 Alexis Sukrieh <sukria@backup-manager.org> * NEWS: + Bits from the devel corner. * lib/backup-methods.sh: + Support archive targets with spaces in their name and archive to expand as well. 2006-04-22 Alexis Sukrieh <sukria@backup-manager.org> [ Based on the work done by Jan Metzger ] * Support of the new upload method "ssh-gpg". + backup-manager-upload - Supports a new value for --method (ssh-gpg). - New option --gpg-recipient - Uses explicit error codes when needed. - Stops using temp logfile, dump errors to stderr. - Updated the documentation (POD / man page). + backup-manager-conf.tpl - new upload method possible "ssh-gpg". - BM_UPLOAD_SSHGPG_RECIPENT added. + doc/user-guide.sgml / doc/user-guide.txt - Bits about the new upload method. + lib/actions.sh - new switch for calling the ssh-gpg upload if needed. + lib/upload-methods.sh - bm_upload_ssh_gpg() added, wrapper to backup-manager-upload. 2006-04-03 Alexis Sukrieh <sukria@backup-manager.org> * lib/files.sh: + applied patch from Mario Domgörgen for fixing the get_date_from_archive() function. (closes: #68) * t/run-tests.sh: + Now redirect errors in /dev/null. * t/t14-purging-system.sh: + switch the verbosity off. 2006-04-02 Alexis Sukrieh,,, <sukria@backup-manager.org> * AUTHORS: + added Brad Dixon about the S3 module. * VERSION: + 0.7.3 * Updated the user guide about the new purging system + minor changes. * lib/backup-methods.sh: + Some messages updated. * lib/burning-methods.sh: + Some messages updated. * lib/files.sh: + Rewrite of the purging system, better handling, support the new policy about master backups. * po/fr.po: + Translation updates. * t/run-tests.sh: + Better layout. 2006-03-29 Alexis Sukrieh <sukria@backup-manager.org> * Closes bug #66 - Support of Amazon S3 uploads. + backup-manager-upload + backup-manager.conf.tpl + doc/user-guide.sgml + lib/actions.sh + lib/upload-methods.sh * lib/backup-methods.sh: + Support of the new variable BM_TARBALL_EXTRA_OPTIONS for appending extra options to the command line. 2006-03-28 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager.conf.tpl: + New configuration variable: BM_TARBALL_OVER_SSH * doc/user-guide.sgml: + Some bits about the new "tarball over ssh" thing. * doc/user-guide.txt: + Up to date version. * lib/backup-methods.sh: + It's now able to build archive locally (as before) or remotely (through SSH); closes: #58. * lib/files.sh: + Some TODO tags. 2006-03-24 Alexis Sukrieh <sukria@backup-manager.org> * lib/actions.sh: + Some more errors when failing to chown/chmod. * lib/backup-methods.sh: + Some more errors when failing to chown/chmod. + Name differently master backups, using a ".master" suffix. * t/confs/base.conf: + added BM_REPOSITORY_USER and BM_REPOSITORY_GROUP * Changed all the tests to fit the new backup naming layout (.master): + t/t01-tarball.sh + t/t04-tarball-blacklist.sh + t/t06-bug14.sh + t/t07-dar.sh + t/t08-regexp.sh + t/t09-tarball-incremental.sh + t/t10-tarball-dar-blacklist.sh + t/t12-tarball-incremental-dar.sh 2006-03-16 Alexis Sukrieh <sukria@backup-manager.org> * lib/upload-methods.sh: * t/t02-rsync.sh: 2006-03-15 Alexis Sukrieh <sukria@backup-manager.org> * lib/upload-methods.sh: + applied patch from Nicolas Rennert for closing #49. + make sure we don't have a trailing / at the end of the RSYNC command. 2006-03-14 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager: + Added path for /usr/bin/7z * lib/backup-methods.sh: + Some of the basic stuff for the 7z support. + Warning, the blacklist stuff is not working! * lib/logger.sh: + umask redirected to /dev/null for getting rid of the crappy output. * t/t09-tarball-incremental.sh: + Never make master backups in that test. * t/testlib.sh: + Added path for /usr/bin/7z 2006-03-12 Alexis Sukrieh <sukria@backup-manager.org> * lib/files.sh: + Applyied patch 21 for closing #50. (Stephen Kitt) 2006-03-12 Alexis Sukrieh <sukria@backup-manager.org> * Makefile: + Stop rebuilding the backup-manager-upload.8 manpage ever and ever. If it exists, don't rebuild it. * VERSION: + Ready for the release 0.7.2 * backup-manager: + VERSION = 0.7.2 2006-03-11 Alexis Sukrieh <sukria@backup-manager.org> * lib/actions.sh: + make_archives() now chown/chmod the md5 file to $BM_REPOSITORY_USER/$BM_REPOSITORY_USER. * lib/backup-methods.sh: + minor fixes/typo * lib/files.sh: + some formatting. 2006-03-10 Alexis Sukrieh <sukria@backup-manager.org> * Setup an umask 0077 for creating files without world permissions. (closes: #47) * Restore the original umask when exiting. 2006-03-10 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager: + Disabled the -u flag, too much problems with the pipe method. * lib/backup-methods.sh: + Better layout of the __exec_meta_command. + Doesn't try to commit an archive if none. 2006-03-09 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager.conf.tpl: + speak about the DVD-RW burning method (with formating). + speak about the DVD method (without formating). * doc/common.ent: + New version of backup-manager: 0.7.2 * doc/user-guide.sgml: + Updates about the burning system. + Interactive mode + DVD / DVD-RW methods + --burn <DATE> new option * doc/version.ent: + Revision 1.2 * lib/burning-methods.sh: + Split the burning method DVD into DVD and DVD-RW so we now have a burning method that doesn't blank the medium before writing data.. 2006-03-09 Rached Ben Mustapha <rached@benmur.net> * lib/upload-methods.sh: + Added support for the ServerAliveInterval ssh option. It is unconditional for now, but we should check if all supported version of ssh support it. This helps when the "building file list" step of rsync takes a loooong time (high I/O load for example), and the connection is closed because of non-activity. It is currently hardcoded to 60s, which seems like a good compromise. 2006-02-08 Alexis Sukrieh <sukria@backup-manager.org> * NEWS: + Release notes for 0.7.1 * backup-manager.conf.tpl: + default blacklist items: /dev /proc /sys 2006-01-19 Alexis Sukrieh <sukria@backup-manager.org> * lib/backup-methods.sh: + major rewrite of the code, much more clean and scalable. + dar support * t/testlib.sh: + added missing stuff here, for the tests. 2006-01-17 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager: + added the path to dvd+rw-format * lib/actions.sh: + now blank the DVD media explicitly before burning data. 2006-01-17 Alexis Sukrieh <sukria@backup-manager.org> * lib/files.sh: + Applied patch from Michel Grentzinger <mic.grentz@online.fr> for enhancing the way space occupation is computed (bug #22). 2006-01-17 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager: + added path to /usr/bin/dar * lib/backup-methods.sh: + major rewrite/clean of backup_method_tarball() + support for BM_ARCHIVE_FILETYPE "dar" * lib/dialog.sh: + check that dar is present. * backup-manager.conf.tpl + New configuration variable "BM_TARBALL_SLICESIZE". 2006-01-05 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager.conf.tpl: + added BM_MYSQL_SAFEDUMPS for providing a way to perform full clena backup with the "--opt" switch (closes bug #15) + Changed the behaviour of BM_MYSQL_DATABASES so we can put here a wildcard "__ALL__" that means backing up every databases at once. * lib/backup-methods.sh: + Changes in backup_mysql(). 2005-12-31 Alexis Sukrieh <sukria@backup-manager.org> * Bug #14 closed. Backup methods are handled better so we can safely use several methods in the same configruation file. + lib/actions.sh: pass $method to each method. + lib/backup-methods.sh: handle $method rather than $BM_ARCHIVE_METHOD. + t/t06-bug14.sh: Regression-proof test for this bug. 2005-12-19 Alexis Sukrieh <sukria@backup-manager.org> * INSTALL: + bits about dependencies * NEWS: + The 0.6 Changelog * doc/DISCLAIMER: + Removed, not needed anymore. * doc/README: + Bits about the available formats. * doc/user-guide.txt: + Added the text version in the repository, so users can have a light version of the guide with the release. * doc/version.ent: + Revision: 1.0 2005-12-19 Alexis Sukrieh <sukria@backup-manager.org> * New configuration key BM_UPLOAD_SSH_PORT + backup-manager.conf.tpl + doc/user-guide.sgml * Added copyright headers + lib/backup-methods.sh + lib/dialog.sh + lib/logger.sh + lib/files.sh + lib/gettext-dummy.sh: + lib/gettext-real.sh: + lib/gettext.sh: + lib/md5sum.sh: * lib/sanitize.sh: + added copyright header + check for BM_BURNING * po/Makefile: + Minor changes * po/backup-manager.pot: + Added this pot file in the repository so people without xgettext can install BM. * po/es.po: + New version updated. 2005-12-16 Alexis Sukrieh <sukria@backup-manager.org> * AUTHORS: + Better, less confusing. * doc/user-guide.sgml: + Sven Joachim fixes (typos...) 2005-12-16 Alexis Sukrieh <sukria@backup-manager.org> * po/Makefile: + better clean target. * po/vi.po: + Final version of the Vietnamese translations. 2005-12-15 Alexis Sukrieh <sukria@backup-manager.org> * AUTHORS: + Added Clytie Siddall in the translators list. * po/it.po: + Final version of the italian translation, thanks to Matteo Frarre Barutti. 2005-12-13 Alexis Sukrieh <sukria@backup-manager.org> * po/Makefile: + use the .SUFFIXES method, better for handling correctly .mo files. * po/backup-manager.pot: + deleted, this file is generated on the fly. * po/es.po: + Minor correction, waiting for the reviewed version. 2005-12-13 Alexis Sukrieh <sukria@backup-manager.org> * AUTHORS: + Cleaner + Added translators * THANKS: + Some typos, changes. * VERSION: + 0.6 !!! Yeah :) * backup-manager: + version= 0.6 (yeah) 2005-12-13 Alexis Sukrieh <sukria@backup-manager.org> * Makefile: + add a target `docs' for building the userguide. * doc/Makefile: + install the user guide in /usr/share/backup-manager/doc * po/it.po: + First full version of the translated messages in Italian (Matteo Frare Barutti <xenon@ngi.it>). 2005-12-13 Alexis Sukrieh <sukria@backup-manager.org> * po/es.po: + New translation from Niv Altivanik (not finished). * t/t05-hooks.sh: + clean a bit the test script, remove the verbose stuff. 2005-12-13 Alexis Sukrieh <sukria@backup-manager.org> * No more yes/no -> true/false * French translatio ok. 2005-12-12 Alexis Sukrieh <sukria@backup-manager.org> * Makefile: + install po files * backup-manager: + minor bug fix (call to bad function) * Removed most of "info -n" calls + lib/actions.sh: + lib/backup-methods.sh: + lib/files.sh: + lib/logger.sh: * po/Makefile: + Much cleaner * po/fr.po + New french version, complete. 2005-12-09 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager: + cleaned a bit the code. * backup-manager.conf.tpl: + removed useless BM_BURNING conf key (BM_BURNING_METHOD is enough). * Updated the tests, new test for the hooks. 2005-12-06 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager-upload: + chomp() the result of the shell command, better. * Renamed tests with understandable names. * t/t04-tarball-blacklist.sh: + New test for reproducing bug #4, cannot reproduce... * t/testlib.sh: + better paths for the lock and pid files. 2005-12-06 Alexis Sukrieh <sukria@backup-manager.org> * doc/user-guide.sgml: + Chapter 3 is finished (well, remains a lot of typos but the main structure is there). 2005-12-06 Alexis Sukrieh <sukria@backup-manager.org> * Minor changes to the tests. + t/confs/upload-rsync.conf + t/t01.sh 2005-12-05 Jimmy Gredler <jimmy@backup-manager.org> * t/confs/tarball-incremental.conf: + Changed the tarball directory to $PWD * t/confs/tarball.conf: + Changed the tarball directory to $PWD * t/confs/upload-global.conf: + Create an upload directory if it doesn't exist * t/confs/upload-rsync.conf: + Changed the rsync directory to $PWD + Use the current user as BM_UPLOAD_SSH_USER and the ssh identity bm-test 2005-12-05 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager.conf.tpl: + added the "none" methods in backup and upload sections. * lib/actions.sh: + it's possible to choose none of the backup methods. + it's possible to choose none of the upload methods. * t/t01.sh: + This test now uses the tarball method for building and archive of /etc, if it manages to build the archives, the test succeeds. * t/t02.sh: + Upload some stuff with rsync (to be updated)... * t/t03.sh: + Test that "none" is possible in the methods keys. 2005-12-05 Alexis Sukrieh <sukria@backup-manager.org> * lib/upload-methods.sh: + rsync stuff works properly with root and with BM_UPLOAD_SSH_USER. 2005-12-05 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager.conf.tpl: + replaced BM_RSYNC by BM_UPLOAD_RSYNC * lib/actions.sh: + Renamed -snapshot by _snaphot * lib/files.sh: + Some more checks. * lib/sanitize.sh: + Better sanitizers for the RSYNC stuff. * lib/upload-methods.sh: + bm_upload_rsync_common() now managed rsync transfers with BM_UPLOAD_SSH_USER and call SSH in BatchMode. + Logs errors in a temp logfile. * t/t02.sh: + test script for RSYNC stuff. 2005-12-05 Alexis Sukrieh <sukria@backup-manager.org> * added the t/ directory for handling tests. + t/confs/base.conf + t/confs/burning.conf + t/confs/mysql.conf + t/confs/pipe.conf + t/confs/svn.conf + t/confs/tarball-incremental.conf + t/confs/tarball.conf + t/confs/upload-ftp.conf + t/confs/upload-global.conf + t/confs/upload-rsync.conf + t/confs/upload-ssh.conf + t/run-tests.sh + t/t01.sh + t/testlib.sh 2005-12-05 Alexis Sukrieh <sukria@backup-manager.org> * lib/sanitize.sh: + typo, hanlde -> handle. 2005-12-05 Alexis Sukrieh <sukria@backup-manager.org> * BackupManager/Config.pm: + fixed some typos. * backup-manager: + removed some comments, cleaning. * backup-manager-upload: + deletes expired files on remote FTP hosts (closes: #1). + error when the repository is not readable (closes: #2). + using other ports than 22 is possible for SSH transfers, new configuration key "BM_UPLOAD_SSH_PORT" (closes: #5). * backup-manager.conf.tpl: + New confkeys for the upload methods, BM_UPLOAD_SSH_*, BM_UPLOAD_FTP_* * lib/actions.sh: + Code cleaning, upload_files() now uses the new stuff in lib/upload-methods.sh * lib/files.sh: + unmount_tmp_dir() now unmount $mount_point only if it's already mounted (closes: #6). * lib/sanitize.sh: + New sanitizers for the new configuration keys. * lib/upload-methods.sh: + New library for handling every upload methods, implemented here ssh and ftp methods. 2005-11-23 Alexis Sukrieh <sukria@backup-manager.org> * backup-manager: + Added the copyright/licence notice. * doc/user-guide.sgml: + Better (really better) structure, that begins to be something... * Makefile + The clean target now cleans doc/ 2005-11-10 Alexis Sukrieh <sukria@sukria.net> * backup-manager.conf.tpl: + details about the new configuration keys for the incremental backup method. 2005-11-10 Alexis Sukrieh <sukria@sukria.net> * lib/backup-methods.sh: + bug fixed, always give the --listed-incremental flag when performing an incremental backup (even when doing a master tarball). 2005-11-10 Alexis Sukrieh <sukria@sukria.net> * lib/actions.sh: + support the tarball-incremental method. * lib/backup-methods.sh: + patched the "tarball" method so it can handle incremental backups. * lib/sanitize.sh: + some sanitize checks for the new configuration keys related to incremental backups. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/contrib/��������������������������������������������������������������������0000755�0001750�0001750�00000000000�11503702461�015506� 5����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/contrib/upgrade-conffile.sh�������������������������������������������������0000755�0001750�0001750�00000002220�11503702461�021253� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash # This will assist you for upgrading a conffile of version prior # to 0.5.9. # # Usage: # upgrade-conffile.sh <CONFFILE> # # It will replace every deprecated confiugration key with the new name # and will show you the diff before applying it. set -e for file in "$1" do sed \ -e 's/BM_ARCHIVES_REPOSITORY/BM_REPOSITORY_ROOT/g' \ -e 's/BM_USER/BM_REPOSITORY_USER/g' \ -e 's/BM_GROUP/BM_REPOSITORY_GROUP/g' \ -e 's/BM_MAX_TIME_TO_LIVE/BM_ARCHIVE_TTL/g' \ -e 's/BM_PURGE_DUPLICATES/BM_ARCHIVE_PURGEDUPS/g' \ -e 's/BM_ARCHIVES_PREFIX/BM_ARCHIVE_PREFIX/g' \ -e 's/BM_FILETYPE/BM_TARBALL_FILETYPE/g' \ -e 's/BM_BACKUP_METHOD/BM_ARCHIVE_METHOD/g' \ -e 's/BM_NAME_FORMAT/BM_TARBALL_NAMEFORMAT/g' \ -e 's/BM_DUMP_SYMLINKS/BM_TARBALL_DUMPSYMLINKS/g' \ -e 's/BM_DIRECTORIES_BLACKLIST/BM_TARBALL_BLACKLIST/g' \ -e 's/BM_DIRECTORIES/BM_TARBALL_DIRECTORIES/g' \ -e 's/BM_FTP_PURGE/BM_UPLOAD_FTPPURGE/g' < $file > $file.tmp diff -ubB $file $file.tmp | less echo -n "Apply changes to $file? [y/N] " read ret if [[ -z $ret ]]; then ret="n" fi if [[ $ret = y ]] || [[ $ret = Y ]]; then mv $file.tmp $file fi rm -f $file.tmp done ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/contrib/sanitize.sh���������������������������������������������������������0000755�0001750�0001750�00000000337�11503702461�017676� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash if [[ -z "$1" ]]; then echo "No file given" exit 1 fi lib="/usr/share/backup-manager" source $lib/gettext.sh source $lib/dialog.sh source $lib/logger.sh source "$1" source $lib/sanitize.sh exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/INSTALL���������������������������������������������������������������������0000644�0001750�0001750�00000001050�11503702461�015073� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Dependencies: If you want to enable the localisation, you need gettext. Perl is needed for FTP and SSH uploads. Everything else is written in Bash. How to install backup-manager ~/backup-manager $ ~/backup-manager $ su ~/backup-manager # make install ~/backup-manager # cp /usr/share/backup-manager/backup-manager.conf.tpl /etc/backup-manager.conf ~/backup-manager # You can then edit /etc/backup-manager.conf to fit your needs. Refere to the user guide for details: http://www.backup-manager.org/documentation/user-guide/ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/backup-manager��������������������������������������������������������������0000755�0001750�0001750�00000014640�11503702461�016656� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash # Copyright © 2005-2010 Alexis Sukrieh # See the AUTHORS file for details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # This is the main backup-manager script. # # $Revision$ # $Date$ # $Author$ set -e RELEASE="true" REVISION='$Revision$' VERSION="0.7.10" # All the paths we provide libdir="/usr/share/backup-manager" vardir="/var/lib/backup-manager" bmu="/usr/bin/backup-manager-upload" bmp="/usr/bin/backup-manager-purge" # Find which lockfile to use # If we are called by an unprivileged user, use a lockfile inside the user's home; # else, use /var/run/backup-manager.lock systemlockfile="/var/run/backup-manager.lock" userlockfile="$HOME/.backup-manager.lock" if [[ "$UID" != 0 ]]; then lockfile="$userlockfile" else lockfile="$systemlockfile" fi # Load the backup-manager's library source $libdir/externals.sh source $libdir/gettext.sh source $libdir/logger.sh source $libdir/dialog.sh source $libdir/files.sh source $libdir/md5sum.sh source $libdir/backup-methods.sh source $libdir/upload-methods.sh source $libdir/burning-methods.sh source $libdir/actions.sh source $libdir/dbus.sh debug "Libraries loaded successfuly from \"$libdir\"." # Initialize defautls values of arguments verbosedebug="false" verbose="false" version="false" warnings="true" force="false" upload="false" burn="false" help="false" md5check="false" purge="false" conffile="/etc/backup-manager.conf" # the "no" flags nopurge="false" noburn="false" noupload="false" # Init the version / revision flag if [[ "$RELEASE" = "false" ]]; then rev=$(echo "$REVISION" | sed -e 's/.Revision: \([0-9]*\).*/\1/g') VERSION="${VERSION}r${rev}" fi debug "Version : $VERSION, release : $RELEASE" # set useful global variables and initial # checks bm_init_today bm_dbus_init bm_dbus_send_event "startup" "Version : $VERSION, release : $RELEASE" bm_dbus_send_progress 0 "Initializing" # Catch signals for a nice exit. trap clean_exit SIGINT SIGTERM SIGKILL # Parse the command line debug "Processing the command line" while [[ $# -ge 1 ]]; do case $1 in -h|--help) usage ;; -m|--md5check) md5check="true" ;; -p|--purge) purge="true" ;; --no-purge) nopurge="true" ;; -b|--burn) burn="true" # parse the second argument as a date if # it does not begin with a dash (-). if [[ -n "$2" ]] && [[ "${2}" == "${2#-}" ]]; then # test if the date is a valid date if [[ $(echo "$2" | grep "^[[:digit:]]\{8\}$") ]] ; then export BM__BURNING_DATE="$2" shift else error "The -b option must be followed by a valid date (YYYYMMDD)." fi fi ;; --no-burn) noburn="true" ;; -u|--upload) upload="true" ;; --no-upload) noupload="true" ;; -d|--debug) verbosedebug="true" verbose="true" ;; -v|--verbose) verbose="true" ;; --version) echo "Backup Manager $VERSION" _exit 0 ;; --no-warnings) warnings="false" ;; -f|--force) force="true" ;; -c|--conffile) # in this case, $2 should be the conffile ! if [[ -f $2 ]]; then conffile=$2 else error "The -c option must be followed by an existing filename." usage fi # we shift here to avoid processing the file path shift ;; *) echo "Unknown option $1" usage break ;; esac shift done info "Backup Manager $VERSION - Copyright (c) 2004-2010 Alexis Sukrieh" debug "Loading configuration file : \"$conffile\"." source $conffile # Sanitize will try to find deprecated vartiables, debug "Sanitizing the configuration file." source $libdir/sanitize.sh debug "Initializing environment" bm_init_env debug "Checking if logger is available" check_logger debug "Getting lock" get_lock check_filetypes # For security reasons, change the umask # for the backup-manager session. # Every file created by the process will be -rw------ BM_UMASK=$(umask) umask 0077 debug "Running pre-command" exec_pre_command || error "Unable to exec the pre-command" create_directories if [[ "$upload" == "true" ]]; then debug "Running the upload methods" upload_files _exit 0 fi if [[ "$burn" == "true" ]]; then debug "Running the burning methods" burn_files _exit 0 fi if [[ "$md5check" == "true" ]]; then debug "Runing the MD5 checks" check_cdrom_md5_sums _exit 0 fi if [[ "$purge" == "true" ]]; then debug "Purging the repository" clean_repositories _exit 0 fi # Default process : doing everything unless --no-flags # are given. if [[ "$nopurge" != "true" ]]; then debug "Purging the repository" bm_dbus_send_progress 10 "Cleaning repositories" clean_repositories fi debug "Building archives" bm_dbus_send_progress 20 "Building archives" make_archives if [[ "$noupload" != "true" ]]; then debug "Running the upload methods" bm_dbus_send_progress 60 "Uploading backups" upload_files fi if [[ "$noburn" != "true" ]]; then debug "Running the burning methods" bm_dbus_send_progress 80 "Burning backups" burn_files fi debug "Running post-command" bm_dbus_send_progress 90 "Cleaning up" exec_post_command || error "Unable to exec post-command." debug "Releasing lock" release_lock debug "Exiting" umask $BM_UMASK >/dev/null bm_dbus_send_progress 100 "Finished" bm_dbus_send_event "shutdown" "0" exit 0 ������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/po/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11503702461�014464� 5����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/po/backup-manager.pot�������������������������������������������������������0000644�0001750�0001750�00000046355�11503702461�020102� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-12-03 10:13+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: ../lib/actions.sh:47 msgid "No backup method used." msgstr "" #: ../lib/actions.sh:50 #, sh-format msgid "No such backup method: $BM_ARCHIVE_METHOD" msgstr "" #: ../lib/actions.sh:59 #, sh-format msgid "Unable to change the owner of \"$md5file\"." msgstr "" #: ../lib/actions.sh:61 #, sh-format msgid "Unable to change file permissions of \"$md5file\"." msgstr "" #: ../lib/actions.sh:93 msgid "No upload method used." msgstr "" #: ../lib/actions.sh:96 #, sh-format msgid "The upload method \"$method\" is not supported; skipping." msgstr "" #: ../lib/actions.sh:108 #, sh-format msgid "Cleaning $BM_REPOSITORY_ROOT" msgstr "" #: ../lib/actions.sh:121 #, sh-format msgid "Running pre-command: $BM_PRE_BACKUP_COMMAND." msgstr "" #: ../lib/actions.sh:125 msgid "Pre-command failed. Stopping the process." msgstr "" #: ../lib/actions.sh:130 #, sh-format msgid "Pre-command returned: \"$RET\" (success)." msgstr "" #: ../lib/actions.sh:142 #, sh-format msgid "Running post-command: $BM_POST_BACKUP_COMMAND" msgstr "" #: ../lib/actions.sh:146 msgid "Post-command failed." msgstr "" #: ../lib/actions.sh:151 #, sh-format msgid "Post-command returned: \"$RET\" (success)." msgstr "" #: ../lib/actions.sh:183 msgid "" "The BM_TARBALL_FILETYPE conf key is set to \"zip\" but zip is not installed." msgstr "" #: ../lib/actions.sh:188 msgid "" "The BM_TARBALL_FILETYPE conf key is set to \"tar.bz2\" but bzip2 is not " "installed." msgstr "" #: ../lib/actions.sh:193 msgid "" "The BM_TARBALL_FILETYPE conf key is set to \"tar.lz\" but lzma is not " "installed." msgstr "" #: ../lib/actions.sh:198 msgid "" "The BM_TARBALL_FILETYPE conf key is set to \"dar\" but dar is not installed." msgstr "" #: ../lib/actions.sh:210 #, sh-format msgid "The repository $BM_REPOSITORY_ROOT does not exist, creating it." msgstr "" #: ../lib/backup-methods.sh:26 #, sh-format msgid "$file_to_create: ok (${size}M," msgstr "" #: ../lib/backup-methods.sh:54 #, sh-format msgid "Unable to purge duplicates of $file_to_create" msgstr "" #: ../lib/backup-methods.sh:65 #, sh-format msgid "Unable to change the owner of \"$file\"." msgstr "" #: ../lib/backup-methods.sh:67 #, sh-format msgid "Unable to change file permissions of \"$file\"." msgstr "" #: ../lib/backup-methods.sh:78 msgid "Warning, process interrupted." msgstr "" #: ../lib/backup-methods.sh:82 #, sh-format msgid "Removing archive \"$bm_pending_archive\" (build interrupted)." msgstr "" #: ../lib/backup-methods.sh:88 #, sh-format msgid "" "Restoring incremental-building details list: \"$bm_pending_incremental_list" "\"." msgstr "" #: ../lib/backup-methods.sh:124 #, sh-format msgid "Unable to create \"$target\", check $logfile" msgstr "" #: ../lib/backup-methods.sh:141 #, sh-format msgid "File $file_to_create already exists, skipping." msgstr "" #: ../lib/backup-methods.sh:152 msgid "gzip is not installed but gzip compression needed." msgstr "" #: ../lib/backup-methods.sh:160 msgid "bzip2 is not installed but bzip2 compression needed." msgstr "" #: ../lib/backup-methods.sh:178 ../lib/backup-methods.sh:202 #, sh-format msgid "Unable to exec $command; check $logfile" msgstr "" #: ../lib/backup-methods.sh:184 #, sh-format msgid "Compressor $compress is needed." msgstr "" #: ../lib/backup-methods.sh:209 #, sh-format msgid "No such compressor supported: $compress." msgstr "" #: ../lib/backup-methods.sh:215 #, sh-format msgid "Unable to find $file_to_create" msgstr "" #: ../lib/backup-methods.sh:343 msgid "No frequency given, set BM_TARBALLINC_MASTERDATETYPE." msgstr "" #: ../lib/backup-methods.sh:354 #, sh-format msgid "Unknown frequency: $BM_TARBALLINC_MASTERDATETYPE" msgstr "" #: ../lib/backup-methods.sh:387 #, sh-format msgid "Building master backup for target: \"$dir_name\"." msgstr "" #: ../lib/backup-methods.sh:520 msgid "Tar reported a file changed during archive creation." msgstr "" #: ../lib/backup-methods.sh:531 msgid "Dar reported a file changed during archive creation." msgstr "" #: ../lib/backup-methods.sh:569 #, sh-format msgid "The archive type \"tar.bz2\" depends on the tool \"$bzip\"." msgstr "" #: ../lib/backup-methods.sh:576 #, sh-format msgid "The archive type \"tar.lz\" depends on the tool \"$lzma\"." msgstr "" #: ../lib/backup-methods.sh:583 #, sh-format msgid "The archive type \"zip\" depends on the tool \"$zip\"." msgstr "" #: ../lib/backup-methods.sh:589 #, sh-format msgid "The archive type \"dar\" depends on the tool \"$dar\"." msgstr "" #: ../lib/backup-methods.sh:595 ../lib/backup-methods.sh:669 #: ../lib/backup-methods.sh:715 #, sh-format msgid "The archive type \"$BM_TARBALL_FILETYPE\" is not supported." msgstr "" #: ../lib/backup-methods.sh:643 msgid "The configuration variable \"BM_ENCRYPTION_RECIPIENT\" must be defined." msgstr "" #: ../lib/backup-methods.sh:649 #, sh-format msgid "" "The encryption is not yet possible with \"$BM_TARBALL_FILETYPE\" archives." msgstr "" #: ../lib/backup-methods.sh:687 #, sh-format msgid "The program \"$gpg\" is needed." msgstr "" #: ../lib/backup-methods.sh:696 ../lib/backup-methods.sh:729 #, sh-format msgid "File $file_to_check already exists, skipping." msgstr "" #: ../lib/backup-methods.sh:761 #, sh-format msgid "Target \"$t\" is found in blacklist, skipping." msgstr "" #: ../lib/backup-methods.sh:765 #, sh-format msgid "Target \"$t\" does not exist, skipping." msgstr "" #: ../lib/backup-methods.sh:841 ../lib/backup-methods.sh:881 #: ../lib/backup-methods.sh:934 ../lib/backup-methods.sh:984 #: ../lib/backup-methods.sh:1008 #, sh-format msgid "Using method \"$method\"." msgstr "" #: ../lib/backup-methods.sh:867 msgid "1 error occurred during the tarball generation." msgstr "" #: ../lib/backup-methods.sh:869 #, sh-format msgid "$nb_err errors occurred during the tarball generation." msgstr "" #: ../lib/backup-methods.sh:883 #, sh-format msgid "The \"pgsql\" method is chosen, but $pgdump is not found." msgstr "" #: ../lib/backup-methods.sh:890 #, sh-format msgid "Found existing PgSQL client configuration file: $pgsql_conffile" msgstr "" #: ../lib/backup-methods.sh:891 msgid "Looking for matching credentials in this file..." msgstr "" #: ../lib/backup-methods.sh:893 msgid "No matching credentials: inserting our own." msgstr "" #: ../lib/backup-methods.sh:899 #, sh-format msgid "Creating a default PgSQL client configuration file: $HOME/.pgpass" msgstr "" #: ../lib/backup-methods.sh:920 msgid "restoring initial .pgpass file." msgstr "" #: ../lib/backup-methods.sh:936 #, sh-format msgid "The \"mysql\" method is chosen, but $mysqldump is not found." msgstr "" #: ../lib/backup-methods.sh:946 #, sh-format msgid "Using existing MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:950 #, sh-format msgid "Creating a default MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:974 #, sh-format msgid "Removing default MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:986 #, sh-format msgid "The \"svn\" method is chosen, but $svnadmin is not found." msgstr "" #: ../lib/backup-methods.sh:992 #, sh-format msgid "SVN repository \"$repository\" is not valid; skipping." msgstr "" #: ../lib/backup-methods.sh:1017 #, sh-format msgid "Not enough args for this archive ($archive), skipping." msgstr "" #: ../lib/backup-methods.sh:1024 msgid "Cannot create archive." msgstr "" #: ../lib/burning-methods.sh:37 #, sh-format msgid "Device \"/dev/$device\" is mounted on \"$m\", unmounting it." msgstr "" #: ../lib/burning-methods.sh:53 #, sh-format msgid "" "MD5 checkup is only performed on disks. Please set the BM_BURNING_DEVICE in " "$conffile" msgstr "" #: ../lib/burning-methods.sh:59 #, sh-format msgid "The mount point $mount_point is not there." msgstr "" #: ../lib/burning-methods.sh:66 #, sh-format msgid "Mounting $BM_BURNING_DEVICE on $mount_point." msgstr "" #: ../lib/burning-methods.sh:90 #, sh-format msgid "Checking MD5 sum for $base_file:" msgstr "" #: ../lib/burning-methods.sh:109 #, sh-format msgid "$str ok." msgstr "" #: ../lib/burning-methods.sh:112 #, sh-format msgid "$str failed (read error)." msgstr "" #: ../lib/burning-methods.sh:116 #, sh-format msgid "$str failed (MD5 hash mismatch)." msgstr "" #: ../lib/burning-methods.sh:123 msgid "Errors encountered during MD5 checks." msgstr "" #: ../lib/burning-methods.sh:127 #, sh-format msgid "Unable to unmount the mount point $mount_point" msgstr "" #: ../lib/burning-methods.sh:128 #, sh-format msgid "Unable to remove the mount point $mount_point" msgstr "" #: ../lib/burning-methods.sh:147 msgid "No burning method used." msgstr "" #: ../lib/burning-methods.sh:171 #, sh-format msgid "Number of files to burn: $nb_file." msgstr "" #: ../lib/burning-methods.sh:173 #, sh-format msgid "" "Nothing to burn for the $BM__BURNING_DATE, try the '--burn <date>' switch." msgstr "" #: ../lib/burning-methods.sh:202 ../lib/burning-methods.sh:227 #, sh-format msgid "Burning archives of $BM__BURNING_DATE." msgstr "" #: ../lib/burning-methods.sh:207 #, sh-format msgid "" "Cannot burn archives of the $BM__BURNING_DATE, too big: ${size}M, must fit " "in $BM_BURNING_MAXSIZE" msgstr "" #: ../lib/burning-methods.sh:231 msgid "Burning the whole archives." msgstr "" #: ../lib/burning-methods.sh:236 #, sh-format msgid "" "Trying to burn $BM_REPOSITORY_ROOT ($size MB) in interactive mode. You will " "be prompted to enter insert a disc when needed" msgstr "" #: ../lib/burning-methods.sh:267 #, sh-format msgid "Redirecting burning logs into $logfile" msgstr "" #: ../lib/burning-methods.sh:272 #, sh-format msgid "Forcing dev=${BM_BURNING_DEVFORCED} for cdrecord commands." msgstr "" #: ../lib/burning-methods.sh:280 #, sh-format msgid "DVD+R(W) burning requires $growisofs, aborting." msgstr "" #: ../lib/burning-methods.sh:283 #, sh-format msgid "Exporting archives to the DVD+R(W) disc in $BM_BURNING_DEVICE." msgstr "" #: ../lib/burning-methods.sh:287 ../lib/burning-methods.sh:307 #: ../lib/burning-methods.sh:319 ../lib/burning-methods.sh:325 #: ../lib/burning-methods.sh:338 #, sh-format msgid "failed, check $logfile" msgstr "" #: ../lib/burning-methods.sh:292 #, sh-format msgid "DVD-R(W) burning requires $growisofs, aborting." msgstr "" #: ../lib/burning-methods.sh:295 #, sh-format msgid "DVD-R(W) burning requires $dvdrwformat, aborting." msgstr "" #: ../lib/burning-methods.sh:298 #, sh-format msgid "Blanking the DVD-R(W) disc in $BM_BURNING_DEVICE" msgstr "" #: ../lib/burning-methods.sh:302 #, sh-format msgid "Unable to blank the DVD-R(W) disc (check $logfile)." msgstr "" #: ../lib/burning-methods.sh:304 #, sh-format msgid "Exporting archives to the DVD-R(W) disc in $BM_BURNING_DEVICE." msgstr "" #: ../lib/burning-methods.sh:312 ../lib/burning-methods.sh:330 #, sh-format msgid "CD-R(W) burning requires $cdrecord, aborting." msgstr "" #: ../lib/burning-methods.sh:315 #, sh-format msgid "Blanking the CDRW in $BM_BURNING_DEVICE." msgstr "" #: ../lib/burning-methods.sh:321 ../lib/burning-methods.sh:333 #, sh-format msgid "Burning data to $BM_BURNING_DEVICE." msgstr "" #: ../lib/burning-methods.sh:342 msgid "Nothing to burn." msgstr "" #: ../lib/burning-methods.sh:346 #, sh-format msgid "" "The requested burning method is not supported, check BM_BURNING_METHOD in " "$conffile" msgstr "" #: ../lib/burning-methods.sh:402 #, sh-format msgid "Not burning $file because it does not fit in the disk." msgstr "" #: ../lib/burning-methods.sh:443 #, sh-format msgid "No such index file: \"$index_file\"." msgstr "" #: ../lib/burning-methods.sh:485 msgid "The burning process will need one disk." msgstr "" #: ../lib/burning-methods.sh:487 #, sh-format msgid "The burning process will need $number_of_indexes disks." msgstr "" #: ../lib/burning-methods.sh:499 #, sh-format msgid "Burning content of $index" msgstr "" #: ../lib/dialog.sh:27 msgid "Output:" msgstr "" #: ../lib/dialog.sh:28 msgid "Print this short help message." msgstr "" #: ../lib/dialog.sh:29 msgid "Print version number." msgstr "" #: ../lib/dialog.sh:30 msgid "Print what happens on STDOUT." msgstr "" #: ../lib/dialog.sh:31 msgid "Print debug messages on STDOUT." msgstr "" #: ../lib/dialog.sh:32 msgid "Disable warnings." msgstr "" #: ../lib/dialog.sh:35 msgid "Single actions:" msgstr "" #: ../lib/dialog.sh:36 msgid "Just upload the files of the day." msgstr "" #: ../lib/dialog.sh:37 msgid "Just burn the files of the day." msgstr "" #: ../lib/dialog.sh:38 msgid "Just test the md5 sums." msgstr "" #: ../lib/dialog.sh:39 msgid "Just purge old archives." msgstr "" #: ../lib/dialog.sh:42 msgid "Behaviour:" msgstr "" #: ../lib/dialog.sh:43 msgid "Choose an alternate config file." msgstr "" #: ../lib/dialog.sh:44 msgid "Force overwrite of existing archives." msgstr "" #: ../lib/dialog.sh:47 msgid "Unwanted actions:" msgstr "" #: ../lib/dialog.sh:48 msgid "Disable the upload process." msgstr "" #: ../lib/dialog.sh:49 msgid "Disable the burning process." msgstr "" #: ../lib/dialog.sh:50 msgid "Disable the purge process." msgstr "" #: ../lib/dialog.sh:64 ../lib/dialog.sh:83 msgid "Not in interactive mode, cannot continue." msgstr "" #: ../lib/files.sh:79 ../lib/files.sh:94 msgid "No path given." msgstr "" #: ../lib/files.sh:169 #, sh-format msgid "Removing lock for old PID, $pid is not running." msgstr "" #: ../lib/files.sh:179 #, sh-format msgid "" "A backup-manager process ($pid) is already running with the conffile " "$conffile" msgstr "" #: ../lib/files.sh:183 ../lib/files.sh:189 #, sh-format msgid "Getting lock for backup-manager $pid with $conffile" msgstr "" #: ../lib/files.sh:192 msgid "failed (check the file permissions)." msgstr "" #: ../lib/files.sh:280 #, sh-format msgid "$file is not a regular file." msgstr "" #: ../lib/files.sh:305 #, sh-format msgid "Removing obsolete master backup: \"$file\"." msgstr "" #: ../lib/files.sh:313 #, sh-format msgid "Removing obsolete master backup (isolated): \"$file\"." msgstr "" #: ../lib/files.sh:320 #, sh-format msgid "Removing archive \"$file\"." msgstr "" #: ../lib/files.sh:342 msgid "Directory given was not found." msgstr "" #: ../lib/files.sh:363 #, sh-format msgid "Removing archive \"$archive\"." msgstr "" #: ../lib/files.sh:387 #, sh-format msgid "The given file does not exist: $file_to_create" msgstr "" #: ../lib/files.sh:392 msgid "No file given." msgstr "" #: ../lib/files.sh:397 ../lib/files.sh:399 ../lib/files.sh:413 msgid "Unable to get date from file." msgstr "" #: ../lib/files.sh:403 msgid "Unable to find the pattern of the file." msgstr "" #: ../lib/files.sh:419 #, sh-format msgid "Unable to find the md5 hash of file \"$file\" in file \"$md5file\"." msgstr "" #: ../lib/files.sh:425 #, sh-format msgid "$file is a duplicate of $file_to_create (using symlink)." msgstr "" #: ../lib/files.sh:436 #, sh-format msgid "File '$file' does not exist or is not readable." msgstr "" #: ../lib/files.sh:444 #, sh-format msgid "File '$file' is not executable" msgstr "" #: ../lib/logger.sh:159 ../backup-manager:257 msgid "Unable to exec post-command." msgstr "" #: ../lib/logger.sh:163 msgid "Releasing lock" msgstr "" #: ../lib/logger.sh:169 #, sh-format msgid "Exit reason: $exit_reason" msgstr "" #: ../lib/md5sum.sh:30 msgid "Internal error: bad usage of function get_md5sum_from_file()" msgstr "" #: ../lib/md5sum.sh:34 #, sh-format msgid "No md5file found: $md5file" msgstr "" #: ../lib/md5sum.sh:82 #, sh-format msgid "Archive given does not exist in the repository: $archive" msgstr "" #: ../lib/sanitize.sh:32 #, sh-format msgid "The configuration key $key is not set, using \"$default\"." msgstr "" #: ../lib/sanitize.sh:43 #, sh-format msgid "" "The configuration key \"$deprecated_key\" is deprecated, you should rename " "it \"$new_key\". Using \"$deprecated_value\"." msgstr "" #: ../lib/sanitize.sh:84 #, sh-format msgid "The configuration key $key is not set but $keymandatory is enabled." msgstr "" #: ../lib/sanitize.sh:102 #, sh-format msgid "Deprecated boolean, $key is set to \"yes\", setting \"true\" instead." msgstr "" #: ../lib/sanitize.sh:107 #, sh-format msgid "Deprecated boolean, $key is set to \"no\", setting \"false\" instead." msgstr "" #: ../lib/sanitize.sh:131 #, sh-format msgid "Unable to create BM_TEMP_DIR: \"$BM_TEMP_DIR\"." msgstr "" #: ../lib/sanitize.sh:170 msgid "" "BM_TARBALLINC_MASTERDATEVALUE should not be greater than 6, falling back to 0" msgstr "" #: ../lib/sanitize.sh:175 msgid "" "BM_TARBALLINC_MASTERDATEVALUE should not be greater than 31, falling back to " "1" msgstr "" #: ../lib/sanitize.sh:288 #, sh-format msgid "" "When validating the configuration file $conffile, $nb_warnings warnings were " "found." msgstr "" #: ../lib/upload-methods.sh:38 msgid "Using the upload method \"ssh\"." msgstr "" #: ../lib/upload-methods.sh:47 ../lib/upload-methods.sh:85 msgid "No valid destination found, SSH upload not possible." msgstr "" #: ../lib/upload-methods.sh:68 #, sh-format msgid "" "Error reported by backup-manager-upload for method \"scp\", check \"$logfile" "\"." msgstr "" #: ../lib/upload-methods.sh:76 msgid "Using the upload method \"ssh-gpg\"." msgstr "" #: ../lib/upload-methods.sh:88 msgid "" "No gpg recipient given. Argument is mandatory if upload method ssh-gpg is " "used." msgstr "" #: ../lib/upload-methods.sh:105 #, sh-format msgid "" "Error reported by backup-manager-upload for method \"ssh-gpg\", check " "\"$logfile\"." msgstr "" #: ../lib/upload-methods.sh:112 msgid "Using the upload method \"ftp\"." msgstr "" #: ../lib/upload-methods.sh:122 msgid "No valid destination found, FTP upload not possible." msgstr "" #: ../lib/upload-methods.sh:146 #, sh-format msgid "" "Error reported by backup-manager-upload for method \"ftp\", check \"$logfile" "\"." msgstr "" #: ../lib/upload-methods.sh:154 msgid "Using the upload method \"S3\"." msgstr "" #: ../lib/upload-methods.sh:176 #, sh-format msgid "" "Error reported by backup-manager-upload for method \"s3\", check \"$logfile" "\"." msgstr "" #: ../lib/upload-methods.sh:182 #, sh-format msgid "Uploading $directory to ${host}:${BM_UPLOAD_RSYNC_DESTINATION}" msgstr "" #: ../lib/upload-methods.sh:193 msgid "Need a key to use rsync (set BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY)." msgstr "" #: ../lib/upload-methods.sh:204 #, sh-format msgid "Upload of $directory with rsync failed; check $logfile." msgstr "" #: ../lib/upload-methods.sh:223 msgid "No valid destination found, RSYNC upload not possible." msgstr "" #: ../lib/upload-methods.sh:242 msgid "No hosts given to the rsync method, set BM_UPLOAD_RSYNC_HOSTS." msgstr "" #: ../lib/upload-methods.sh:249 msgid "Using the upload method \"rsync\"." msgstr "" #: ../lib/upload-methods.sh:256 msgid "Using the upload method \"rsync-snapshots\"." msgstr "" #: ../backup-manager:127 msgid "The -b option must be followed by a valid date (YYYYMMDD)." msgstr "" #: ../backup-manager:162 msgid "The -c option must be followed by an existing filename." msgstr "" #: ../backup-manager:202 msgid "Unable to exec the pre-command" msgstr "" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/po/nl.po��������������������������������������������������������������������0000644�0001750�0001750�00000070012�11503702461�015435� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Dutch Language Pack for Backup Manager # Copyright (C) 2006 Bjorn Wetzels # This file is distributed under the same license as the Backup-Manager package. # Bjorn Wetzels <Bjorn.Wetzels@Planet.nl>, 2006. # msgid "" msgstr "" "Project-Id-Version: backup-manager 0.7.10\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-07-15 20:27+0200\n" "PO-Revision-Date: 2010-12-02 21:03+0100\n" "Last-Translator: Bjorn Wetzels <Bjorn.Wetzels@planet.nl>\n" "Language-Team: DUTCH\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../lib/actions.sh:44 msgid "No backup method used." msgstr "Geen backup methode gebruikt." #: ../lib/actions.sh:47 #, sh-format msgid "No such backup method: $BM_ARCHIVE_METHOD" msgstr "Backup methode bestaat niet: $BM_ARCHIVE_METHOD" #: ../lib/actions.sh:56 #, sh-format msgid "Unable to change the owner of \"$md5file\"." msgstr "Niet mogelijk om eigenaar van bestand \"$md5file\" te wijzigen" #: ../lib/actions.sh:58 #, sh-format msgid "Unable to change file permissions of \"$md5file\"." msgstr "Niet mogelijk om bestandsrechten te veranderen van \"$md5file\"." #: ../lib/actions.sh:90 msgid "No upload method used." msgstr "Geen upload methode gebruikt." #: ../lib/actions.sh:93 #, sh-format msgid "The upload method \"$method\" is not supported; skipping." msgstr "De Upload methode \"$method\" Wordt niet ondersteund; overslaan." #: ../lib/actions.sh:105 #, sh-format msgid "Cleaning $BM_REPOSITORY_ROOT" msgstr "Opschonen $BM_REPOSITORY_ROOT" #: ../lib/actions.sh:118 #, sh-format msgid "Running pre-command: $BM_PRE_BACKUP_COMMAND." msgstr "Uitvoeren van pre-commando: $BM_PRE_BACKUP_COMMAND." #: ../lib/actions.sh:122 msgid "Pre-command failed. Stopping the process." msgstr "Pre-commando fout. Stoppen van proces." #: ../lib/actions.sh:127 #, sh-format msgid "Pre-command returned: \"$RET\" (success)." msgstr "Pre-commando retourneerde: \"$RET\" (success)." #: ../lib/actions.sh:139 #, sh-format msgid "Running post-command: $BM_POST_BACKUP_COMMAND" msgstr "Uitvoeren post-commando: $BM_POST_BACKUP_COMMAND" #: ../lib/actions.sh:143 msgid "Post-command failed." msgstr "Post-commando fout." #: ../lib/actions.sh:148 #, sh-format msgid "Post-command returned: \"$RET\" (success)." msgstr "Post-commando retourneerde: \"$RET\" (success)." #: ../lib/actions.sh:180 msgid "The BM_TARBALL_FILETYPE conf key is set to \"zip\" but zip is not installed." msgstr "De BM_TARBALL_FILETYPE configuratiesleutel is ingesteld op \"zip\" maar zip is niet geinstalleerd." #: ../lib/actions.sh:185 msgid "The BM_TARBALL_FILETYPE conf key is set to \"bzip2\" but bzip2 is not installed." msgstr "De BM_TARBALL_FILETYPE configuratiesleutel is ingesteld op \"bzip2\" maar bzip2 is niet geinstalleerd." #: ../lib/actions.sh:190 msgid "The BM_TARBALL_FILETYPE conf key is set to \"dar\" but dar is not installed." msgstr "De BM_TARBALL_FILETYPE configuratiesleutel is ingesteld op \"dar\" maar dar is niet geinstalleerd." #: ../lib/actions.sh:202 #, sh-format msgid "The repository $BM_REPOSITORY_ROOT does not exist, creating it." msgstr "$BM_REPOSITORY_ROOT bestaat niet, maken" #: ../lib/backup-methods.sh:26 #, sh-format msgid "$file_to_create: ok (${size}M," msgstr "$file_to_create: ok (${size}M," #: ../lib/backup-methods.sh:54 #, sh-format msgid "Unable to purge duplicates of $file_to_create" msgstr "Kan duplicaten van $file_to_create niet weggooien" #: ../lib/backup-methods.sh:65 #, fuzzy, sh-format msgid "Unable to change the owner of \"$file\"." msgstr "Niet mogelijk om eigenaar van bestand \"$md5file\" te wijzigen" #: ../lib/backup-methods.sh:67 #, fuzzy, sh-format msgid "Unable to change file permissions of \"$file\"." msgstr "Niet mogelijk om bestandsrechten te veranderen van \"$md5file\"." #: ../lib/backup-methods.sh:78 #, fuzzy msgid "Warning, process interrupted." msgstr "Waarschuwing, proces onderbroken, Archieven kunnen corrupt zijn." #: ../lib/backup-methods.sh:82 #, fuzzy, sh-format msgid "Removing archive \"$bm_pending_archive\" (build interrupted)." msgstr "Verwijderen archief \"$archive\"." #: ../lib/backup-methods.sh:88 #, sh-format msgid "Restoring incremental-building details list: \"$bm_pending_incremental_list\"." msgstr "" #: ../lib/backup-methods.sh:124 #, sh-format msgid "Unable to create \"$target\", check $logfile" msgstr "Kan doel \"$target\" niet maken, controleer $logfile" #: ../lib/backup-methods.sh:140 #, sh-format msgid "File $file_to_create already exists, skipping." msgstr "Bestand $file_to_create bestaat reeds, overslaan." #: ../lib/backup-methods.sh:151 msgid "gzip is not installed but gzip compression needed." msgstr "" #: ../lib/backup-methods.sh:159 msgid "bzip2 is not installed but bzip2 compression needed." msgstr "" #: ../lib/backup-methods.sh:177 #: ../lib/backup-methods.sh:201 #, sh-format msgid "Unable to exec $command; check $logfile" msgstr "Uitvoeren van commando $command niet mogelijk; controleer $logfile" #: ../lib/backup-methods.sh:183 #, fuzzy, sh-format msgid "Compressor $compress is needed." msgstr "Comprimeer-programma $compress benodigt $gzip" #: ../lib/backup-methods.sh:208 #, sh-format msgid "No such compressor supported: $compress." msgstr "$compress wordt niet ondersteund" #: ../lib/backup-methods.sh:214 #, sh-format msgid "Unable to find $file_to_create" msgstr "Bestand niet gevonden: $file_to_create" #: ../lib/backup-methods.sh:342 msgid "No frequency given, set BM_TARBALLINC_MASTERDATETYPE." msgstr "Onbekende frequentie: $BM_TARBALLINC_MASTERDATETYPE" #: ../lib/backup-methods.sh:353 #, sh-format msgid "Unknown frequency: $BM_TARBALLINC_MASTERDATETYPE" msgstr "Onbekende frequentie: $BM_TARBALLINC_MASTERDATETYPE" #: ../lib/backup-methods.sh:386 #, sh-format msgid "Building master backup for target: \"$dir_name\"." msgstr "Maken Master Backup voor doel: \"$dir_name\"." #: ../lib/backup-methods.sh:515 msgid "Tar reported a file changed during archive creation." msgstr "" #: ../lib/backup-methods.sh:526 msgid "Dar reported a file changed during archive creation." msgstr "" #: ../lib/backup-methods.sh:564 #, sh-format msgid "The archive type \"tar.bz2\" depends on the tool \"$bzip\"." msgstr "Het archieftype \"tar.bz2\" is afhankelijk van de tool \"$bzip\"." #: ../lib/backup-methods.sh:571 #, sh-format msgid "The archive type \"tar.lz\" depends on the tool \"$lzma\"." msgstr "Het archieftype \"tar.lz\" is afhankelijk van de tool \"$lzma\"." #: ../lib/backup-methods.sh:578 #, sh-format msgid "The archive type \"zip\" depends on the tool \"$zip\"." msgstr "Het archieftype \"zip\" is afhankelijk van de tool \"$zip\"." #: ../lib/backup-methods.sh:584 #, sh-format msgid "The archive type \"dar\" depends on the tool \"$dar\"." msgstr "Het archieftype \"dar\" is afhankelijjk van de tool \"$dar\"." #: ../lib/backup-methods.sh:590 #: ../lib/backup-methods.sh:677 #: ../lib/backup-methods.sh:723 #, sh-format msgid "The archive type \"$BM_TARBALL_FILETYPE\" is not supported." msgstr "Het bestandstype $BM_TARBALL_FILETYPE wordt niet ondersteund." #: ../lib/backup-methods.sh:651 msgid "The configuration variable \"BM_ENCRYPTION_RECIPIENT\" must be defined." msgstr "De configuratiesleutel \"BM_ENCRYPTION_RECIPIENT\" moet worden gedefinieerd." #: ../lib/backup-methods.sh:657 #, sh-format msgid "The encryption is not yet possible with \"$BM_TARBALL_FILETYPE\" archives." msgstr "Encryptie is nog niet mogelijk voor\"$BM_TARBALL_FILETYPE\" archieven" #: ../lib/backup-methods.sh:695 #, sh-format msgid "The program \"$gpg\" is needed." msgstr "Het programma \"$gpg\" is benodigd." #: ../lib/backup-methods.sh:704 #: ../lib/backup-methods.sh:737 #, sh-format msgid "File $file_to_check already exists, skipping." msgstr "Bestand $file_to_check bestaat reeds, overslaan." #: ../lib/backup-methods.sh:769 #, fuzzy, sh-format msgid "Target \"$t\" is found in blacklist, skipping." msgstr "Doel: \"$t\" bestaat niet, overslaan." #: ../lib/backup-methods.sh:773 #, sh-format msgid "Target \"$t\" does not exist, skipping." msgstr "Doel: \"$t\" bestaat niet, overslaan." #: ../lib/backup-methods.sh:849 #: ../lib/backup-methods.sh:888 #: ../lib/backup-methods.sh:938 #: ../lib/backup-methods.sh:962 #, sh-format msgid "Using method \"$method\"." msgstr "Gebruik Methode\"$method\"." #: ../lib/backup-methods.sh:875 msgid "1 error occurred during the tarball generation." msgstr "1 fout voorgekomen tijdens het maken van de tarball" #: ../lib/backup-methods.sh:877 #, sh-format msgid "$nb_err errors occurred during the tarball generation." msgstr "$nb_err fouten voorgekomen tijdens het maken van de tarball" #: ../lib/backup-methods.sh:890 #, sh-format msgid "The \"mysql\" method is chosen, but $mysqldump is not found." msgstr "De \"mysql\" methode is gekozen, maar $mysqldump is niet gevonden." #: ../lib/backup-methods.sh:900 #, sh-format msgid "Using existing MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:904 #, sh-format msgid "Creating a default MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:928 #, sh-format msgid "Removing default MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:940 #, sh-format msgid "The \"svn\" method is chosen, but $svnadmin is not found." msgstr "De \"svn\" methode is gekozen, maar $svnadmin is niet gevonden." #: ../lib/backup-methods.sh:946 #, sh-format msgid "SVN repository \"$repository\" is not valid; skipping." msgstr "SVN verzameling \"$repository\" is niet geldig; overslaan." #: ../lib/backup-methods.sh:971 #, sh-format msgid "Not enough args for this archive ($archive), skipping." msgstr "Niet genoeg argumenten meegegeven voor archief ($archive), overslaan." #: ../lib/backup-methods.sh:978 msgid "Cannot create archive." msgstr "Kan archief niet maken" #: ../lib/burning-methods.sh:37 #, sh-format msgid "Device \"/dev/$device\" is mounted on \"$m\", unmounting it." msgstr "Apparaat \"/dev/$device\" is gekoppeld op \"$m\", ontkoppelen." #: ../lib/burning-methods.sh:53 #, sh-format msgid "MD5 checkup is only performed on disks. Please set the BM_BURNING_DEVICE in $conffile" msgstr "MD5 Controle wordt alleen uitgevoerd op schijven. Stel BM_BURNING_DEVICE in $conffile in." #: ../lib/burning-methods.sh:59 #, sh-format msgid "The mount point $mount_point is not there." msgstr "Het MointPoint $mount_point is niet aanwezig" #: ../lib/burning-methods.sh:66 #, sh-format msgid "Mounting $BM_BURNING_DEVICE on $mount_point." msgstr "koppelen $BM_BURNING_DEVICE op $mount_point." #: ../lib/burning-methods.sh:90 #, sh-format msgid "Checking MD5 sum for $base_file:" msgstr "Controleren MD5 som voor $base_file:" #: ../lib/burning-methods.sh:109 #, sh-format msgid "$str ok." msgstr "$str ok" #: ../lib/burning-methods.sh:112 #, sh-format msgid "$str failed (read error)." msgstr "$str fout (leesfout)" #: ../lib/burning-methods.sh:116 #, sh-format msgid "$str failed (MD5 hash mismatch)." msgstr "$str failed (MD5 hash mismatch)" #: ../lib/burning-methods.sh:123 msgid "Errors encountered during MD5 checks." msgstr "Fouten opgetreden tijdens MD5 controle." #: ../lib/burning-methods.sh:127 #, sh-format msgid "Unable to unmount the mount point $mount_point" msgstr "Niet mogelijk om koppeling $mount_point te ontkoppelen " #: ../lib/burning-methods.sh:128 #, sh-format msgid "Unable to remove the mount point $mount_point" msgstr "Niet mogelijk om koppeling $mount_point te verwijderen" #: ../lib/burning-methods.sh:147 msgid "No burning method used." msgstr "Geen brandmethode gebruikt." #: ../lib/burning-methods.sh:171 #, sh-format msgid "Number of files to burn: $nb_file." msgstr "aantal bestanden om te branden: $nb_file." #: ../lib/burning-methods.sh:173 #, sh-format msgid "Nothing to burn for the $BM__BURNING_DATE, try the '--burn <date>' switch." msgstr "Niets te branden voor $BM__BURNING_DATE, probeer de '--burn <date>' schakeloptie." #: ../lib/burning-methods.sh:202 #: ../lib/burning-methods.sh:227 #, sh-format msgid "Burning archives of $BM__BURNING_DATE." msgstr "Branden archieven naar $BM__BURNING_DATE." #: ../lib/burning-methods.sh:207 #, sh-format msgid "Cannot burn archives of the $BM__BURNING_DATE, too big: ${size}M, must fit in $BM_BURNING_MAXSIZE" msgstr "Kan archieven van $BM__BURNING_DATE niet branden, te groot. ${size}M, moet passen in $BM_BURNING_MAXSIZE" #: ../lib/burning-methods.sh:231 msgid "Burning the whole archives." msgstr "Branden complete archieven" #: ../lib/burning-methods.sh:236 #, sh-format msgid "Trying to burn $BM_REPOSITORY_ROOT ($size MB) in interactive mode." msgstr "Proberen van branden $BM_REPOSITORY_ROOT ($size MB) in interactive mode." #: ../lib/burning-methods.sh:267 #, sh-format msgid "Redirecting burning logs into $logfile" msgstr "Verwijzen brandlogs naar $logfile" #: ../lib/burning-methods.sh:272 #, sh-format msgid "Forcing dev=${BM_BURNING_DEVFORCED} for cdrecord commands." msgstr "Forceren dev=${BM_BURNING_DEVFORCED} voor cdrecord commando" #: ../lib/burning-methods.sh:280 #, sh-format msgid "DVD+R(W) burning requires $growisofs, aborting." msgstr "DVD+R(W) branden benodigt $growisofs, afbreken." #: ../lib/burning-methods.sh:283 #, sh-format msgid "Exporting archives to the DVD+R(W) disc in $BM_BURNING_DEVICE." msgstr "Exporteren archieven naar DVD media in $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:287 #: ../lib/burning-methods.sh:307 #: ../lib/burning-methods.sh:319 #: ../lib/burning-methods.sh:325 #: ../lib/burning-methods.sh:338 #, sh-format msgid "failed, check $logfile" msgstr "fout, controleer $logfile" #: ../lib/burning-methods.sh:292 #, sh-format msgid "DVD-R(W) burning requires $growisofs, aborting." msgstr "DVD branden benodigt $growisofs, afbreken." #: ../lib/burning-methods.sh:295 #, sh-format msgid "DVD-R(W) burning requires $dvdrwformat, aborting." msgstr "DVD-R branden benodigt $dvdrwformat, afbreken." #: ../lib/burning-methods.sh:298 #, sh-format msgid "Blanking the DVD-R(W) disc in $BM_BURNING_DEVICE" msgstr "Leegmaken van de CDRW in $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:302 #, sh-format msgid "Unable to blank the DVD-R(W) disc (check $logfile)." msgstr "kan CD niet leegmaken, controleer $logfile" #: ../lib/burning-methods.sh:304 #, sh-format msgid "Exporting archives to the DVD-R(W) disc in $BM_BURNING_DEVICE." msgstr "Exporteren archieven naar DVD media in $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:312 #: ../lib/burning-methods.sh:330 #, sh-format msgid "CD-R(W) burning requires $cdrecord, aborting." msgstr "CDR(W) Branden vereist $cdrecord, afbreken." #: ../lib/burning-methods.sh:315 #, sh-format msgid "Blanking the CDRW in $BM_BURNING_DEVICE." msgstr "Leegmaken van de CDRW in $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:321 #: ../lib/burning-methods.sh:333 #, sh-format msgid "Burning data to $BM_BURNING_DEVICE." msgstr "Branden van data naar $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:342 msgid "Nothing to burn." msgstr "Geen data om te branden." #: ../lib/burning-methods.sh:346 #, sh-format msgid "The requested burning method is not supported, check BM_BURNING_METHOD in $conffile" msgstr "De opgegeven brandmethode wordt niet ondersteund, controleerBM_BURNING_METHOD in $conffile" #: ../lib/burning-methods.sh:402 #, sh-format msgid "Not burning $file because it does not fit in the disk." msgstr "Kan niet branden $file, past niet op de schijf." #: ../lib/burning-methods.sh:443 #, sh-format msgid "No such index file: \"$index_file\"." msgstr "Geen index file: \"$index_file\"." #: ../lib/burning-methods.sh:485 msgid "The burning process will need one disk." msgstr "Het brandproces benodigt 1 schijf" #: ../lib/burning-methods.sh:487 #, sh-format msgid "The burning process will need $number_of_indexes disks." msgstr "het branden vereist $number_of_indexes schijven." #: ../lib/burning-methods.sh:499 #, sh-format msgid "Burning content of $index" msgstr "Branden inhoud van $index" #: ../lib/dialog.sh:27 msgid "Output:" msgstr "Uitvoer:" #: ../lib/dialog.sh:28 msgid "Print this short help message." msgstr "Druk dit korte help bericht af." #: ../lib/dialog.sh:29 msgid "Print version number." msgstr "" #: ../lib/dialog.sh:30 msgid "Print what happens on STDOUT." msgstr "Laat zien wat op STDOUT gebeurt." #: ../lib/dialog.sh:31 #, fuzzy msgid "Print debug messages on STDOUT." msgstr "Laat zien wat op STDOUT gebeurt." #: ../lib/dialog.sh:32 msgid "Disable warnings." msgstr "Schakel waarschuwingen uit." #: ../lib/dialog.sh:35 msgid "Single actions:" msgstr "Losse acties:" #: ../lib/dialog.sh:36 msgid "Just upload the files of the day." msgstr "Upload de dagelijkse files." #: ../lib/dialog.sh:37 msgid "Just burn the files of the day." msgstr "Brand de dagelijkse files." #: ../lib/dialog.sh:38 msgid "Just test the md5 sums." msgstr "Test de md5 sommen." #: ../lib/dialog.sh:39 msgid "Just purge old archives." msgstr "Verwijder de oude archieven." #: ../lib/dialog.sh:42 msgid "Behaviour:" msgstr "Gedrag:" #: ../lib/dialog.sh:43 msgid "Choose an alternate config file." msgstr "Kies een alternatief configuratie bestand." #: ../lib/dialog.sh:44 msgid "Force overwrite of existing archives." msgstr "Forceer overschrijven van bestaande archieven." #: ../lib/dialog.sh:47 msgid "Unwanted actions:" msgstr "Ongewenste acties:" #: ../lib/dialog.sh:48 msgid "Disable the upload process." msgstr "Schakel het upload proces uit." #: ../lib/dialog.sh:49 msgid "Disable the burning process." msgstr "Schakel het brand proces uit." #: ../lib/dialog.sh:50 msgid "Disable the purge process." msgstr "Schakel het verwijder proces uit." #: ../lib/dialog.sh:64 #: ../lib/dialog.sh:83 msgid "Not in interactive mode, cannot continue." msgstr "Niet in interactive modus, kan niet verder gaan." #: ../lib/files.sh:79 #: ../lib/files.sh:94 msgid "No path given." msgstr "Geen Pad opgegeven" #: ../lib/files.sh:169 #, sh-format msgid "Removing lock for old PID, $pid is not running." msgstr "Verwijderen vergrendeling voor oude PID, $pid loopt niet." #: ../lib/files.sh:179 #, sh-format msgid "A backup-manager process ($pid) is already running with the conffile $conffile" msgstr "Een backup-manager proces ($pid) loopt al met de configuratiefile $conffile" #: ../lib/files.sh:183 #: ../lib/files.sh:189 #, sh-format msgid "Getting lock for backup-manager $pid with $conffile" msgstr "Vergrendelen van proces: backup-manager $pid met $conffile" #: ../lib/files.sh:192 msgid "failed (check the file permissions)." msgstr "Fout (controleer bestandsrechten)" #: ../lib/files.sh:280 #, sh-format msgid "$file is not a regular file." msgstr "$file is geen regulier bestand." #: ../lib/files.sh:305 #, sh-format msgid "Removing obsolete master backup: \"$file\"." msgstr "Verwijderen overbodige master backup :\"$file\"." #: ../lib/files.sh:313 #, sh-format msgid "Removing obsolete master backup (isolated): \"$file\"." msgstr "Verwijderen overbodige master backup (geisoleerd) :\"$file\"." #: ../lib/files.sh:320 #, sh-format msgid "Removing archive \"$file\"." msgstr "Verwijderen $file" #: ../lib/files.sh:342 msgid "Directory given was not found." msgstr "Opgegeven map bestaat niet" #: ../lib/files.sh:363 #, sh-format msgid "Removing archive \"$archive\"." msgstr "Verwijderen archief \"$archive\"." #: ../lib/files.sh:387 #, sh-format msgid "The given file does not exist: $file_to_create" msgstr "Het opgegeven bestand bestaat niet: $file_to_create" #: ../lib/files.sh:392 msgid "No file given." msgstr "Geen bestand opgegeven" #: ../lib/files.sh:397 #: ../lib/files.sh:399 #: ../lib/files.sh:413 msgid "Unable to get date from file." msgstr "Niet mogelijk om datum van bestand op te halen" #: ../lib/files.sh:403 msgid "Unable to find the pattern of the file." msgstr "Niet mogelijk om patroon van bestand op te halen" #: ../lib/files.sh:419 #, sh-format msgid "Unable to find the md5 hash of file \"$file\" in file \"$md5file\"." msgstr "md5 hash van bestand \"$file\" niet gevonden in bestand \"$md5file\"." #: ../lib/files.sh:425 #, sh-format msgid "$file is a duplicate of $file_to_create (using symlink)." msgstr "$file is een duplicaat van $file_to_create (door symlink)" #: ../lib/logger.sh:144 #: ../backup-manager:257 msgid "Unable to exec post-command." msgstr "Post-commando uitvoeren niet mogelijk" #: ../lib/logger.sh:146 msgid "Releasing lock" msgstr "Vergrendeling vrijgeven" #: ../lib/md5sum.sh:30 msgid "Internal error: bad usage of function get_md5sum_from_file()" msgstr "Interne error: fout gebruik van functie get_md5sum_from_file()" #: ../lib/md5sum.sh:34 #, sh-format msgid "No md5file found: $md5file" msgstr "geen md5file gevonden: $md5file" #: ../lib/md5sum.sh:82 #, sh-format msgid "Archive given does not exist in the repository: $archive" msgstr "opgegeven archief werd niet gevonden in de verzameling: $archive" #: ../lib/sanitize.sh:32 #, sh-format msgid "The configuration key $key is not set, using \"$default\"." msgstr "De configuratiesleutel $key is niet gezet, gebruik \"$default\"." #: ../lib/sanitize.sh:43 #, sh-format msgid "The configuration key \"$deprecated_key\" is deprecated, you should rename it \"$new_key\". Using \"$deprecated_value\"." msgstr "De configuratiesleutel \"$deprecated_key\" is verouderd, hernoemdeze naar \"$new_key\". Gebruik nu \"$deprecated_value\"" #: ../lib/sanitize.sh:84 #, sh-format msgid "The configuration key $key is not set but $keymandatory is enabled." msgstr "De configuratiesleutel $key is niet ingesteld, maar $keymandatory is wel aangezet." #: ../lib/sanitize.sh:100 #, sh-format msgid "Deprecated boolean, $key is set to \"yes\", setting \"true\" instead." msgstr "Verouderde boolean, $key is ingesteld op \"yes\", Gebruik nu \"true" #: ../lib/sanitize.sh:105 #, sh-format msgid "Deprecated boolean, $key is set to \"no\", setting \"false\" instead." msgstr "Verouderde boolean, $key is ingesteld op \"no\", Gebruik nu \"false" #: ../lib/sanitize.sh:128 #, sh-format msgid "Unable to create BM_TEMP_DIR: \"$BM_TEMP_DIR\"." msgstr "" #: ../lib/sanitize.sh:166 msgid "BM_TARBALLINC_MASTERDATEVALUE should not be greater than 6, falling back to 0" msgstr "" #: ../lib/sanitize.sh:276 #, sh-format msgid "When validating the configuration file $conffile, $nb_warnings warnings were found." msgstr "Tijdens het valideren van het configuratiebestand $conffile zijn $nb_warnings waarchuwing(en) gevonden" #: ../lib/upload-methods.sh:38 msgid "Using the upload method \"ssh\"." msgstr "Gebruik Upload Methode \"ssh\"." #: ../lib/upload-methods.sh:47 #: ../lib/upload-methods.sh:85 msgid "No valid destination found, SSH upload not possible." msgstr "Geen geldige doellokatie opgegeven, SSH upload niet mogelijk." #: ../lib/upload-methods.sh:68 #, sh-format msgid "Error reported by backup-manager-upload for method \"scp\", check \"$logfile\"." msgstr "Fouten gemeld door backup-manager-upload voor methode \"scp\", controleer \"$logfile\"." #: ../lib/upload-methods.sh:76 msgid "Using the upload method \"ssh-gpg\"." msgstr "Gebruik Upload Methode \"ssh-gpg\"." #: ../lib/upload-methods.sh:88 msgid "No gpg recipient given. Argument is mandatory if upload method ssh-gpg is used." msgstr "Geen gpg ontvanger opgegeven. Argument is verplicht wanneer ssh-gpg als upload methode is aangegeven." #: ../lib/upload-methods.sh:105 #, sh-format msgid "Error reported by backup-manager-upload for method \"ssh-gpg\", check \"$logfile\"." msgstr "Fouten gemeld door backup-manager-upload voor methode \"ssh-gpg\", controleer \"$logfile\"." #: ../lib/upload-methods.sh:112 msgid "Using the upload method \"ftp\"." msgstr "Gebruik Upload Methode \"ftp\"." #: ../lib/upload-methods.sh:122 msgid "No valid destination found, FTP upload not possible." msgstr "Geen geldig doel opgegeven, FTP upload niet mogelijk." #: ../lib/upload-methods.sh:138 #, sh-format msgid "Error reported by backup-manager-upload for method \"ftp\", check \"$logfile\"." msgstr "Fouten gemeld door backup-manager-upload voor methode \"ftp\", controleer \"$logfile\"." #: ../lib/upload-methods.sh:146 msgid "Using the upload method \"S3\"." msgstr "Gebruik Upload Methode \"S3\"." #: ../lib/upload-methods.sh:168 #, sh-format msgid "Error reported by backup-manager-upload for method \"s3\", check \"$logfile\"." msgstr "Fouten gemeld door backup-manager-upload voor methode \"s3\", controleer \"$logfile\"." #: ../lib/upload-methods.sh:174 #, sh-format msgid "Uploading $directory to ${host}:${BM_UPLOAD_RSYNC_DESTINATION}" msgstr "Uploaden $directory naar ${host}:${BM_UPLOAD_RSYNC_DESTINATION}" #: ../lib/upload-methods.sh:185 msgid "Need a key to use rsync (set BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY)." msgstr "Sleutel nodig voor rsync (stel in: BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY)" #: ../lib/upload-methods.sh:196 #, sh-format msgid "Upload of $directory with rsync failed; check $logfile." msgstr "Uploaden van map $directory met rsync fout; controleer $logfile." #: ../lib/upload-methods.sh:215 msgid "No valid destination found, RSYNC upload not possible." msgstr "Geen geldig doel opgegeven, RSYNC upload niet mogelijk." #: ../lib/upload-methods.sh:234 msgid "No hosts given to the rsync method, set BM_UPLOAD_RSYNC_HOSTS." msgstr "Geen Hosts opgegeven voor rsync methode, stel in: BM_UPLOAD_RSYNC_HOSTS." #: ../lib/upload-methods.sh:241 msgid "Using the upload method \"rsync\"." msgstr "Gebruik Upload Methode \"rsync\"." #: ../lib/upload-methods.sh:248 msgid "Using the upload method \"rsync-snapshots\"." msgstr "Gebruik Upload Methode \"rsync-snapshots\"." #: ../backup-manager:127 msgid "The -b option must be followed by a valid date (YYYYMMDD)." msgstr "-b optie moet gevolgd worden door Valide datum (YYYYMMDD)." #: ../backup-manager:162 msgid "The -c option must be followed by an existing filename." msgstr "-c optie moet gevolgd worden door een bestaande bestandsnaam" #: ../backup-manager:202 msgid "Unable to exec the pre-command" msgstr "Pre-commando uitvoeren niet mogelijk" #~ msgid "Internal error: wrong call to bm_merge_incremental_backups()." #~ msgstr "Interne fout: verkeerde call naar bm_merge_incremental_backups()." #~ msgid "Unable to change the owner of \"$file_to_create\"." #~ msgstr "Kan eigenaar van f \"$file_to_create\". niet wijzigen" #~ msgid "Unable to change file permissions of \"$file_to_create\"." #~ msgstr "Kan bestandsrechten van \"$file_to_create\" niet wijzigen." #, fuzzy #~ msgid "Compressor $compress requires $gzip." #~ msgstr "Comprimeer-programma $compress benodigt $bzip" #~ msgid "Compressor $compress requires $bzip." #~ msgstr "Comprimeer-programma $compress benodigt $bzip" #~ msgid "CDROM burning requires $cdrecord, aborting." #~ msgstr "CDROM Branden vereist $cdrecord, afbreken." #~ msgid "$command ended, but $file_to_create not found; check $logfile" #~ msgstr "" #~ "$command beeindigd, maar $file_to_create niet gevonden; controleer " #~ "$logfile" #~ msgid "Error while using $gzip." #~ msgstr "Fout tijdens uitvoeren $gzip." #~ msgid "Error while using $bzip." #~ msgstr "Fout tijdens uitvoeren $bzip." #~ msgid "Using method \"$BM_ARCHIVE_METHOD\"" #~ msgstr "Gebruik methode: \"$BM_ARCHIVE_METHOD\"" #~ msgid "During the tarballs generation, $nb_err error(s) occurred." #~ msgstr "er (is) zijn $nb_err fout(en) geconstateerd." #~ msgid "The BM_TARBALL_DIRECTORIES conf key is not set in $conffile" #~ msgstr "" #~ "De BM_TARBALL_DIRECTORIES configuratiesleutel is niet ingevuld in " #~ "$conffile" #~ msgid "Unable to mount $BM_BURNING_DEVICE on $mount_point." #~ msgstr "niet mogelijk om $BM_BURNING_DEVICE te koppelen op $mount_point." #~ msgid "" #~ "$BM_BURNING_DEVICE is mounted, unmounting before the burning session." #~ msgstr "$BM_BURNING_DEVICE is gekoppeld, ontkoppeling voor de brandsessie." #~ msgid "Unable to unmount the device $BM_BURNING_DEVICE" #~ msgstr "Niet mogelijk om apparaat $BM_BURNING_DEVICE te ontkoppelen" #~ msgid "unable to unmount $mount_point" #~ msgstr "niet mogelijk om $mount_point te ontkoppelen" #~ msgid "unable to remove $mount_point" #~ msgstr "Niet mogelijk om $mount_point te verwijderen" #~ msgid "Entering directory $file." #~ msgstr "Openen map $file." #~ msgid "No such file $file_to_create" #~ msgstr "Bestand $file_to_create bestaat niet" #~ msgid "Unable to call backup-manager-upload." #~ msgstr "Niet mogelijk om backup-manager-upload aan te roepen." #~ msgid "unable to call backup-manager-upload" #~ msgstr "Niet mogelijk om backup-manager-upload aan te roepen" #~ msgid "backup-manager must be run as root." #~ msgstr "backup-manager moet als Root gedraaid worden." ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/po/fr.po��������������������������������������������������������������������0000644�0001750�0001750�00000074045�11503702461�015445� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Messages français pour backup-manager # Copyleft © 2004 Alexis Sukrieh.. # This file is distributed under the same license as the backup-manager package. msgid "" msgstr "" "Project-Id-Version: backup-manager 0.7.10\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-12-03 10:13+0100\n" "PO-Revision-Date: 2010-12-03 10:16+0100\n" "Last-Translator: Philippe Villiers <kissifrot@gmail.com>\n" "Language-Team: Debian l10n French Team <debian-l10n-french@lists.debian.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../lib/actions.sh:47 msgid "No backup method used." msgstr "Aucune méthode d'archivage utilisée." #: ../lib/actions.sh:50 #, sh-format msgid "No such backup method: $BM_ARCHIVE_METHOD" msgstr "Aucune méthode de sauvegarde du type : $BM_ARCHIVE_METHOD" #: ../lib/actions.sh:59 #, sh-format msgid "Unable to change the owner of \"$md5file\"." msgstr "Impossible de changer le propriétaire du fichier « $md5file »." #: ../lib/actions.sh:61 #, sh-format msgid "Unable to change file permissions of \"$md5file\"." msgstr "Impossible de changer les droits d'accès au fichier « $md5file »." #: ../lib/actions.sh:93 msgid "No upload method used." msgstr "Aucune méthode de téléchargement utilisée." #: ../lib/actions.sh:96 #, sh-format msgid "The upload method \"$method\" is not supported; skipping." msgstr "La méthode de téléchargement « $method » n'est pas supportée ; ignoré." #: ../lib/actions.sh:108 #, sh-format msgid "Cleaning $BM_REPOSITORY_ROOT" msgstr "Nettoyage de $BM_REPOSITORY_ROOT" #: ../lib/actions.sh:121 #, sh-format msgid "Running pre-command: $BM_PRE_BACKUP_COMMAND." msgstr "Lancement de la précommande : $BM_PRE_BACKUP_COMMAND" #: ../lib/actions.sh:125 msgid "Pre-command failed. Stopping the process." msgstr "La précommande a échoué. Arrêt du processus." #: ../lib/actions.sh:130 #, sh-format msgid "Pre-command returned: \"$RET\" (success)." msgstr "La pré-commande a retourné : « $RET » (succès)." #: ../lib/actions.sh:142 #, sh-format msgid "Running post-command: $BM_POST_BACKUP_COMMAND" msgstr "Lancement de la post-commande : $BM_POST_BACKUP_COMMAND" #: ../lib/actions.sh:146 msgid "Post-command failed." msgstr "La post-commande a échoué." #: ../lib/actions.sh:151 #, sh-format msgid "Post-command returned: \"$RET\" (success)." msgstr "La post-commande a retourné : « $RET » (succès)." #: ../lib/actions.sh:183 msgid "The BM_TARBALL_FILETYPE conf key is set to \"zip\" but zip is not installed." msgstr "La clef BM_TARBALL_FILETYPE vaut « zip » mais zip n'est pas installé." #: ../lib/actions.sh:188 msgid "The BM_TARBALL_FILETYPE conf key is set to \"tar.bz2\" but bzip2 is not installed." msgstr "La clef BM_TARBALL_FILETYPE vaut « tar.bz2 » mais bzip2 n'est pas installé." #: ../lib/actions.sh:193 msgid "The BM_TARBALL_FILETYPE conf key is set to \"tar.lz\" but lzma is not installed." msgstr "La clef BM_TARBALL_FILETYPE vaut « tar.lz » mais lzma n'est pas installé." #: ../lib/actions.sh:198 msgid "The BM_TARBALL_FILETYPE conf key is set to \"dar\" but dar is not installed." msgstr "La clef BM_TARBALL_FILETYPE vaut « dar » mais dar n'est pas installé." #: ../lib/actions.sh:210 #, sh-format msgid "The repository $BM_REPOSITORY_ROOT does not exist, creating it." msgstr "Le dépôt « $BM_REPOSITORY_ROOT » n'existe pas ; création." #: ../lib/backup-methods.sh:26 #, sh-format msgid "$file_to_create: ok (${size}M," msgstr "$file_to_create : OK (${size} Mo," #: ../lib/backup-methods.sh:54 #, sh-format msgid "Unable to purge duplicates of $file_to_create" msgstr "Impossible de purger les doublons de $file_to_create" #: ../lib/backup-methods.sh:65 #, sh-format msgid "Unable to change the owner of \"$file\"." msgstr "Impossible de changer le propriétaire du fichier « $file »." #: ../lib/backup-methods.sh:67 #, sh-format msgid "Unable to change file permissions of \"$file\"." msgstr "Impossible de changer les permissions du fichier « $file »." #: ../lib/backup-methods.sh:78 msgid "Warning, process interrupted." msgstr "Attention, interruption utilisateur. Les archives risquent d'être corrompues." #: ../lib/backup-methods.sh:82 #, sh-format msgid "Removing archive \"$bm_pending_archive\" (build interrupted)." msgstr "Suppression de l'archive « $bm_pending_archive » (création interrompue)." #: ../lib/backup-methods.sh:88 #, sh-format msgid "Restoring incremental-building details list: \"$bm_pending_incremental_list\"." msgstr "Restauration de la liste détaillée de création incrémentale : « $bm_pending_incremental_list » ." #: ../lib/backup-methods.sh:124 #, sh-format msgid "Unable to create \"$target\", check $logfile" msgstr "Impossible de créer « $target », lisez $logfile pour les détails." #: ../lib/backup-methods.sh:141 #, sh-format msgid "File $file_to_create already exists, skipping." msgstr "Le fichier $file_to_create existe déjà ; ignoré." #: ../lib/backup-methods.sh:152 msgid "gzip is not installed but gzip compression needed." msgstr "gzip n'est pas installé alors que la compression gzip est nécessaire." #: ../lib/backup-methods.sh:160 msgid "bzip2 is not installed but bzip2 compression needed." msgstr "bzip2 n'est pas installé alors que la compression bzip2 est nécessaire." #: ../lib/backup-methods.sh:178 #: ../lib/backup-methods.sh:202 #, sh-format msgid "Unable to exec $command; check $logfile" msgstr "Impossible d'exécuter $command ; lisez $logfile" #: ../lib/backup-methods.sh:184 #, sh-format msgid "Compressor $compress is needed." msgstr "L'archiveur $compress est nécessaire." #: ../lib/backup-methods.sh:209 #, sh-format msgid "No such compressor supported: $compress." msgstr "Cet archiveur n'est pas supporté : $compress" #: ../lib/backup-methods.sh:215 #, sh-format msgid "Unable to find $file_to_create" msgstr "Impossible de trouver $file_to_create" #: ../lib/backup-methods.sh:343 msgid "No frequency given, set BM_TARBALLINC_MASTERDATETYPE." msgstr "Aucune fréquence définie, changez BM_TARBALLINC_MASTERDATETYPE." #: ../lib/backup-methods.sh:354 #, sh-format msgid "Unknown frequency: $BM_TARBALLINC_MASTERDATETYPE" msgstr "Fréquence inconnue : $BM_TARBALLINC_MASTERDATETYPE" #: ../lib/backup-methods.sh:387 #, sh-format msgid "Building master backup for target: \"$dir_name\"." msgstr "Création de l'archive maître pour la cible : « $dir_name »." #: ../lib/backup-methods.sh:520 msgid "Tar reported a file changed during archive creation." msgstr "Tar a renvoyé qu'un fichier a changé pendant la création de l'archive." #: ../lib/backup-methods.sh:531 msgid "Dar reported a file changed during archive creation." msgstr "Dar a renvoyé qu'un fichier a changé pendant la création de l'archive." #: ../lib/backup-methods.sh:569 #, sh-format msgid "The archive type \"tar.bz2\" depends on the tool \"$bzip\"." msgstr "Le type d'archive « tar.bz2 » dépend de l'outil « $bzip »." #: ../lib/backup-methods.sh:576 #, sh-format msgid "The archive type \"tar.lz\" depends on the tool \"$lzma\"." msgstr "Le type d'archive « tar.lz » dépend de l'outil « $lzma »." #: ../lib/backup-methods.sh:583 #, sh-format msgid "The archive type \"zip\" depends on the tool \"$zip\"." msgstr "Le type d'archive « zip » dépend de l'outil « $zip »." #: ../lib/backup-methods.sh:589 #, sh-format msgid "The archive type \"dar\" depends on the tool \"$dar\"." msgstr "Le type d'archive « dar » dépend de l'outil « $dar »." #: ../lib/backup-methods.sh:595 #: ../lib/backup-methods.sh:669 #: ../lib/backup-methods.sh:715 #, sh-format msgid "The archive type \"$BM_TARBALL_FILETYPE\" is not supported." msgstr "Le type d'archive « $BM_TARBALL_FILETYPE » n'est pas géré." #: ../lib/backup-methods.sh:643 msgid "The configuration variable \"BM_ENCRYPTION_RECIPIENT\" must be defined." msgstr "La variable de configuration « BM_ENCRYPTION_RECIPIENT » doit être définie." #: ../lib/backup-methods.sh:649 #, sh-format msgid "The encryption is not yet possible with \"$BM_TARBALL_FILETYPE\" archives." msgstr "Le cryptage n'est pas supporté avec les archives de type « $BM_TARBALL_FILETYPE »." #: ../lib/backup-methods.sh:687 #, sh-format msgid "The program \"$gpg\" is needed." msgstr "Le programme « $gpg » est nécessaire." #: ../lib/backup-methods.sh:696 #: ../lib/backup-methods.sh:729 #, sh-format msgid "File $file_to_check already exists, skipping." msgstr "Le fichier $file_to_check existe déjà ; ignoré." #: ../lib/backup-methods.sh:761 #, sh-format msgid "Target \"$t\" is found in blacklist, skipping." msgstr "La cible « $t » n'existe pas dans la liste noire; ignoré." #: ../lib/backup-methods.sh:765 #, sh-format msgid "Target \"$t\" does not exist, skipping." msgstr "La cible « $t » n'existe pas ; ignoré." #: ../lib/backup-methods.sh:841 #: ../lib/backup-methods.sh:881 #: ../lib/backup-methods.sh:934 #: ../lib/backup-methods.sh:984 #: ../lib/backup-methods.sh:1008 #, sh-format msgid "Using method \"$method\"." msgstr "Utilisation de la méthode « $method »." #: ../lib/backup-methods.sh:867 msgid "1 error occurred during the tarball generation." msgstr "Une erreur a eu lieu pendant la génération des archives." #: ../lib/backup-methods.sh:869 #, sh-format msgid "$nb_err errors occurred during the tarball generation." msgstr "$nb_err erreurs ont eu lieu pendant la génération des archives." #: ../lib/backup-methods.sh:883 #, fuzzy, sh-format msgid "The \"pgsql\" method is chosen, but $pgdump is not found." msgstr "La méthode « mysql » est choisie, mais $mysqldump n'est pas présent." #: ../lib/backup-methods.sh:890 #, fuzzy, sh-format msgid "Found existing PgSQL client configuration file: $pgsql_conffile" msgstr "Utilisanton du fichier de configuration existant du client MySQL: $mysql_conffile" #: ../lib/backup-methods.sh:891 msgid "Looking for matching credentials in this file..." msgstr "" #: ../lib/backup-methods.sh:893 msgid "No matching credentials: inserting our own." msgstr "" #: ../lib/backup-methods.sh:899 #, fuzzy, sh-format msgid "Creating a default PgSQL client configuration file: $HOME/.pgpass" msgstr "Création d'un fichier de configuration par défaut du client MySQL: $mysql_conffile" #: ../lib/backup-methods.sh:920 msgid "restoring initial .pgpass file." msgstr "" #: ../lib/backup-methods.sh:936 #, sh-format msgid "The \"mysql\" method is chosen, but $mysqldump is not found." msgstr "La méthode « mysql » est choisie, mais $mysqldump n'est pas présent." #: ../lib/backup-methods.sh:946 #, sh-format msgid "Using existing MySQL client configuration file: $mysql_conffile" msgstr "Utilisanton du fichier de configuration existant du client MySQL: $mysql_conffile" #: ../lib/backup-methods.sh:950 #, sh-format msgid "Creating a default MySQL client configuration file: $mysql_conffile" msgstr "Création d'un fichier de configuration par défaut du client MySQL: $mysql_conffile" #: ../lib/backup-methods.sh:974 #, sh-format msgid "Removing default MySQL client configuration file: $mysql_conffile" msgstr "Suppression du fichier de configuration par défaut du client MySQL: $mysql_conffile" #: ../lib/backup-methods.sh:986 #, sh-format msgid "The \"svn\" method is chosen, but $svnadmin is not found." msgstr "La méthode « svn » est choisie, mais $svnadmin n'est pas présent." #: ../lib/backup-methods.sh:992 #, sh-format msgid "SVN repository \"$repository\" is not valid; skipping." msgstr "Le dépôt SVN « $repository » n'est pas valide ; ignoré." #: ../lib/backup-methods.sh:1017 #, sh-format msgid "Not enough args for this archive ($archive), skipping." msgstr "Pas assez d'arguments pour cette archive ($archive) ; ignoré." #: ../lib/backup-methods.sh:1024 msgid "Cannot create archive." msgstr "Impossible de créer l'archive." #: ../lib/burning-methods.sh:37 #, sh-format msgid "Device \"/dev/$device\" is mounted on \"$m\", unmounting it." msgstr "Le périphérique « /dev/$device » est monté sur « $m », démontage." #: ../lib/burning-methods.sh:53 #, sh-format msgid "MD5 checkup is only performed on disks. Please set the BM_BURNING_DEVICE in $conffile" msgstr "Les contrôles des sommes MD5 ne sont effectués que sur les media CD/DVD. Veuillez définir BM_BURNING_DEVICE dans « $conffile »." #: ../lib/burning-methods.sh:59 #, sh-format msgid "The mount point $mount_point is not there." msgstr "Le point de montage « $mount_point » n'est pas présent." #: ../lib/burning-methods.sh:66 #, sh-format msgid "Mounting $BM_BURNING_DEVICE on $mount_point." msgstr "Montage de $BM_BURNING_DEVICE sur $mount_point." #: ../lib/burning-methods.sh:90 #, sh-format msgid "Checking MD5 sum for $base_file:" msgstr "Vérification de la somme MD5 pour $base_file :" #: ../lib/burning-methods.sh:109 #, sh-format msgid "$str ok." msgstr "$str OK." #: ../lib/burning-methods.sh:112 #, sh-format msgid "$str failed (read error)." msgstr "$str Échec (erreur de lecture)." #: ../lib/burning-methods.sh:116 #, sh-format msgid "$str failed (MD5 hash mismatch)." msgstr "$str Échec (les sommes MD5 ne concordent pas)." #: ../lib/burning-methods.sh:123 msgid "Errors encountered during MD5 checks." msgstr "Problèmes lors du contrôle des sommes MD5." #: ../lib/burning-methods.sh:127 #, sh-format msgid "Unable to unmount the mount point $mount_point" msgstr "Impossible de démonter le point de montage « $mount_point »." #: ../lib/burning-methods.sh:128 #, sh-format msgid "Unable to remove the mount point $mount_point" msgstr "Impossible de supprimer le point de montage « $mount_point »." #: ../lib/burning-methods.sh:147 msgid "No burning method used." msgstr "Aucune méthode de gravure utilisée." #: ../lib/burning-methods.sh:171 #, sh-format msgid "Number of files to burn: $nb_file." msgstr "Nombre de fichiers à graver : $nb_file." #: ../lib/burning-methods.sh:173 #, sh-format msgid "Nothing to burn for the $BM__BURNING_DATE, try the '--burn <date>' switch." msgstr "Rien à graver pour le $BM__BURNING_DATE, essayez l'option « --burn <date> »." #: ../lib/burning-methods.sh:202 #: ../lib/burning-methods.sh:227 #, sh-format msgid "Burning archives of $BM__BURNING_DATE." msgstr "Gravure des archives du $BM__BURNING_DATE." #: ../lib/burning-methods.sh:207 #, sh-format msgid "Cannot burn archives of the $BM__BURNING_DATE, too big: ${size}M, must fit in $BM_BURNING_MAXSIZE" msgstr "Impossible de graver les archives du $BM__BURNING_DATE, car trop encombrant (${size} Mo). L'archive doit être inférieure à ${BM_BURNING_MAXSIZE} Mo." #: ../lib/burning-methods.sh:231 msgid "Burning the whole archives." msgstr "Gravure de toutes les archives." #: ../lib/burning-methods.sh:236 #, fuzzy, sh-format msgid "Trying to burn $BM_REPOSITORY_ROOT ($size MB) in interactive mode. You will be prompted to enter insert a disc when needed" msgstr "Tentative de gravure de $BM_REPOSITORY_ROOT ($size Mo) en mode interactif." #: ../lib/burning-methods.sh:267 #, sh-format msgid "Redirecting burning logs into $logfile" msgstr "Redirection des journaux de gravure dans $logfile" #: ../lib/burning-methods.sh:272 #, sh-format msgid "Forcing dev=${BM_BURNING_DEVFORCED} for cdrecord commands." msgstr "Ajout de « dev=${BM_BURNING_DEVFORCED} » dans les commandes de cdrecord." #: ../lib/burning-methods.sh:280 #, sh-format msgid "DVD+R(W) burning requires $growisofs, aborting." msgstr "La gravure de DVD+R(W) nécessite $growisofs ; annulation." #: ../lib/burning-methods.sh:283 #, sh-format msgid "Exporting archives to the DVD+R(W) disc in $BM_BURNING_DEVICE." msgstr "Export des archives vers le disque DVD+R(W) sur « $BM_BURNING_DEVICE »." #: ../lib/burning-methods.sh:287 #: ../lib/burning-methods.sh:307 #: ../lib/burning-methods.sh:319 #: ../lib/burning-methods.sh:325 #: ../lib/burning-methods.sh:338 #, sh-format msgid "failed, check $logfile" msgstr "Erreur, voir le fichier $logfile" #: ../lib/burning-methods.sh:292 #, sh-format msgid "DVD-R(W) burning requires $growisofs, aborting." msgstr "La gravure de DVD-R(W) nécessite $growisofs ; annulation." #: ../lib/burning-methods.sh:295 #, sh-format msgid "DVD-R(W) burning requires $dvdrwformat, aborting." msgstr "La gravure de DVD-R(W) nécessite $dvdrwformat ; annulation." #: ../lib/burning-methods.sh:298 #, sh-format msgid "Blanking the DVD-R(W) disc in $BM_BURNING_DEVICE" msgstr "Effacement du disque DVD-R(W) sur « $BM_BURNING_DEVICE »." #: ../lib/burning-methods.sh:302 #, sh-format msgid "Unable to blank the DVD-R(W) disc (check $logfile)." msgstr "Impossible d'effacer le disque DVD-R(W) (voir « $logfile »)." #: ../lib/burning-methods.sh:304 #, sh-format msgid "Exporting archives to the DVD-R(W) disc in $BM_BURNING_DEVICE." msgstr "Export des archives vers le disque DVD-R(W) sur « $BM_BURNING_DEVICE »." #: ../lib/burning-methods.sh:312 #: ../lib/burning-methods.sh:330 #, sh-format msgid "CD-R(W) burning requires $cdrecord, aborting." msgstr "La gravure de CD-R(W) nécessite $cdrecord ; annulation." #: ../lib/burning-methods.sh:315 #, sh-format msgid "Blanking the CDRW in $BM_BURNING_DEVICE." msgstr "Effacement du CD-RW sur $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:321 #: ../lib/burning-methods.sh:333 #, sh-format msgid "Burning data to $BM_BURNING_DEVICE." msgstr "Gravure des données sur $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:342 msgid "Nothing to burn." msgstr "Rien à graver." #: ../lib/burning-methods.sh:346 #, sh-format msgid "The requested burning method is not supported, check BM_BURNING_METHOD in $conffile" msgstr "La méthode de gravure demandée n'est pas supportée, voir BM_BURNING_METHOD dans $conffile" #: ../lib/burning-methods.sh:402 #, sh-format msgid "Not burning $file because it does not fit in the disk." msgstr "Annulation de la gravure de « $file » car ce fichier est trop gros pour le disque." #: ../lib/burning-methods.sh:443 #, sh-format msgid "No such index file: \"$index_file\"." msgstr "Impossible de trouver le fichier d'index : « $index_file »." #: ../lib/burning-methods.sh:485 msgid "The burning process will need one disk." msgstr "La phase de gravure nécessitera un disque." #: ../lib/burning-methods.sh:487 #, sh-format msgid "The burning process will need $number_of_indexes disks." msgstr "La phase de gravure nécessitera $number_of_indexes disques." #: ../lib/burning-methods.sh:499 #, sh-format msgid "Burning content of $index" msgstr "Gravure du contenu de « $index »." #: ../lib/dialog.sh:27 msgid "Output:" msgstr "Affichage :" #: ../lib/dialog.sh:28 msgid "Print this short help message." msgstr "Affiche ce court message d'aide." #: ../lib/dialog.sh:29 msgid "Print version number." msgstr "Affiche le numéro de version." #: ../lib/dialog.sh:30 msgid "Print what happens on STDOUT." msgstr "Affiche ce qui se passe sur STDOUT." #: ../lib/dialog.sh:31 msgid "Print debug messages on STDOUT." msgstr "Affiche les messages de débug sur STDOUT." #: ../lib/dialog.sh:32 msgid "Disable warnings." msgstr "Désactive les avertissements." #: ../lib/dialog.sh:35 msgid "Single actions:" msgstr "Actions uniques :" #: ../lib/dialog.sh:36 msgid "Just upload the files of the day." msgstr "Se contente d'envoyer les fichiers du jour." #: ../lib/dialog.sh:37 msgid "Just burn the files of the day." msgstr "Se contente de graver les fichiers du jour." #: ../lib/dialog.sh:38 msgid "Just test the md5 sums." msgstr "Se contente de tester les sommes MD5." #: ../lib/dialog.sh:39 msgid "Just purge old archives." msgstr "Se contente de supprimer les vieilles archives." #: ../lib/dialog.sh:42 msgid "Behaviour:" msgstr "Comportement :" #: ../lib/dialog.sh:43 msgid "Choose an alternate config file." msgstr "Choisit un fichier de configuration alternatif." #: ../lib/dialog.sh:44 msgid "Force overwrite of existing archives." msgstr "Oblige la réécriture d'archives existantes." #: ../lib/dialog.sh:47 msgid "Unwanted actions:" msgstr "Actions non désirées :" #: ../lib/dialog.sh:48 msgid "Disable the upload process." msgstr "Désactive la phase d'envoi de fichiers." #: ../lib/dialog.sh:49 msgid "Disable the burning process." msgstr "Désactive la phase de gravure de données." #: ../lib/dialog.sh:50 msgid "Disable the purge process." msgstr "Désactive la phase de nettoyage." #: ../lib/dialog.sh:64 #: ../lib/dialog.sh:83 msgid "Not in interactive mode, cannot continue." msgstr "Pas en mode interactif, impossible de continuer." #: ../lib/files.sh:79 #: ../lib/files.sh:94 msgid "No path given." msgstr "Aucun chemin fourni." #: ../lib/files.sh:169 #, sh-format msgid "Removing lock for old PID, $pid is not running." msgstr "Libération du verrou pour un vieux PID, $pid ne tourne plus." #: ../lib/files.sh:179 #, sh-format msgid "A backup-manager process ($pid) is already running with the conffile $conffile" msgstr "Un processus backup-manager ($pid) tourne déjà avec le fichier de configuration $conffile" #: ../lib/files.sh:183 #: ../lib/files.sh:189 #, sh-format msgid "Getting lock for backup-manager $pid with $conffile" msgstr "Demande de verrou pour backup-manager, $pid avec $conffile" #: ../lib/files.sh:192 msgid "failed (check the file permissions)." msgstr "échec (vérifiez les permissions du fichier)." #: ../lib/files.sh:280 #, sh-format msgid "$file is not a regular file." msgstr "$file n'est pas un fichier ordinaire." #: ../lib/files.sh:305 #, sh-format msgid "Removing obsolete master backup: \"$file\"." msgstr "Suppression de l'archive maître obsolète : « $file »." #: ../lib/files.sh:313 #, sh-format msgid "Removing obsolete master backup (isolated): \"$file\"." msgstr "Suppression de l'archive maître obsolète (isolée) : « $file »." #: ../lib/files.sh:320 #, sh-format msgid "Removing archive \"$file\"." msgstr "Suppression de l'archive « $file »." #: ../lib/files.sh:342 msgid "Directory given was not found." msgstr "Le répertoire spécifié n'est pas trouvable." #: ../lib/files.sh:363 #, sh-format msgid "Removing archive \"$archive\"." msgstr "Suppression de l'archive « $archive »." #: ../lib/files.sh:387 #, sh-format msgid "The given file does not exist: $file_to_create" msgstr "Le fichier donné n'existe pas : $file_to_create" #: ../lib/files.sh:392 msgid "No file given." msgstr "Aucun fichier spécifié." #: ../lib/files.sh:397 #: ../lib/files.sh:399 #: ../lib/files.sh:413 msgid "Unable to get date from file." msgstr "Impossible de récupérer la date du fichier." #: ../lib/files.sh:403 msgid "Unable to find the pattern of the file." msgstr "Impossible de trouver le motif du fichier." #: ../lib/files.sh:419 #, sh-format msgid "Unable to find the md5 hash of file \"$file\" in file \"$md5file\"." msgstr "Impossible de trouver le hachage MD5 du fichier « $file » dans le fichier « $md5file »." #: ../lib/files.sh:425 #, sh-format msgid "$file is a duplicate of $file_to_create (using symlink)." msgstr "$file est un doublon de $file_to_create (utilisation d'un lien symbolique)." #: ../lib/files.sh:436 #, fuzzy, sh-format msgid "File '$file' does not exist or is not readable." msgstr "Le fichier donné n'existe pas : $file_to_create" #: ../lib/files.sh:444 #, fuzzy, sh-format msgid "File '$file' is not executable" msgstr "$file n'est pas un fichier ordinaire." #: ../lib/logger.sh:159 #: ../backup-manager:257 msgid "Unable to exec post-command." msgstr "Impossible d'exécuter la post-commande." #: ../lib/logger.sh:163 msgid "Releasing lock" msgstr "Libération du verrou." #: ../lib/logger.sh:169 #, sh-format msgid "Exit reason: $exit_reason" msgstr "" #: ../lib/md5sum.sh:30 msgid "Internal error: bad usage of function get_md5sum_from_file()" msgstr "Erreur interne : mauvaise utilisation de le fonction get_md5sum_from_file()" #: ../lib/md5sum.sh:34 #, sh-format msgid "No md5file found: $md5file" msgstr "Pas de fichier MD5 : $md5file" #: ../lib/md5sum.sh:82 #, sh-format msgid "Archive given does not exist in the repository: $archive" msgstr "L'archive demandée n'existe pas dans le répertoire : $archive" #: ../lib/sanitize.sh:32 #, sh-format msgid "The configuration key $key is not set, using \"$default\"." msgstr "La clef de configuration $key n'est pas définie, utilisation de « $default »" #: ../lib/sanitize.sh:43 #, sh-format msgid "The configuration key \"$deprecated_key\" is deprecated, you should rename it \"$new_key\". Using \"$deprecated_value\"." msgstr "La clef de configuration « $deprecated_key » est obsolète, vous devez la renommer « $new_key ». Utilisation de « $deprecated_value »." #: ../lib/sanitize.sh:84 #, sh-format msgid "The configuration key $key is not set but $keymandatory is enabled." msgstr "La clef de configuration « $key » n'est pas définie mais « $keymandatory » est activée." #: ../lib/sanitize.sh:102 #, sh-format msgid "Deprecated boolean, $key is set to \"yes\", setting \"true\" instead." msgstr "Booléen obsolète : $key vaut actuellement « yes », utilisez « true » à la place." #: ../lib/sanitize.sh:107 #, sh-format msgid "Deprecated boolean, $key is set to \"no\", setting \"false\" instead." msgstr "Booléen obsolète : $key vaut actuellement « no », utilisez « false » à la place." #: ../lib/sanitize.sh:131 #, sh-format msgid "Unable to create BM_TEMP_DIR: \"$BM_TEMP_DIR\"." msgstr "Impossible de créer le répertoire BM_TEMP_DIR : « $BM_TEMP_DIR »." #: ../lib/sanitize.sh:170 msgid "BM_TARBALLINC_MASTERDATEVALUE should not be greater than 6, falling back to 0" msgstr "BM_TARBALLINC_MASTERDATEVALUE ne doit pas être supérieur à 6, retour à la valeur 0" #: ../lib/sanitize.sh:175 msgid "BM_TARBALLINC_MASTERDATEVALUE should not be greater than 31, falling back to 1" msgstr "BM_TARBALLINC_MASTERDATEVALUE ne doit pas être supérieur à 31, retour à la valeur 1" #: ../lib/sanitize.sh:288 #, sh-format msgid "When validating the configuration file $conffile, $nb_warnings warnings were found." msgstr "Lors de la validation du fichier de configuration $conffile, $nb_warnings avertissements ont été détectés." #: ../lib/upload-methods.sh:38 msgid "Using the upload method \"ssh\"." msgstr "Utilisation de la méthode de téléchargement « ssh »." #: ../lib/upload-methods.sh:47 #: ../lib/upload-methods.sh:85 msgid "No valid destination found, SSH upload not possible." msgstr "Aucune destination valide, téléchargement SSH impossible." #: ../lib/upload-methods.sh:68 #, sh-format msgid "Error reported by backup-manager-upload for method \"scp\", check \"$logfile\"." msgstr "Erreur rapportée par backup-manager-upload pour la méthode « scp », voir « $logfile »." #: ../lib/upload-methods.sh:76 msgid "Using the upload method \"ssh-gpg\"." msgstr "Utilisation de la méthode de téléchargement « ssh-gpg »." #: ../lib/upload-methods.sh:88 msgid "No gpg recipient given. Argument is mandatory if upload method ssh-gpg is used." msgstr "Aucune identité GPG fournie. Cet argument est obligatoire pour utiliser la méthode « ssh-gpg »." #: ../lib/upload-methods.sh:105 #, sh-format msgid "Error reported by backup-manager-upload for method \"ssh-gpg\", check \"$logfile\"." msgstr "Erreur rapportée par backup-manager-upload pour la méthode « ssh-gpg », voir « $logfile »." #: ../lib/upload-methods.sh:112 msgid "Using the upload method \"ftp\"." msgstr "Utilisation de la méthode de téléchargement « ftp »." #: ../lib/upload-methods.sh:122 msgid "No valid destination found, FTP upload not possible." msgstr "Aucune destination valide, téléchargement FTP impossible." #: ../lib/upload-methods.sh:146 #, sh-format msgid "Error reported by backup-manager-upload for method \"ftp\", check \"$logfile\"." msgstr "Erreur rapportée par backup-manager-upload pour la méthode « ftp », voir « $logfile »." #: ../lib/upload-methods.sh:154 msgid "Using the upload method \"S3\"." msgstr "Utilisation de la méthode de téléchargement « S3 »." #: ../lib/upload-methods.sh:176 #, sh-format msgid "Error reported by backup-manager-upload for method \"s3\", check \"$logfile\"." msgstr "Erreur rapportée par backup-manager-upload pour la méthode « s3 », voir « $logfile »." #: ../lib/upload-methods.sh:182 #, sh-format msgid "Uploading $directory to ${host}:${BM_UPLOAD_RSYNC_DESTINATION}" msgstr "Téléchargement de $directory vers ${host}:${BM_UPLOAD_RSYNC_DESTINATION}" #: ../lib/upload-methods.sh:193 msgid "Need a key to use rsync (set BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY)." msgstr "Besoin d'une clef pour utiliser rsync (définir BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY)." #: ../lib/upload-methods.sh:204 #, sh-format msgid "Upload of $directory with rsync failed; check $logfile." msgstr "Échec du téléchargement de $directory avec rsync ; voir $logfile" #: ../lib/upload-methods.sh:223 msgid "No valid destination found, RSYNC upload not possible." msgstr "Aucune destination valide, téléchargement RSYNC impossible." #: ../lib/upload-methods.sh:242 msgid "No hosts given to the rsync method, set BM_UPLOAD_RSYNC_HOSTS." msgstr "Aucun hôte fourni à la méthode rsync, veuillez définir BM_UPLOAD_RSYNC_HOSTS." #: ../lib/upload-methods.sh:249 msgid "Using the upload method \"rsync\"." msgstr "Utilisation de la méthode de téléchargement « rsync »." #: ../lib/upload-methods.sh:256 msgid "Using the upload method \"rsync-snapshots\"." msgstr "Utilisation de la méthode de téléchargement « rsync-snapshots »." #: ../backup-manager:127 msgid "The -b option must be followed by a valid date (YYYYMMDD)." msgstr "L'option -b doit être suivie d'une date valide (AAAAMMJJ)." #: ../backup-manager:162 msgid "The -c option must be followed by an existing filename." msgstr "L'option -c doit être suivie d'un nom de fichier existant." #: ../backup-manager:202 msgid "Unable to exec the pre-command" msgstr "Impossible d'exécuter la précommande." #~ msgid "Internal error: wrong call to bm_merge_incremental_backups()." #~ msgstr "Erreur interne : mauvais appel à bm_merge_incremental_backups()." #~ msgid "Unable to change the owner of \"$file_to_create\"." #~ msgstr "Impossible de changer le propriétaire de « $file_to_create »." #~ msgid "Unable to change file permissions of \"$file_to_create\"." #~ msgstr "Impossible de changer les droits d'accès de « $file_to_create »." #, fuzzy #~ msgid "Compressor $compress requires $gzip." #~ msgstr "L'archiveur $compress nécessite $bzip." #~ msgid "Compressor $compress requires $bzip." #~ msgstr "L'archiveur $compress nécessite $bzip." �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/po/LINGUAS������������������������������������������������������������������0000644�0001750�0001750�00000000073�11503702461�015511� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Backup Manager available languages. cs de es fr it vi nl ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/po/de.po��������������������������������������������������������������������0000644�0001750�0001750�00000070232�11503702461�015420� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# German messages for backup-manager. # Copyright © 2004, 2005, 2006, 2007, 2008 The Backup Manager Authors # This file is distributed under the same license as the backup-manager package. # Michael Prokop <mikap@grml.org>, 2003. # Andreas "Jimmy" Gredler <jimmy@backup-manager.org>, 2005. # Sven Joachim <svenjoac@gmx.de>, 2005, 2006, 2008, 2009. # msgid "" msgstr "" "Project-Id-Version: backup-manager 0.7.10\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-07-15 20:27+0200\n" "PO-Revision-Date: 2009-07-11 22:42+0200\n" "Last-Translator: Sven Joachim <svenjoac@gmx.de>\n" "Language-Team: German <debian-l10n-german@lists.debian.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../lib/actions.sh:44 msgid "No backup method used." msgstr "Keine Backup-Methode verwendet." #: ../lib/actions.sh:47 #, sh-format msgid "No such backup method: $BM_ARCHIVE_METHOD" msgstr "Backup-Methode existiert nicht: $BM_ARCHIVE_METHOD" #: ../lib/actions.sh:56 #, sh-format msgid "Unable to change the owner of \"$md5file\"." msgstr "Kann den Besitzer von »$md5file« nicht ändern." #: ../lib/actions.sh:58 #, sh-format msgid "Unable to change file permissions of \"$md5file\"." msgstr "Kann die Zugriffsrechte von »$md5file« nicht ändern." #: ../lib/actions.sh:90 msgid "No upload method used." msgstr "Keine Upload-Methode verwendet." #: ../lib/actions.sh:93 #, sh-format msgid "The upload method \"$method\" is not supported; skipping." msgstr "" "Die Upload-Methode »$method« wird nicht unterstützt; der Upload wird " "übergangen." #: ../lib/actions.sh:105 #, sh-format msgid "Cleaning $BM_REPOSITORY_ROOT" msgstr "Aufräumen von $BM_REPOSITORY_ROOT" #: ../lib/actions.sh:118 #, sh-format msgid "Running pre-command: $BM_PRE_BACKUP_COMMAND." msgstr "Pre-command läuft: $BM_PRE_BACKUP_COMMAND." #: ../lib/actions.sh:122 msgid "Pre-command failed. Stopping the process." msgstr "Pre-command fehlgeschlagen. Prozess wurde gestoppt." #: ../lib/actions.sh:127 #, sh-format msgid "Pre-command returned: \"$RET\" (success)." msgstr "Pre-command gab »$RET« (Erfolg) zurück." #: ../lib/actions.sh:139 #, sh-format msgid "Running post-command: $BM_POST_BACKUP_COMMAND" msgstr "Post-command läuft: $BM_POST_BACKUP_COMMAND" #: ../lib/actions.sh:143 msgid "Post-command failed." msgstr "Post-command fehlgeschlagen." #: ../lib/actions.sh:148 #, sh-format msgid "Post-command returned: \"$RET\" (success)." msgstr "Post-command gab »$RET« (Erfolg) zurück." #: ../lib/actions.sh:180 msgid "" "The BM_TARBALL_FILETYPE conf key is set to \"zip\" but zip is not installed." msgstr "" "Die Konfigurationsvariable BM_TARBALL_FILETYPE ist auf »zip« gesetzt, aber " "zip ist nicht installiert." #: ../lib/actions.sh:185 msgid "" "The BM_TARBALL_FILETYPE conf key is set to \"bzip2\" but bzip2 is not " "installed." msgstr "" "Die Konfigurationsvariable BM_TARBALL_FILETYPE ist auf »bzip2« gesetzt, aber " "bzip2 ist nicht installiert." #: ../lib/actions.sh:190 msgid "" "The BM_TARBALL_FILETYPE conf key is set to \"dar\" but dar is not installed." msgstr "" "Die Konfigurationsvariable BM_TARBALL_FILETYPE ist auf »dar« gesetzt, aber " "dar ist nicht installiert." #: ../lib/actions.sh:202 #, sh-format msgid "The repository $BM_REPOSITORY_ROOT does not exist, creating it." msgstr "Das Depot $BM_REPOSITORY_ROOT existiert nicht, wird angelegt." #: ../lib/backup-methods.sh:26 #, sh-format msgid "$file_to_create: ok (${size}M," msgstr "$file_to_create: ok (${size}M," # FIXME: no quotation marks here, later there are. #: ../lib/backup-methods.sh:54 #, sh-format msgid "Unable to purge duplicates of $file_to_create" msgstr "Kann Duplikate von $file_to_create nicht löschen" #: ../lib/backup-methods.sh:65 #, sh-format msgid "Unable to change the owner of \"$file\"." msgstr "Kann den Besitzer von »$file« nicht ändern." #: ../lib/backup-methods.sh:67 #, sh-format msgid "Unable to change file permissions of \"$file\"." msgstr "Kann die Zugriffsrechte von »$file« nicht ändern." #: ../lib/backup-methods.sh:78 msgid "Warning, process interrupted." msgstr "Warnung, Prozess wurde unterbrochen." #: ../lib/backup-methods.sh:82 #, sh-format msgid "Removing archive \"$bm_pending_archive\" (build interrupted)." msgstr "Löschen des Archivs »$bm_pending_archive« (Erstellung unterbrochen)." #: ../lib/backup-methods.sh:88 #, sh-format msgid "" "Restoring incremental-building details list: \"$bm_pending_incremental_list" "\"." msgstr "" "Stelle Detailliste für inkrementelle Erstellung wieder her: " "»$bm_pending_incremental_list«." #: ../lib/backup-methods.sh:124 #, sh-format msgid "Unable to create \"$target\", check $logfile" msgstr "Kann »$target« nicht anlegen, überprüfen Sie $logfile" #: ../lib/backup-methods.sh:140 #, sh-format msgid "File $file_to_create already exists, skipping." msgstr "Datei $file_to_create existiert bereits, wird übergangen." #: ../lib/backup-methods.sh:151 msgid "gzip is not installed but gzip compression needed." msgstr "Gzip ist nicht installiert, aber gzip-Kompression ist erforderlich." #: ../lib/backup-methods.sh:159 msgid "bzip2 is not installed but bzip2 compression needed." msgstr "Bzip2 ist nicht installiert, aber bzip2-Kompression ist erforderlich." #: ../lib/backup-methods.sh:177 ../lib/backup-methods.sh:201 #, sh-format msgid "Unable to exec $command; check $logfile" msgstr "Kann $command nicht ausführen; überprüfen Sie $logfile" #: ../lib/backup-methods.sh:183 #, sh-format msgid "Compressor $compress is needed." msgstr "Kompressor $compress ist erforderlich." #: ../lib/backup-methods.sh:208 #, sh-format msgid "No such compressor supported: $compress." msgstr "Dieser Kompressor wird nicht unterstützt: $compress." #: ../lib/backup-methods.sh:214 #, sh-format msgid "Unable to find $file_to_create" msgstr "Kann $file_to_create nicht finden" #: ../lib/backup-methods.sh:342 msgid "No frequency given, set BM_TARBALLINC_MASTERDATETYPE." msgstr "Keine Häufigkeit angegeben, setzen Sie $BM_TARBALLINC_MASTERDATETYPE." #: ../lib/backup-methods.sh:353 #, sh-format msgid "Unknown frequency: $BM_TARBALLINC_MASTERDATETYPE" msgstr "Unbekannte Häufigkeit: $BM_TARBALLINC_MASTERDATETYPE" #: ../lib/backup-methods.sh:386 #, sh-format msgid "Building master backup for target: \"$dir_name\"." msgstr "Erstellen des Master-Backups für das Ziel »$dir_name«." #: ../lib/backup-methods.sh:515 msgid "Tar reported a file changed during archive creation." msgstr "Tar berichtete eine geänderte Datei beim Erstellen des Archivs." #: ../lib/backup-methods.sh:526 msgid "Dar reported a file changed during archive creation." msgstr "Dar berichtete eine geänderte Datei beim Erstellen des Archivs." # FIXME: tool and archive type should be variables to avoid string duplication. #: ../lib/backup-methods.sh:564 #, sh-format msgid "The archive type \"tar.bz2\" depends on the tool \"$bzip\"." msgstr "Der Archivtyp »tar.bz2« hängt vom Werkzeug »$bzip« ab." #: ../lib/backup-methods.sh:571 #, sh-format msgid "The archive type \"tar.lz\" depends on the tool \"$lzma\"." msgstr "Der Archivtyp »tar.lz« hängt vom Werkzeug »$lzma« ab." #: ../lib/backup-methods.sh:578 #, sh-format msgid "The archive type \"zip\" depends on the tool \"$zip\"." msgstr "Der Archivtyp »zip« hängt vom Werkzeug »$zip« ab." #: ../lib/backup-methods.sh:584 #, sh-format msgid "The archive type \"dar\" depends on the tool \"$dar\"." msgstr "Der Archivtyp »dar« hängt vom Werkzeug »$dar« ab." #: ../lib/backup-methods.sh:590 ../lib/backup-methods.sh:677 #: ../lib/backup-methods.sh:723 #, sh-format msgid "The archive type \"$BM_TARBALL_FILETYPE\" is not supported." msgstr "Der Archivtyp »$BM_TARBALL_FILETYPE« wird nicht unterstützt." #: ../lib/backup-methods.sh:651 msgid "The configuration variable \"BM_ENCRYPTION_RECIPIENT\" must be defined." msgstr "" "Die Konfigurationsvariable »$BM_ENCRYPTION_RECIPIENT« muss definiert sein." #: ../lib/backup-methods.sh:657 #, sh-format msgid "" "The encryption is not yet possible with \"$BM_TARBALL_FILETYPE\" archives." msgstr "" "Die Verschlüsselung ist mit »$BM_TARBALL_FILETYPE«-Archiven noch nicht " "möglich. " #: ../lib/backup-methods.sh:695 #, sh-format msgid "The program \"$gpg\" is needed." msgstr "Das Programm »$gpg« wird benötigt." #: ../lib/backup-methods.sh:704 ../lib/backup-methods.sh:737 #, sh-format msgid "File $file_to_check already exists, skipping." msgstr "Datei $file_to_check existiert bereits, wird übergangen." #: ../lib/backup-methods.sh:769 #, sh-format msgid "Target \"$t\" is found in blacklist, skipping." msgstr "Ziel »$t« wurde in Blacklist gefunden, wird übergangen." #: ../lib/backup-methods.sh:773 #, sh-format msgid "Target \"$t\" does not exist, skipping." msgstr "Ziel »$t« existiert nicht, wird übergangen." #: ../lib/backup-methods.sh:849 ../lib/backup-methods.sh:888 #: ../lib/backup-methods.sh:938 ../lib/backup-methods.sh:962 #, sh-format msgid "Using method \"$method\"." msgstr "Verwende die Methode »$method«." #: ../lib/backup-methods.sh:875 msgid "1 error occurred during the tarball generation." msgstr "Beim Anlegen der Tarbälle ist ein Fehler aufgetreten." #: ../lib/backup-methods.sh:877 #, sh-format msgid "$nb_err errors occurred during the tarball generation." msgstr "Beim Anlegen der Tarbälle sind $nb_err Fehler aufgetreten." #: ../lib/backup-methods.sh:890 #, sh-format msgid "The \"mysql\" method is chosen, but $mysqldump is not found." msgstr "Die »mysql«-Methode ist gewählt, aber $mysqldump wurde nicht gefunden." #: ../lib/backup-methods.sh:900 #, sh-format msgid "Using existing MySQL client configuration file: $mysql_conffile" msgstr "" "Verwende existierende Konfigurationsdatei für den MySQL-Client: " "$mysql_conffile" #: ../lib/backup-methods.sh:904 #, sh-format msgid "Creating a default MySQL client configuration file: $mysql_conffile" msgstr "" "Lege eine Standard-Konfigurationsdatei für den MySQL-Client an: " "$mysql_conffile" #: ../lib/backup-methods.sh:928 #, sh-format msgid "Removing default MySQL client configuration file: $mysql_conffile" msgstr "" "Lösche Standard-Konfigurationsdatei für den MySQL-Client: $mysql_conffile" #: ../lib/backup-methods.sh:940 #, sh-format msgid "The \"svn\" method is chosen, but $svnadmin is not found." msgstr "Die »svn«-Methode ist gewählt, aber $svnadmin wurde nicht gefunden." #: ../lib/backup-methods.sh:946 #, sh-format msgid "SVN repository \"$repository\" is not valid; skipping." msgstr "SVN-Depot »$repository« ist nicht gültig; wird übergangen." #: ../lib/backup-methods.sh:971 #, sh-format msgid "Not enough args for this archive ($archive), skipping." msgstr "Zu wenige Argumente für dieses Archiv ($archive), wird übergangen." #: ../lib/backup-methods.sh:978 msgid "Cannot create archive." msgstr "Kann Archiv nicht anlegen." #: ../lib/burning-methods.sh:37 #, sh-format msgid "Device \"/dev/$device\" is mounted on \"$m\", unmounting it." msgstr "Gerät »/dev/$device« ist auf »$m« eingehängt, es wird ausgehängt." # FIXME: s/disks/optical discs/ #: ../lib/burning-methods.sh:53 #, sh-format msgid "" "MD5 checkup is only performed on disks. Please set the BM_BURNING_DEVICE in " "$conffile" msgstr "" "MD5-Überprüfung wird nur auf optischen Medien durchgeführt. Bitte setzen Sie " "BM_BURNING_DEVICE in $conffile" #: ../lib/burning-methods.sh:59 #, sh-format msgid "The mount point $mount_point is not there." msgstr "Der Einhängepunkt $mount_point existiert nicht." #: ../lib/burning-methods.sh:66 #, sh-format msgid "Mounting $BM_BURNING_DEVICE on $mount_point." msgstr "Einhängen von $BM_BURNING_DEVICE auf $mount_point." #: ../lib/burning-methods.sh:90 #, sh-format msgid "Checking MD5 sum for $base_file:" msgstr "Überprüfen der MD5-Summe für $base_file:" #: ../lib/burning-methods.sh:109 #, sh-format msgid "$str ok." msgstr "$str ok." #: ../lib/burning-methods.sh:112 #, sh-format msgid "$str failed (read error)." msgstr "$str fehlgeschlagen (Lesefehler)." #: ../lib/burning-methods.sh:116 #, sh-format msgid "$str failed (MD5 hash mismatch)." msgstr "$str fehlgeschlagen (MD5-Summe stimmt nicht überein)." #: ../lib/burning-methods.sh:123 msgid "Errors encountered during MD5 checks." msgstr "Fehler während der MD5-Überprüfung aufgetreten." #: ../lib/burning-methods.sh:127 #, sh-format msgid "Unable to unmount the mount point $mount_point" msgstr "Kann den Einhängepunkt $mount_point nicht aushängen." #: ../lib/burning-methods.sh:128 #, sh-format msgid "Unable to remove the mount point $mount_point" msgstr "Kann den Einhängepunkt $mount_point nicht entfernen." #: ../lib/burning-methods.sh:147 msgid "No burning method used." msgstr "Keine Brennmethode verwendet." #: ../lib/burning-methods.sh:171 #, sh-format msgid "Number of files to burn: $nb_file." msgstr "Anzahl zu brennender Dateien: $nb_file." #: ../lib/burning-methods.sh:173 #, sh-format msgid "" "Nothing to burn for the $BM__BURNING_DATE, try the '--burn <date>' switch." msgstr "" "Für das Datum $BM__BURNING_DATE ist nichts zu brennen, probieren Sie\n" "den Schalter »--burn <Datum>«." #: ../lib/burning-methods.sh:202 ../lib/burning-methods.sh:227 #, sh-format msgid "Burning archives of $BM__BURNING_DATE." msgstr "Brennen der Archive von $BM__BURNING_DATE." #: ../lib/burning-methods.sh:207 #, sh-format msgid "" "Cannot burn archives of the $BM__BURNING_DATE, too big: ${size}M, must fit " "in $BM_BURNING_MAXSIZE" msgstr "" "Kann Archive des Tages $BM__BURNING_DATE nicht brennen, zu groß: ${size}M,\n" "maximale Größe $BM_BURNING_MAXSIZE" #: ../lib/burning-methods.sh:231 msgid "Burning the whole archives." msgstr "Brennen der gesamten Archive." #: ../lib/burning-methods.sh:236 #, sh-format msgid "Trying to burn $BM_REPOSITORY_ROOT ($size MB) in interactive mode." msgstr "" "Versuche $BM_REPOSITORY_ROOT ($size MB) im interaktiven Modus zu brennen." #: ../lib/burning-methods.sh:267 #, sh-format msgid "Redirecting burning logs into $logfile" msgstr "Umleiten der Ausgaben des Brennprogramms nach $logfile" # FIXME: should use $cdrecord, since wodim is used in Debian #: ../lib/burning-methods.sh:272 #, sh-format msgid "Forcing dev=${BM_BURNING_DEVFORCED} for cdrecord commands." msgstr "Erzwinge dev=${BM_BURNING_DEVFORCED} für cdrecord-Befehle." #: ../lib/burning-methods.sh:280 #, sh-format msgid "DVD+R(W) burning requires $growisofs, aborting." msgstr "DVD+R(W)-Brennen erfordert $growisofs, Abbruch." #: ../lib/burning-methods.sh:283 #, sh-format msgid "Exporting archives to the DVD+R(W) disc in $BM_BURNING_DEVICE." msgstr "Exportieren der Archive auf das DVD+R(W)-Medium in $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:287 ../lib/burning-methods.sh:307 #: ../lib/burning-methods.sh:319 ../lib/burning-methods.sh:325 #: ../lib/burning-methods.sh:338 #, sh-format msgid "failed, check $logfile" msgstr "fehlgeschlagen, überprüfen Sie $logfile" #: ../lib/burning-methods.sh:292 #, sh-format msgid "DVD-R(W) burning requires $growisofs, aborting." msgstr "DVD-R(W)-Brennen erfordert $growisofs, Abbruch." #: ../lib/burning-methods.sh:295 #, sh-format msgid "DVD-R(W) burning requires $dvdrwformat, aborting." msgstr "DVD-R(W)-Brennen erfordert $dvdrwformat, Abbruch." #: ../lib/burning-methods.sh:298 #, sh-format msgid "Blanking the DVD-R(W) disc in $BM_BURNING_DEVICE" msgstr "Löschen des DVD-R(W)-Mediums in $BM_BURNING_DEVICE" #: ../lib/burning-methods.sh:302 #, sh-format msgid "Unable to blank the DVD-R(W) disc (check $logfile)." msgstr "Kann das DVD-R(W)-Medium nicht löschen (überprüfen Sie $logfile)." #: ../lib/burning-methods.sh:304 #, sh-format msgid "Exporting archives to the DVD-R(W) disc in $BM_BURNING_DEVICE." msgstr "Exportieren der Archive auf das DVD-R(W)-Medium in $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:312 ../lib/burning-methods.sh:330 #, sh-format msgid "CD-R(W) burning requires $cdrecord, aborting." msgstr "CD-Brennen erfordert $cdrecord, Abbruch." #: ../lib/burning-methods.sh:315 #, sh-format msgid "Blanking the CDRW in $BM_BURNING_DEVICE." msgstr "Löschen der CD-RW in $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:321 ../lib/burning-methods.sh:333 #, sh-format msgid "Burning data to $BM_BURNING_DEVICE." msgstr "Brennen der Daten auf $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:342 msgid "Nothing to burn." msgstr "Nichts zu brennen." #: ../lib/burning-methods.sh:346 #, sh-format msgid "" "The requested burning method is not supported, check BM_BURNING_METHOD in " "$conffile" msgstr "" "Die angeforderte Brennmethode wird nicht unterstützt, überprüfen Sie " "BM_BURNING_METHOD in $conffile" #: ../lib/burning-methods.sh:402 #, sh-format msgid "Not burning $file because it does not fit in the disk." msgstr "Datei $file wird nicht gebrannt, weil sie nicht auf das Medium passt." #: ../lib/burning-methods.sh:443 #, sh-format msgid "No such index file: \"$index_file\"." msgstr "Die Indexdatei »$index_file« existiert nicht." #: ../lib/burning-methods.sh:485 msgid "The burning process will need one disk." msgstr "Der Brennvorgang benötigt ein Medium." #: ../lib/burning-methods.sh:487 #, sh-format msgid "The burning process will need $number_of_indexes disks." msgstr "Der Brennvorgang benötigt $number_of_indexes Medien." #: ../lib/burning-methods.sh:499 #, sh-format msgid "Burning content of $index" msgstr "Brennen des Inhalts von $index" #: ../lib/dialog.sh:27 msgid "Output:" msgstr "Ausgabe:" #: ../lib/dialog.sh:28 msgid "Print this short help message." msgstr "Diesen kurzen Hilfetext ausgeben." #: ../lib/dialog.sh:29 msgid "Print what happens on STDOUT." msgstr "Auf STDOUT ausgeben, was passiert." #: ../lib/dialog.sh:30 msgid "Disable warnings." msgstr "Warnungen deaktivieren." #: ../lib/dialog.sh:33 msgid "Single actions:" msgstr "Einzelne Aktionen:" #: ../lib/dialog.sh:34 msgid "Just upload the files of the day." msgstr "Nur die Dateien des Tages hochladen." #: ../lib/dialog.sh:35 msgid "Just burn the files of the day." msgstr "Nur die Dateien des Tages brennen." #: ../lib/dialog.sh:36 msgid "Just test the md5 sums." msgstr "Nur die MD5-Summen testen." #: ../lib/dialog.sh:37 msgid "Just purge old archives." msgstr "Nur alte Archive löschen." #: ../lib/dialog.sh:40 msgid "Behaviour:" msgstr "Verhalten:" #: ../lib/dialog.sh:41 msgid "Choose an alternate config file." msgstr "Alternative Konfigurationsdatei wählen." #: ../lib/dialog.sh:42 msgid "Force overwrite of existing archives." msgstr "Überschreiben existierender Archive erzwingen." #: ../lib/dialog.sh:45 msgid "Unwanted actions:" msgstr "Unerwünschte Aktionen:" #: ../lib/dialog.sh:46 msgid "Disable the upload process." msgstr "Den Upload-Vorgang deaktivieren." #: ../lib/dialog.sh:47 msgid "Disable the burning process." msgstr "Den Brennvorgang deaktivieren." #: ../lib/dialog.sh:48 msgid "Disable the purge process." msgstr "Löschen alter Archive deaktivieren." #: ../lib/dialog.sh:62 ../lib/dialog.sh:81 msgid "Not in interactive mode, cannot continue." msgstr "Nicht im interaktivem Modus, kann nicht fortsetzen." #: ../lib/files.sh:79 ../lib/files.sh:94 msgid "No path given." msgstr "Kein Pfad angegeben." #: ../lib/files.sh:169 #, sh-format msgid "Removing lock for old PID, $pid is not running." msgstr "Löschen der Sperrdatei von alter Prozess-ID, $pid läuft nicht." #: ../lib/files.sh:179 #, sh-format msgid "" "A backup-manager process ($pid) is already running with the conffile " "$conffile" msgstr "" "Ein backup-manager-Prozess ($pid) läuft bereits mit der Konfigurationsdatei " "$conffile" # FIXME: separating the strings is l10n-unfriendly. #: ../lib/files.sh:183 ../lib/files.sh:189 #, sh-format msgid "Getting lock for backup-manager $pid with $conffile" msgstr "Holen der Sperrdatei für backup-manager $pid mit $conffile" #: ../lib/files.sh:192 msgid "failed (check the file permissions)." msgstr "fehlgeschlagen (überprüfen Sie die Dateirechte)." #: ../lib/files.sh:280 #, sh-format msgid "$file is not a regular file." msgstr "$file ist keine reguläre Datei." #: ../lib/files.sh:305 #, sh-format msgid "Removing obsolete master backup: \"$file\"." msgstr "Löschen des veralteten Master-Backups: »$file«." #: ../lib/files.sh:313 #, sh-format msgid "Removing obsolete master backup (isolated): \"$file\"." msgstr "Löschen des veralteten Master-Backups (isoliert): »$file«." #: ../lib/files.sh:320 #, sh-format msgid "Removing archive \"$file\"." msgstr "Löschen des Archivs »$file«." #: ../lib/files.sh:342 msgid "Directory given was not found." msgstr "Angegebenes Verzeichnis wurde nicht gefunden." #: ../lib/files.sh:363 #, sh-format msgid "Removing archive \"$archive\"." msgstr "Löschen des Archivs »$archive«." #: ../lib/files.sh:387 #, sh-format msgid "The given file does not exist: $file_to_create" msgstr "Angegebene Datei existiert nicht: $file_to_create" #: ../lib/files.sh:392 msgid "No file given." msgstr "Keine Datei angegeben." #: ../lib/files.sh:397 ../lib/files.sh:399 ../lib/files.sh:413 msgid "Unable to get date from file." msgstr "Kann Datum der Datei nicht ermitteln." #: ../lib/files.sh:403 msgid "Unable to find the pattern of the file." msgstr "Kann das Dateimuster nicht finden." #: ../lib/files.sh:419 #, sh-format msgid "Unable to find the md5 hash of file \"$file\" in file \"$md5file\"." msgstr "" "Kann die MD5-Summe der Datei »$file« nicht in der Datei »$md5file« finden." #: ../lib/files.sh:425 #, sh-format msgid "$file is a duplicate of $file_to_create (using symlink)." msgstr "$file ist ein Duplikat von $file_to_create (verwende Symlink)." #: ../lib/logger.sh:144 ../backup-manager:257 msgid "Unable to exec post-command." msgstr "Kann post-command nicht ausführen." #: ../lib/logger.sh:146 msgid "Releasing lock" msgstr "Freigabe der Sperre" #: ../lib/md5sum.sh:30 msgid "Internal error: bad usage of function get_md5sum_from_file()" msgstr "Interner Fehler: falscher Aufruf der Funktion get_md5sum_from_file()" #: ../lib/md5sum.sh:34 #, sh-format msgid "No md5file found: $md5file" msgstr "Keine MD5-Datei gefunden: $md5file" #: ../lib/md5sum.sh:82 #, sh-format msgid "Archive given does not exist in the repository: $archive" msgstr "Angegebenes Archiv existiert nicht im Depot: $archive" #: ../lib/sanitize.sh:32 #, sh-format msgid "The configuration key $key is not set, using \"$default\"." msgstr "Die Konfigurationsvariable $key ist nicht gesetzt, verwende »$default«." #: ../lib/sanitize.sh:43 #, sh-format msgid "" "The configuration key \"$deprecated_key\" is deprecated, you should rename " "it \"$new_key\". Using \"$deprecated_value\"." msgstr "" "Die Konfigurationsvariable »$deprecated_key« ist veraltet, Sie sollten\n" "sie in »$new_key« umbenennen. Verwende »$deprecated_value«." #: ../lib/sanitize.sh:84 #, sh-format msgid "The configuration key $key is not set but $keymandatory is enabled." msgstr "" "Die Konfigurationsvariable $key ist nicht gesetzt, aber $keymandatory ist " "aktiviert." #: ../lib/sanitize.sh:100 #, sh-format msgid "Deprecated boolean, $key is set to \"yes\", setting \"true\" instead." msgstr "" "Veralteter boolescher Wert, $key ist auf »yes« gesetzt, wird stattdessen auf " "»true« gesetzt." #: ../lib/sanitize.sh:105 #, sh-format msgid "Deprecated boolean, $key is set to \"no\", setting \"false\" instead." msgstr "" "Veralteter boolescher Wert, $key ist auf »no« gesetzt, wird stattdessen auf " "»false« gesetzt." #: ../lib/sanitize.sh:128 #, sh-format msgid "Unable to create BM_TEMP_DIR: \"$BM_TEMP_DIR\"." msgstr "Kann BM_TEMP_DIR (»$BM_TEMP_DIR«) nicht anlegen." #: ../lib/sanitize.sh:166 msgid "" "BM_TARBALLINC_MASTERDATEVALUE should not be greater than 6, falling back to 0" msgstr "" "BM_TARBALLINC_MASTERDATEVALUE sollte nicht größer als 6 sein, falle auf 0 " "zurück" #: ../lib/sanitize.sh:276 #, sh-format msgid "" "When validating the configuration file $conffile, $nb_warnings warnings were " "found." msgstr "" "Beim Überprüfen der Konfigurationsdatei $conffile wurden $nb_warnings " "Warnungen gefunden." #: ../lib/upload-methods.sh:38 msgid "Using the upload method \"ssh\"." msgstr "Verwende die Upload-Methode »ssh«." #: ../lib/upload-methods.sh:47 ../lib/upload-methods.sh:85 msgid "No valid destination found, SSH upload not possible." msgstr "Kein gültiges Ziel gefunden, SSH-Upload ist nicht möglich." # FIXME: upload method should be a variable to avoid duplicate strings. #: ../lib/upload-methods.sh:68 #, sh-format msgid "" "Error reported by backup-manager-upload for method \"scp\", check \"$logfile" "\"." msgstr "" "Von backup-manager-upload wurde für die Methode »scp« ein Fehler berichtet,\n" "überprüfen Sie »$logfile«." #: ../lib/upload-methods.sh:76 msgid "Using the upload method \"ssh-gpg\"." msgstr "Verwende die Upload-Methode »ssh-gpg«." #: ../lib/upload-methods.sh:88 msgid "" "No gpg recipient given. Argument is mandatory if upload method ssh-gpg is " "used." msgstr "" "Kein gpg-Empfänger angegeben. Argument ist erforderlich, falls die\n" "Upload-Methode ssh-gpg verwendet wird." #: ../lib/upload-methods.sh:105 #, sh-format msgid "" "Error reported by backup-manager-upload for method \"ssh-gpg\", check " "\"$logfile\"." msgstr "" "Von backup-manager-upload wurde für die Methode »ssh-gpg« ein Fehler " "berichtet,\n" "überprüfen Sie »$logfile«." #: ../lib/upload-methods.sh:112 msgid "Using the upload method \"ftp\"." msgstr "Verwende die Upload-Methode »ftp«." #: ../lib/upload-methods.sh:122 msgid "No valid destination found, FTP upload not possible." msgstr "Kein gültiges Ziel gefunden, FTP-Upload ist nicht möglich." #: ../lib/upload-methods.sh:138 #, sh-format msgid "" "Error reported by backup-manager-upload for method \"ftp\", check \"$logfile" "\"." msgstr "" "Von backup-manager-upload wurde für die Methode »ftp« ein Fehler berichtet,\n" "überprüfen Sie »$logfile«." #: ../lib/upload-methods.sh:146 msgid "Using the upload method \"S3\"." msgstr "Verwende die Upload-Methode »S3«." #: ../lib/upload-methods.sh:168 #, sh-format msgid "" "Error reported by backup-manager-upload for method \"s3\", check \"$logfile" "\"." msgstr "" "Von backup-manager-upload wurde für die Methode »s3« ein Fehler berichtet,\n" "überprüfen Sie »$logfile«." #: ../lib/upload-methods.sh:174 #, sh-format msgid "Uploading $directory to ${host}:${BM_UPLOAD_RSYNC_DESTINATION}" msgstr "Hochladen von $directory auf ${host}:${BM_UPLOAD_RSYNC_DESTINATION}" #: ../lib/upload-methods.sh:185 msgid "Need a key to use rsync (set BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY)." msgstr "" "Ein Schlüssel wird benötigt, um rsync auszuführen (setzen Sie\n" "BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY)." #: ../lib/upload-methods.sh:196 #, sh-format msgid "Upload of $directory with rsync failed; check $logfile." msgstr "" "Hochladen von $directory mit rsync fehlgeschlagen; überprüfen Sie $logfile." # FIXME: rsync should be written in small letters for consistency #: ../lib/upload-methods.sh:215 msgid "No valid destination found, RSYNC upload not possible." msgstr "Kein gültiges Ziel gefunden, RSYNC-Upload ist nicht möglich." #: ../lib/upload-methods.sh:234 msgid "No hosts given to the rsync method, set BM_UPLOAD_RSYNC_HOSTS." msgstr "" "Keine Hosts für die rsync-Methode angegeben, setzen Sie " "BM_UPLOAD_RSYNC_HOSTS." #: ../lib/upload-methods.sh:241 msgid "Using the upload method \"rsync\"." msgstr "Verwende die Upload-Methode »rsync«." #: ../lib/upload-methods.sh:248 msgid "Using the upload method \"rsync-snapshots\"." msgstr "Verwende die Upload-Methode »rsync-snapshots«." #: ../backup-manager:127 msgid "The -b option must be followed by a valid date (YYYYMMDD)." msgstr "Auf die Option -b muss ein gültiges Datum (JJJJMMTT) folgen." #: ../backup-manager:162 msgid "The -c option must be followed by an existing filename." msgstr "Auf die Option -c muss der Name einer existierenden Datei folgen." #: ../backup-manager:202 msgid "Unable to exec the pre-command" msgstr "Kann pre-command nicht ausführen" #~ msgid "Internal error: wrong call to bm_merge_incremental_backups()." #~ msgstr "" #~ "Interner Fehler: falscher Aufruf von bm_merge_incremental_backups()." #~ msgid "Unable to change the owner of \"$file_to_create\"." #~ msgstr "Kann den Besitzer von »$file_to_create« nicht ändern." #~ msgid "Unable to change file permissions of \"$file_to_create\"." #~ msgstr "Kann die Zugriffsrechte von »$file_to_create« nicht ändern." #~ msgid "" #~ "The archive command returned 1 but the archive has been created; check " #~ "\"$logfile\"." #~ msgstr "" #~ "Der Archivier-Befehl gab 1 zurück, aber das Archiv wurde angelegt; " #~ "überprüfen Sie »$logfile«." ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/po/Makefile�����������������������������������������������������������������0000644�0001750�0001750�00000003054�11503702461�016126� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������prefix=$(DESTDIR)/$(PREFIX) # List here all source files with translatable strings. POTFILES= \ $(shell find ../lib -type f -name \*.sh) \ ../backup-manager POFILES_SRC=backup-manager.files POFILES=$(wildcard *.po) MOFILES=$(POFILES:.po=.mo) PACKAGE=backup-manager .SUFFIXES: .po .mo all: backup-manager.pot $(POFILES) $(MOFILES) install: backup-manager.pot $(MOFILES) @echo "Installing mo files" for file in $(MOFILES); do \ lang=`echo $$file | sed 's/\.mo//'`; \ install -d $(prefix)/share/locale/$$lang/LC_MESSAGES/; \ install -m 0644 $$file $(prefix)/share/locale/$$lang/LC_MESSAGES/backup-manager.mo; \ done $(POFILES_SRC): find ../lib -type f -name \*.sh | sort > $(POFILES_SRC) echo ../backup-manager >> $(POFILES_SRC) $(PACKAGE).pot: $(POFILES_SRC) xgettext --keyword=info \ --keyword=warning \ --keyword=error \ --keyword=echo_translated \ --language=Shell \ -o backup-manager.pot \ --files-from=$(POFILES_SRC) clean: rm -f backup-manager.pot \ backup-manager.files \ $(MOFILES) \ messages messages.mo \ messages.po .po.mo: backup-manager.pot @echo "Merging $(PACKAGE).pot and $*.po" @msgmerge $*.po $(PACKAGE).pot -o $*.po.new @if [ "`diff $*.po $*.po.new | grep '[<>]' | wc -l`" -ne 2 ]; then \ mv -f $*.po.new $*.po; \ else \ rm -f $*.po.new; \ fi @msgfmt --statistics $*.po msgfmt --no-hash -o $*.mo $*.po check: @for file in $(POFILES); do \ lang=`echo $$file | sed 's/\.po//'`; \ printf "$$lang: "; \ msgfmt -o /dev/null -c -v --statistics $$lang.po;\ done ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/po/it.po��������������������������������������������������������������������0000644�0001750�0001750�00000072127�11503702461�015451� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: BM ITALIAN VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-07-15 20:27+0200\n" "PO-Revision-Date: 2010-12-02 21:04+0100\n" "Last-Translator: Matteo Frare Barutti <xenon@ngi.it>\n" "Language-Team: ITALIAN <xenon@ngi.it>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Italian\n" "X-Poedit-Country: ITALY\n" #: ../lib/actions.sh:44 msgid "No backup method used." msgstr "Nessun metodo di backup specificato." #: ../lib/actions.sh:47 #, sh-format msgid "No such backup method: $BM_ARCHIVE_METHOD" msgstr "Nessun metodo di backup: $BM_ARCHIVE_METHOD" #: ../lib/actions.sh:56 #, sh-format msgid "Unable to change the owner of \"$md5file\"." msgstr "Impossibile cambiare il proprietario di \"$md5file\"." #: ../lib/actions.sh:58 #, sh-format msgid "Unable to change file permissions of \"$md5file\"." msgstr "Impossibile cambiare i permessi di \"$md5file\"." #: ../lib/actions.sh:90 msgid "No upload method used." msgstr "Nessun metodo di upload specificato." #: ../lib/actions.sh:93 #, sh-format msgid "The upload method \"$method\" is not supported; skipping." msgstr "Il metodo di upload \"$method\" non è supportato; vado avanti." #: ../lib/actions.sh:105 #, sh-format msgid "Cleaning $BM_REPOSITORY_ROOT" msgstr "Pulisco $BM_REPOSITORY_ROOT" #: ../lib/actions.sh:118 #, sh-format msgid "Running pre-command: $BM_PRE_BACKUP_COMMAND." msgstr "Eseguo il pre-command: $BM_PRE_BACKUP_COMMAND." #: ../lib/actions.sh:122 msgid "Pre-command failed. Stopping the process." msgstr "il pre-command è fallito. Termino il processo." #: ../lib/actions.sh:127 #, sh-format msgid "Pre-command returned: \"$RET\" (success)." msgstr "Il pre-command ha restituito: \"$RET\" (operazione completata)" #: ../lib/actions.sh:139 #, sh-format msgid "Running post-command: $BM_POST_BACKUP_COMMAND" msgstr "Eseguo il post-command: $BM_POST_BACKUP_COMMAND" #: ../lib/actions.sh:143 msgid "Post-command failed." msgstr "il post-command è fallito." #: ../lib/actions.sh:148 #, sh-format msgid "Post-command returned: \"$RET\" (success)." msgstr "Il post-command ha restituito: \"$RET\" (operazione completata)" #: ../lib/actions.sh:180 msgid "The BM_TARBALL_FILETYPE conf key is set to \"zip\" but zip is not installed." msgstr "Il parametro di configurazione BM_TARBALL_FILETYPE è impostato su \"zip\" ma zip non è installato." #: ../lib/actions.sh:185 msgid "The BM_TARBALL_FILETYPE conf key is set to \"bzip2\" but bzip2 is not installed." msgstr "Il parametro di configurazione BM_TARBALL_FILETYPE è impostato su \"bzip2\" ma bzip2 non è installato." #: ../lib/actions.sh:190 msgid "The BM_TARBALL_FILETYPE conf key is set to \"dar\" but dar is not installed." msgstr "Il parametro di configurazione BM_TARBALL_FILETYPE è impostato su \"dar\" ma dar non è installato." #: ../lib/actions.sh:202 #, sh-format msgid "The repository $BM_REPOSITORY_ROOT does not exist, creating it." msgstr "Il repository $BM_REPOSITORY_ROOT non esiste, lo creo." #: ../lib/backup-methods.sh:26 #, sh-format msgid "$file_to_create: ok (${size}M," msgstr "$file_to_create: ok (${size}M," #: ../lib/backup-methods.sh:54 #, sh-format msgid "Unable to purge duplicates of $file_to_create" msgstr "Impossibile rimuovere i duplicati di $file_to_create" #: ../lib/backup-methods.sh:65 #, fuzzy, sh-format msgid "Unable to change the owner of \"$file\"." msgstr "Impossibile cambiare il proprietario di \"$md5file\"." #: ../lib/backup-methods.sh:67 #, fuzzy, sh-format msgid "Unable to change file permissions of \"$file\"." msgstr "Impossibile cambiare i permessi di \"$md5file\"." #: ../lib/backup-methods.sh:78 #, fuzzy msgid "Warning, process interrupted." msgstr "Attenzione, processo interrotto, gli archivi potrebero essere corrotti." #: ../lib/backup-methods.sh:82 #, fuzzy, sh-format msgid "Removing archive \"$bm_pending_archive\" (build interrupted)." msgstr "Rimuovo l'archivio \"$archive\"." #: ../lib/backup-methods.sh:88 #, sh-format msgid "Restoring incremental-building details list: \"$bm_pending_incremental_list\"." msgstr "" #: ../lib/backup-methods.sh:124 #, sh-format msgid "Unable to create \"$target\", check $logfile" msgstr "Impossibile creare \"$target\", controllare $logfile" #: ../lib/backup-methods.sh:140 #, sh-format msgid "File $file_to_create already exists, skipping." msgstr "Il file $file_to_create è già esistente, vado avanti." #: ../lib/backup-methods.sh:151 msgid "gzip is not installed but gzip compression needed." msgstr "" #: ../lib/backup-methods.sh:159 msgid "bzip2 is not installed but bzip2 compression needed." msgstr "" #: ../lib/backup-methods.sh:177 #: ../lib/backup-methods.sh:201 #, sh-format msgid "Unable to exec $command; check $logfile" msgstr "Impossibile eseguire $command; verificare $logfile" #: ../lib/backup-methods.sh:183 #, fuzzy, sh-format msgid "Compressor $compress is needed." msgstr "Il compressore $compress richiede $gzip." #: ../lib/backup-methods.sh:208 #, sh-format msgid "No such compressor supported: $compress." msgstr "Nessun compressore supportato: $compress." #: ../lib/backup-methods.sh:214 #, sh-format msgid "Unable to find $file_to_create" msgstr "Impossibile trovare $file_to_create" #: ../lib/backup-methods.sh:342 msgid "No frequency given, set BM_TARBALLINC_MASTERDATETYPE." msgstr "Nessuna frequenza impostata: modificare $BM_TARBALLINC_MASTERDATETYPE." #: ../lib/backup-methods.sh:353 #, sh-format msgid "Unknown frequency: $BM_TARBALLINC_MASTERDATETYPE" msgstr "Frequenza sconoscita: $BM_TARBALLINC_MASTERDATETYPE" #: ../lib/backup-methods.sh:386 #, sh-format msgid "Building master backup for target: \"$dir_name\"." msgstr "Creo il master backup per il target: \"$dir_name\"." #: ../lib/backup-methods.sh:515 msgid "Tar reported a file changed during archive creation." msgstr "" #: ../lib/backup-methods.sh:526 msgid "Dar reported a file changed during archive creation." msgstr "" #: ../lib/backup-methods.sh:564 #, sh-format msgid "The archive type \"tar.bz2\" depends on the tool \"$bzip\"." msgstr "Il tipo di archivio \"tar.bz2\" dipende dal tool \"$bzip\"." #: ../lib/backup-methods.sh:571 #, sh-format msgid "The archive type \"tar.lz\" depends on the tool \"$lzma\"." msgstr "Il tipo di archivio \"tar.lz\" dipende dal tool \"$lzma\"." #: ../lib/backup-methods.sh:578 #, sh-format msgid "The archive type \"zip\" depends on the tool \"$zip\"." msgstr "Il tipo di archivio \"zip\" dipende dal tool \"$zip\"." #: ../lib/backup-methods.sh:584 #, sh-format msgid "The archive type \"dar\" depends on the tool \"$dar\"." msgstr "Il tipo di archivio \"dar\" dipende dal tool \"$dar\"." #: ../lib/backup-methods.sh:590 #: ../lib/backup-methods.sh:677 #: ../lib/backup-methods.sh:723 #, sh-format msgid "The archive type \"$BM_TARBALL_FILETYPE\" is not supported." msgstr "Il tipo di archivio \"$BM_TARBALL_FILETYPE\" non è supportato." #: ../lib/backup-methods.sh:651 msgid "The configuration variable \"BM_ENCRYPTION_RECIPIENT\" must be defined." msgstr "Deve essere definita la variabile \"BM_ENCRYPTION_RECIPIENT\"." #: ../lib/backup-methods.sh:657 #, sh-format msgid "The encryption is not yet possible with \"$BM_TARBALL_FILETYPE\" archives." msgstr "La crittografia non è ancora possibile con gli archivi \"$BM_TARBALL_FILETYPE\"." #: ../lib/backup-methods.sh:695 #, sh-format msgid "The program \"$gpg\" is needed." msgstr "E' necessario il programma \"$gpg\"." #: ../lib/backup-methods.sh:704 #: ../lib/backup-methods.sh:737 #, sh-format msgid "File $file_to_check already exists, skipping." msgstr "Il file $file_to_check è già esistente, vado avanti." #: ../lib/backup-methods.sh:769 #, fuzzy, sh-format msgid "Target \"$t\" is found in blacklist, skipping." msgstr "La destinazione \"$t\" non esiste, vado avanti." #: ../lib/backup-methods.sh:773 #, sh-format msgid "Target \"$t\" does not exist, skipping." msgstr "La destinazione \"$t\" non esiste, vado avanti." #: ../lib/backup-methods.sh:849 #: ../lib/backup-methods.sh:888 #: ../lib/backup-methods.sh:938 #: ../lib/backup-methods.sh:962 #, sh-format msgid "Using method \"$method\"." msgstr "Utilizzo il metodo \"$method\"." #: ../lib/backup-methods.sh:875 msgid "1 error occurred during the tarball generation." msgstr "E' stato riscontrato 1 errore nella creazione del tarball." #: ../lib/backup-methods.sh:877 #, sh-format msgid "$nb_err errors occurred during the tarball generation." msgstr "Riscontrati $nb_err errori nella generazione del tarball." #: ../lib/backup-methods.sh:890 #, sh-format msgid "The \"mysql\" method is chosen, but $mysqldump is not found." msgstr "E' stato scelto il metodo \"mysql\" ma $mysqldump non è stato trovato." #: ../lib/backup-methods.sh:900 #, sh-format msgid "Using existing MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:904 #, sh-format msgid "Creating a default MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:928 #, sh-format msgid "Removing default MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:940 #, sh-format msgid "The \"svn\" method is chosen, but $svnadmin is not found." msgstr "E' stato scelto il metodo \"svn\" ma $svnadmin non è stato trovato." #: ../lib/backup-methods.sh:946 #, sh-format msgid "SVN repository \"$repository\" is not valid; skipping." msgstr "Il repository SVN \"$repository\" non è valido, continuo." #: ../lib/backup-methods.sh:971 #, sh-format msgid "Not enough args for this archive ($archive), skipping." msgstr "Non sono sufficienti gli args per questo archivio ($archive), proseguo." #: ../lib/backup-methods.sh:978 msgid "Cannot create archive." msgstr "Impossibile creare l'archivio." #: ../lib/burning-methods.sh:37 #, sh-format msgid "Device \"/dev/$device\" is mounted on \"$m\", unmounting it." msgstr "Il device \"/dev/$device\" è montato su \"$m\", lo smonto." #: ../lib/burning-methods.sh:53 #, sh-format msgid "MD5 checkup is only performed on disks. Please set the BM_BURNING_DEVICE in $conffile" msgstr "Il controllo MD5 viene effettuato solo sui dischi. Impostare BM_BURNING_DEVICE su $conffile." #: ../lib/burning-methods.sh:59 #, sh-format msgid "The mount point $mount_point is not there." msgstr "Il mount point $mount_point non è lì." #: ../lib/burning-methods.sh:66 #, sh-format msgid "Mounting $BM_BURNING_DEVICE on $mount_point." msgstr "Monto $BM_BURNING_DEVICE su $mount_point." #: ../lib/burning-methods.sh:90 #, sh-format msgid "Checking MD5 sum for $base_file:" msgstr "ControlloMD5 sum per $base_file:" #: ../lib/burning-methods.sh:109 #, sh-format msgid "$str ok." msgstr "$str ok." #: ../lib/burning-methods.sh:112 #, sh-format msgid "$str failed (read error)." msgstr "$str fallito (errore di lettura)." #: ../lib/burning-methods.sh:116 #, sh-format msgid "$str failed (MD5 hash mismatch)." msgstr "$str fallito (hash MD5 non corrispondente)." #: ../lib/burning-methods.sh:123 msgid "Errors encountered during MD5 checks." msgstr "Riscontrati errori nei controlli MD5." #: ../lib/burning-methods.sh:127 #, sh-format msgid "Unable to unmount the mount point $mount_point" msgstr "Impossibile fare l'unmount di $mount_point" #: ../lib/burning-methods.sh:128 #, sh-format msgid "Unable to remove the mount point $mount_point" msgstr "Impossibile rimuovere il punto di mount $mount_point" #: ../lib/burning-methods.sh:147 msgid "No burning method used." msgstr "Nessun metodo di masterizzazione utilizzato." #: ../lib/burning-methods.sh:171 #, sh-format msgid "Number of files to burn: $nb_file." msgstr "Numero di file da masterizzare: $nb_file." #: ../lib/burning-methods.sh:173 #, sh-format msgid "Nothing to burn for the $BM__BURNING_DATE, try the '--burn <date>' switch." msgstr "Nulla da masterizzare per $BM__BURNING_DATE, prova con lo switch '--burn <date>'" #: ../lib/burning-methods.sh:202 #: ../lib/burning-methods.sh:227 #, sh-format msgid "Burning archives of $BM__BURNING_DATE." msgstr "Masterizzo gli archivi di $BM__BURNING_DATE." #: ../lib/burning-methods.sh:207 #, sh-format msgid "Cannot burn archives of the $BM__BURNING_DATE, too big: ${size}M, must fit in $BM_BURNING_MAXSIZE" msgstr "Impossibile masterizzare gli archivi di $BM__BURNING_DATE, sono troppo grandi: ${size}M, devono essere al massimo $BM_BURNING_MAXSIZE" #: ../lib/burning-methods.sh:231 msgid "Burning the whole archives." msgstr "Masterizzo tutti gli archivi." #: ../lib/burning-methods.sh:236 #, sh-format msgid "Trying to burn $BM_REPOSITORY_ROOT ($size MB) in interactive mode." msgstr "Provo a masterizzare $BM_REPOSITORY_ROOT ($size MB) in modalità interattiva." #: ../lib/burning-methods.sh:267 #, sh-format msgid "Redirecting burning logs into $logfile" msgstr "Ridireziono i log della masterizzazione su $logfile" #: ../lib/burning-methods.sh:272 #, sh-format msgid "Forcing dev=${BM_BURNING_DEVFORCED} for cdrecord commands." msgstr "Forzo dev=${BM_BURNING_DEVFORCED} per i comandi cdrecord." #: ../lib/burning-methods.sh:280 #, sh-format msgid "DVD+R(W) burning requires $growisofs, aborting." msgstr "La masterizzazione su DVD+R(W) richiede $growisofs, annullo l'operazione." #: ../lib/burning-methods.sh:283 #, sh-format msgid "Exporting archives to the DVD+R(W) disc in $BM_BURNING_DEVICE." msgstr "Esporto gli archivi sul DVD+R(W) in $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:287 #: ../lib/burning-methods.sh:307 #: ../lib/burning-methods.sh:319 #: ../lib/burning-methods.sh:325 #: ../lib/burning-methods.sh:338 #, sh-format msgid "failed, check $logfile" msgstr "fallito, controllare $logfile" #: ../lib/burning-methods.sh:292 #, sh-format msgid "DVD-R(W) burning requires $growisofs, aborting." msgstr "La masterizzazione su DVD-R(W) richiede $growisofs, annullo l'operazione." #: ../lib/burning-methods.sh:295 #, sh-format msgid "DVD-R(W) burning requires $dvdrwformat, aborting." msgstr "La masterizzazione su DVD-R(W) richiede $dvdrwformat, annullo l'operazione." #: ../lib/burning-methods.sh:298 #, sh-format msgid "Blanking the DVD-R(W) disc in $BM_BURNING_DEVICE" msgstr "Cancello il disco DVD-R(W) in $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:302 #, sh-format msgid "Unable to blank the DVD-R(W) disc (check $logfile)." msgstr "Impossibile formattare il disco DVD-R(W) (controllare $logfile)." #: ../lib/burning-methods.sh:304 #, sh-format msgid "Exporting archives to the DVD-R(W) disc in $BM_BURNING_DEVICE." msgstr "Esporto gli archivi sul DVD-R(W) in $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:312 #: ../lib/burning-methods.sh:330 #, sh-format msgid "CD-R(W) burning requires $cdrecord, aborting." msgstr "La masterizzazione su CD-R(W) richiede $cdrecord, annullo l'operazione." #: ../lib/burning-methods.sh:315 #, sh-format msgid "Blanking the CDRW in $BM_BURNING_DEVICE." msgstr "Cancello il CDRW in $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:321 #: ../lib/burning-methods.sh:333 #, sh-format msgid "Burning data to $BM_BURNING_DEVICE." msgstr "Masterizzo i dati su $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:342 msgid "Nothing to burn." msgstr "Niente da masterizzare." #: ../lib/burning-methods.sh:346 #, sh-format msgid "The requested burning method is not supported, check BM_BURNING_METHOD in $conffile" msgstr "L'opzione di masterizzazione selezionato non è supportato, controllare BM_BURNING_METHOD in $conffile" #: ../lib/burning-methods.sh:402 #, sh-format msgid "Not burning $file because it does not fit in the disk." msgstr "Impossibile masterizzare $file perchè è troppo grande per il disco." #: ../lib/burning-methods.sh:443 #, sh-format msgid "No such index file: \"$index_file\"." msgstr "Nessun file indice: \"$index_file\"." #: ../lib/burning-methods.sh:485 msgid "The burning process will need one disk." msgstr "La masterizzazione richiede un disco." #: ../lib/burning-methods.sh:487 #, sh-format msgid "The burning process will need $number_of_indexes disks." msgstr "La masterizzazione richiede $number_of_indexes dischi." #: ../lib/burning-methods.sh:499 #, sh-format msgid "Burning content of $index" msgstr "Masterizzo il contenuto di $index" #: ../lib/dialog.sh:27 msgid "Output:" msgstr "Output:" #: ../lib/dialog.sh:28 msgid "Print this short help message." msgstr "Visualizza questo breve messaggio di aiuto." #: ../lib/dialog.sh:29 msgid "Print version number." msgstr "" #: ../lib/dialog.sh:30 msgid "Print what happens on STDOUT." msgstr "Scrive cosa succede sull' STDOUT." #: ../lib/dialog.sh:31 #, fuzzy msgid "Print debug messages on STDOUT." msgstr "Scrive cosa succede sull' STDOUT." #: ../lib/dialog.sh:32 msgid "Disable warnings." msgstr "Disabilita i warning." #: ../lib/dialog.sh:35 msgid "Single actions:" msgstr "Azioni singole:" #: ../lib/dialog.sh:36 msgid "Just upload the files of the day." msgstr "Upload dei soli files del giorno." #: ../lib/dialog.sh:37 msgid "Just burn the files of the day." msgstr "Masterizza i soli files del giorno." #: ../lib/dialog.sh:38 msgid "Just test the md5 sums." msgstr "Fa solo il test degli MD5 sums." #: ../lib/dialog.sh:39 msgid "Just purge old archives." msgstr "Svuota solamente i vecchi archivi." #: ../lib/dialog.sh:42 msgid "Behaviour:" msgstr "Comportamento:" #: ../lib/dialog.sh:43 msgid "Choose an alternate config file." msgstr "Scegliere un file di configurazione alternativo:" #: ../lib/dialog.sh:44 msgid "Force overwrite of existing archives." msgstr "Forza la sovrascrittura degli archivi esistenti." #: ../lib/dialog.sh:47 msgid "Unwanted actions:" msgstr "Azioni non volute:" #: ../lib/dialog.sh:48 msgid "Disable the upload process." msgstr "Disabilita il processo di upload." #: ../lib/dialog.sh:49 msgid "Disable the burning process." msgstr "Disabilita la masterizzazione." #: ../lib/dialog.sh:50 msgid "Disable the purge process." msgstr "Disabilita il porcesso di svoutamento" #: ../lib/dialog.sh:64 #: ../lib/dialog.sh:83 msgid "Not in interactive mode, cannot continue." msgstr "Non si è in modalità interattiva, impossibile continuare." #: ../lib/files.sh:79 #: ../lib/files.sh:94 msgid "No path given." msgstr "Nessun path specificato." #: ../lib/files.sh:169 #, sh-format msgid "Removing lock for old PID, $pid is not running." msgstr "Rimuovo il lock per il vecchio PID, $pid non è in esecuzione." #: ../lib/files.sh:179 #, sh-format msgid "A backup-manager process ($pid) is already running with the conffile $conffile" msgstr "E' in esecuzione un'altro processo di backup-manager ($pid) con il conffile $conffile" #: ../lib/files.sh:183 #: ../lib/files.sh:189 #, sh-format msgid "Getting lock for backup-manager $pid with $conffile" msgstr "Inserisco il lock per backup-manager $pid con $conffile" #: ../lib/files.sh:192 msgid "failed (check the file permissions)." msgstr "fallito (controllare i permessi sul file)." #: ../lib/files.sh:280 #, sh-format msgid "$file is not a regular file." msgstr "$file non è un file regolare." #: ../lib/files.sh:305 #, sh-format msgid "Removing obsolete master backup: \"$file\"." msgstr "Rimuovo il master backup obsoleto \"$file\"." #: ../lib/files.sh:313 #, sh-format msgid "Removing obsolete master backup (isolated): \"$file\"." msgstr "Rimuovo il master backup obsoleto (isolato): \"$file\"." #: ../lib/files.sh:320 #, sh-format msgid "Removing archive \"$file\"." msgstr "Rimuovo l'archivio \"$file\"." #: ../lib/files.sh:342 msgid "Directory given was not found." msgstr "La directory specificata non è stata trovata." #: ../lib/files.sh:363 #, sh-format msgid "Removing archive \"$archive\"." msgstr "Rimuovo l'archivio \"$archive\"." #: ../lib/files.sh:387 #, sh-format msgid "The given file does not exist: $file_to_create" msgstr "il file specificato non esiste: $file_to_create" #: ../lib/files.sh:392 msgid "No file given." msgstr "nessun file specificato." #: ../lib/files.sh:397 #: ../lib/files.sh:399 #: ../lib/files.sh:413 msgid "Unable to get date from file." msgstr "impossibile ricavare la data dal file." #: ../lib/files.sh:403 msgid "Unable to find the pattern of the file." msgstr "impossibile trovare il pattern del file." #: ../lib/files.sh:419 #, sh-format msgid "Unable to find the md5 hash of file \"$file\" in file \"$md5file\"." msgstr "Impossibile trovare l'hash md5 del file \"$file\" nel file \"$md5file\"." #: ../lib/files.sh:425 #, sh-format msgid "$file is a duplicate of $file_to_create (using symlink)." msgstr "$file è un duplicato di $file_to_create (utilizzo un symlink)." #: ../lib/logger.sh:144 #: ../backup-manager:257 msgid "Unable to exec post-command." msgstr "Impossibile eseguire il post-command" #: ../lib/logger.sh:146 msgid "Releasing lock" msgstr "Rilascio il Lock" #: ../lib/md5sum.sh:30 msgid "Internal error: bad usage of function get_md5sum_from_file()" msgstr "Errore interno: utilizzo errato della funzione get_md5sum_from_file()" #: ../lib/md5sum.sh:34 #, sh-format msgid "No md5file found: $md5file" msgstr "Nessun file md5file trovato: $md5file" #: ../lib/md5sum.sh:82 #, sh-format msgid "Archive given does not exist in the repository: $archive" msgstr "L'archivio specificato non esiste nel repository: $archive" #: ../lib/sanitize.sh:32 #, sh-format msgid "The configuration key $key is not set, using \"$default\"." msgstr "La chiave di configurazione $key non è impostata, utilizzo \"$default\"." #: ../lib/sanitize.sh:43 #, sh-format msgid "The configuration key \"$deprecated_key\" is deprecated, you should rename it \"$new_key\". Using \"$deprecated_value\"." msgstr "La chiave di configurazione \"$deprecated_key\" è deprecato, è necessario rinominarlo in \"$new_key\". Utilizzo \"$deprecated_value\"." #: ../lib/sanitize.sh:84 #, sh-format msgid "The configuration key $key is not set but $keymandatory is enabled." msgstr "La chiave di configurazione $key non è impostata ma $keymandatory è abilitato." #: ../lib/sanitize.sh:100 #, sh-format msgid "Deprecated boolean, $key is set to \"yes\", setting \"true\" instead." msgstr "Parametro booleano deprecato, $key è impostato su \"yes\", utilizzo \"true\" al suo posto." #: ../lib/sanitize.sh:105 #, sh-format msgid "Deprecated boolean, $key is set to \"no\", setting \"false\" instead." msgstr "Deprecated boolean, $key is set to \"no\", setting \"false\" instead." #: ../lib/sanitize.sh:128 #, sh-format msgid "Unable to create BM_TEMP_DIR: \"$BM_TEMP_DIR\"." msgstr "" #: ../lib/sanitize.sh:166 msgid "BM_TARBALLINC_MASTERDATEVALUE should not be greater than 6, falling back to 0" msgstr "" #: ../lib/sanitize.sh:276 #, sh-format msgid "When validating the configuration file $conffile, $nb_warnings warnings were found." msgstr "Durante la validazione del file di configurazione $conffile, $nb_warnings sono stati trovati dei warning." #: ../lib/upload-methods.sh:38 msgid "Using the upload method \"ssh\"." msgstr "Utilizzo il metodo di upload \"ssh\"." #: ../lib/upload-methods.sh:47 #: ../lib/upload-methods.sh:85 msgid "No valid destination found, SSH upload not possible." msgstr "Nessuna destinazione valida, impossibile eseguire l'upload via SSH." #: ../lib/upload-methods.sh:68 #, sh-format msgid "Error reported by backup-manager-upload for method \"scp\", check \"$logfile\"." msgstr "Riscontrato errore da backup-manager-upload per il metodo \"scp\", controllare \"$logfile\"." #: ../lib/upload-methods.sh:76 msgid "Using the upload method \"ssh-gpg\"." msgstr "Utilizzo il metodo di upload \"ssh-gpg\"." #: ../lib/upload-methods.sh:88 msgid "No gpg recipient given. Argument is mandatory if upload method ssh-gpg is used." msgstr "Nessun destinatario gpg specificato. L'argomento è necessario se si utilizza il metodo di upload ssh-gpg." #: ../lib/upload-methods.sh:105 #, sh-format msgid "Error reported by backup-manager-upload for method \"ssh-gpg\", check \"$logfile\"." msgstr "Riscontrato errore da backup-manager-upload per il metodo \"ssh-gpg\", controllare \"$logfile\"." #: ../lib/upload-methods.sh:112 msgid "Using the upload method \"ftp\"." msgstr "Utilizzo il metodo di upload \"ftp\"." #: ../lib/upload-methods.sh:122 msgid "No valid destination found, FTP upload not possible." msgstr "Nessuna destinazione valida, impossibile eseguire l'upload via FTP." #: ../lib/upload-methods.sh:138 #, sh-format msgid "Error reported by backup-manager-upload for method \"ftp\", check \"$logfile\"." msgstr "Riscontrato errore da backup-manager-upload per il metodo \"ftp\", controllare \"$logfile\"." #: ../lib/upload-methods.sh:146 msgid "Using the upload method \"S3\"." msgstr "Utilizzo il metodo di upload \"S3\"." #: ../lib/upload-methods.sh:168 #, sh-format msgid "Error reported by backup-manager-upload for method \"s3\", check \"$logfile\"." msgstr "Riscontrato errore da backup-manager-upload per il metodo \"s3\", controllare \"$logfile\"." #: ../lib/upload-methods.sh:174 #, sh-format msgid "Uploading $directory to ${host}:${BM_UPLOAD_RSYNC_DESTINATION}" msgstr "Faccio l'upload di $directory su ${host}:${BM_UPLOAD_RSYNC_DESTINATION}" #: ../lib/upload-methods.sh:185 msgid "Need a key to use rsync (set BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY)." msgstr "E' necessaria una chiave per utilizzare rsync (impostare BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY)." #: ../lib/upload-methods.sh:196 #, sh-format msgid "Upload of $directory with rsync failed; check $logfile." msgstr "Upload di $directory tramite rsync fallito; controllare $logfile." #: ../lib/upload-methods.sh:215 msgid "No valid destination found, RSYNC upload not possible." msgstr "Nessuna destinazione valida, impossibile eseguire l'upload via RSYNC." #: ../lib/upload-methods.sh:234 msgid "No hosts given to the rsync method, set BM_UPLOAD_RSYNC_HOSTS." msgstr "Nessun host specificato per il metodo rsync, impostare BM_UPLOAD_RSYNC_HOSTS." #: ../lib/upload-methods.sh:241 msgid "Using the upload method \"rsync\"." msgstr "Utilizzo il metodo di upload \"rsync\"." #: ../lib/upload-methods.sh:248 msgid "Using the upload method \"rsync-snapshots\"." msgstr "Utilizzo il metodo di upload \"rsync-snapshots\"." #: ../backup-manager:127 msgid "The -b option must be followed by a valid date (YYYYMMDD)." msgstr "all'opzione -b deve seguire una data valida (AAAAMMGG)." #: ../backup-manager:162 msgid "The -c option must be followed by an existing filename." msgstr "all'opzione -c deve seguire un nome di file valido" #: ../backup-manager:202 msgid "Unable to exec the pre-command" msgstr "Impossibile eseguire il pre-command" #~ msgid "Internal error: wrong call to bm_merge_incremental_backups()." #~ msgstr "Errore interno: chiamata errata per bm_merge_incremental_backups()." #~ msgid "Unable to change the owner of \"$file_to_create\"." #~ msgstr "Impossibile cambiare il proprietario di \"$file_to_create\"." #~ msgid "Unable to change file permissions of \"$file_to_create\"." #~ msgstr "Impossibile cambiare i permessi di \"$file_to_create\"." #, fuzzy #~ msgid "Compressor $compress requires $gzip." #~ msgstr "Il compressore $compress richiede $bzip." #~ msgid "Compressor $compress requires $bzip." #~ msgstr "Il compressore $compress richiede $bzip." #~ msgid "CDROM burning requires $cdrecord, aborting." #~ msgstr "" #~ "La masterizzazione su CDROM richiede $cdrecord, annullo l'operazione." #~ msgid "Not in interactive mode, cannot follow." #~ msgstr "Non si è in modalità interattiva, impossibile proseguire." #~ msgid "totoototo" #~ msgstr "totoototo" #~ msgid "During the tarballs generation, $nb_err error(s) occurred." #~ msgstr "" #~ "Durante la creazione dei tarball, $nb_err si è(sono) verificato(i) errore" #~ "(i)." #, fuzzy #~ msgid "unable to exec $remote_command; check $logfile" #~ msgstr "Impossibile eseguire $command; verificare $logfile" #~ msgid "The BM_TARBALL_DIRECTORIES conf key is not set in $conffile" #~ msgstr "" #~ "La chiave di configurazione BM_TARBALL_DIRECTORIES non è impostata in " #~ "$conffile" #, fuzzy #~ msgid "Entering directory $file" #~ msgstr "Entro nella directory $file." #, fuzzy #~ msgid "Unable to unmount the device $device" #~ msgstr "Impossibile fare l'unmount di $BM_BURNING_DEVICE" #~ msgid "backup-manager must be run as root." #~ msgstr "backup-manager deve essere eseguito come root." #~ msgid "Unable to mount $BM_BURNING_DEVICE on $mount_point." #~ msgstr "" #~ "Impossibile eseguire il mount di $BM_BURNING_DEVICE su $mount_point." #~ msgid "" #~ "$BM_BURNING_DEVICE is mounted, unmounting before the burning session." #~ msgstr "" #~ "$BM_BURNING_DEVICE è montata, la smonto prima della sessione di " #~ "masterizzazione." #~ msgid "unable to unmount $mount_point" #~ msgstr "impossibile fare l'unmount di $mount_point" #~ msgid "unable to remove $mount_point" #~ msgstr "impossibile rimuovere $mount_point" #, fuzzy #~ msgid "Archive does not exist: $archive" #~ msgstr "L'archivio specificato non esiste nel repository: $archive" #~ msgid "Unable to call backup-manager-upload." #~ msgstr "impossibile avviare backup-manager-upload" #~ msgid "unable to call backup-manager-upload" #~ msgstr "impossibile avviare backup-manager-upload" #~ msgid "$command ended, but $file_to_create not found; check $logfile" #~ msgstr "" #~ "$command è terminato, ma $file_to_create non è stato trovato; controllare " #~ "$logfile" #~ msgid "Error while using $gzip." #~ msgstr "Errore nell'utilizzo di $gzip." #~ msgid "Error while using $bzip." #~ msgstr "Errore nell'utilizzo di $bzip." #~ msgid "Using method \"$BM_ARCHIVE_METHOD\"" #~ msgstr "Utilizzo il metodo\"$BM_ARCHIVE_METHOD\"" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/po/es.po��������������������������������������������������������������������0000644�0001750�0001750�00000070106�11503702461�015437� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# backup-manager translation to spanish # Copyright (C) 2004 Alexis Sukrieh # This file is distributed under the same license as the backup-manager package. # # Changes: # - Initial translation # Alexis Sukrieh??? # - Translation fix & upgrade # Carlos Galisteo de Cabo <cgalisteo@k-rolus.net>, 2005 # # Traductores, si no conoce el formato PO, merece la pena leer la # documentación de gettext, especialmente las secciones dedicadas a este # formato, por ejemplo ejecutando: # info -n '(gettext)PO Files' # info -n '(gettext)Header Entry' # # Equipo de traducción al español, por favor lean antes de traducir # los siguientes documentos: # # - El proyecto de traducción de Debian al español # http://www.debian.org/intl/spanish/coordinacion # especialmente las notas de traducción en # http://www.debian.org/intl/spanish/notas # # - La guía de traducción de po's de debconf: # /usr/share/doc/po-debconf/README-trans # o http://www.debian.org/intl/l10n/po-debconf/README-trans # msgid "" msgstr "" "Project-Id-Version: backup-manager 0.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-07-15 20:27+0200\n" "PO-Revision-Date: 2005-12-14 13:07+0100\n" "Last-Translator: Carlos Galisteo de Cabo <cgalisteo@k-rolus.net>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../lib/actions.sh:44 msgid "No backup method used." msgstr "No se está usando ningún método de copia de seguridad." #: ../lib/actions.sh:47 #, sh-format msgid "No such backup method: $BM_ARCHIVE_METHOD" msgstr "Método de copia de seguridad desconocido: $BM_ARCHIVE_METHOD" #: ../lib/actions.sh:56 #, sh-format msgid "Unable to change the owner of \"$md5file\"." msgstr "No se pudo obtener la fecha de \"$md5file\"." #: ../lib/actions.sh:58 #, sh-format msgid "Unable to change file permissions of \"$md5file\"." msgstr "No se pudieron cambiar los permisos de \"$md5file\"." #: ../lib/actions.sh:90 msgid "No upload method used." msgstr "No se usó ningún método de subida." #: ../lib/actions.sh:93 #, sh-format msgid "The upload method \"$method\" is not supported; skipping." msgstr "El método de subida \"$method\" no está soportado; Se omitirá." #: ../lib/actions.sh:105 #, sh-format msgid "Cleaning $BM_REPOSITORY_ROOT" msgstr "Limpiando $BM_REPOSITORY_ROOT." #: ../lib/actions.sh:118 #, sh-format msgid "Running pre-command: $BM_PRE_BACKUP_COMMAND." msgstr "Ejecutando la orden previa al proceso: $BM_PRE_BACKUP_COMMAND." #: ../lib/actions.sh:122 msgid "Pre-command failed. Stopping the process." msgstr "La orden previa al proceso falló. Parando el proceso." #: ../lib/actions.sh:127 #, sh-format msgid "Pre-command returned: \"$RET\" (success)." msgstr "La orden previa al proceso devolvió:\"$RET\" (éxito)." #: ../lib/actions.sh:139 #, sh-format msgid "Running post-command: $BM_POST_BACKUP_COMMAND" msgstr "Ejecutando la orden posterior al proceso: $BM_POST_BACKUP_COMMAND." #: ../lib/actions.sh:143 msgid "Post-command failed." msgstr "La orden posterior al proceso falló." #: ../lib/actions.sh:148 #, sh-format msgid "Post-command returned: \"$RET\" (success)." msgstr "La orden posterior al proceso devolvió: \"$RET\" (éxito)." #: ../lib/actions.sh:180 msgid "" "The BM_TARBALL_FILETYPE conf key is set to \"zip\" but zip is not installed." msgstr "" "La clave de configuración BM_TARBALL_FILETYPE está establecida como \"zip" "\" pero el programa zip no está instalado." #: ../lib/actions.sh:185 msgid "" "The BM_TARBALL_FILETYPE conf key is set to \"bzip2\" but bzip2 is not " "installed." msgstr "" "La clave de configuración BM_TARBALL_FILETYPE está establecida como \"bzip2" "\" pero el programa bzip2 no está instalado." #: ../lib/actions.sh:190 msgid "" "The BM_TARBALL_FILETYPE conf key is set to \"dar\" but dar is not installed." msgstr "" "La clave de configuración BM_FILETYPE está establecida como \"dar\" pero " "el programa dar no está instalado." #: ../lib/actions.sh:202 #, sh-format msgid "The repository $BM_REPOSITORY_ROOT does not exist, creating it." msgstr "El repositorio $BM_REPOSITORY_ROOT no existe, creándolo" #: ../lib/backup-methods.sh:26 #, sh-format msgid "$file_to_create: ok (${size}M," msgstr "$file_to_create: ok (${size}M," #: ../lib/backup-methods.sh:54 #, sh-format msgid "Unable to purge duplicates of $file_to_create" msgstr "No se pudieron borrar los duplicados de $file_to_create" #: ../lib/backup-methods.sh:65 #, fuzzy, sh-format msgid "Unable to change the owner of \"$file\"." msgstr "No se pudo obtener la fecha de \"$md5file\"." #: ../lib/backup-methods.sh:67 #, fuzzy, sh-format msgid "Unable to change file permissions of \"$file\"." msgstr "No se pudieron cambiar los permisos de \"$md5file\"." #: ../lib/backup-methods.sh:78 #, fuzzy msgid "Warning, process interrupted." msgstr "" "Aviso, el proceso se ha interrumpido. Los archivos pueden estar corruptos." #: ../lib/backup-methods.sh:82 #, fuzzy, sh-format msgid "Removing archive \"$bm_pending_archive\" (build interrupted)." msgstr "Borrando fichero \"$archive\"." #: ../lib/backup-methods.sh:88 #, sh-format msgid "" "Restoring incremental-building details list: \"$bm_pending_incremental_list" "\"." msgstr "" #: ../lib/backup-methods.sh:124 #, sh-format msgid "Unable to create \"$target\", check $logfile" msgstr "No se pudo crear \"$target\", consulte el fichero $logfile" #: ../lib/backup-methods.sh:140 #, sh-format msgid "File $file_to_create already exists, skipping." msgstr "El fichero $file_to_create, ya existe. Se ignora." #: ../lib/backup-methods.sh:151 msgid "gzip is not installed but gzip compression needed." msgstr "" #: ../lib/backup-methods.sh:159 msgid "bzip2 is not installed but bzip2 compression needed." msgstr "" #: ../lib/backup-methods.sh:177 ../lib/backup-methods.sh:201 #, sh-format msgid "Unable to exec $command; check $logfile" msgstr "No se pudo ejecutar $command; consulte el fichero $logfile" #: ../lib/backup-methods.sh:183 #, fuzzy, sh-format msgid "Compressor $compress is needed." msgstr "El compresor $compress requiere $gzip" #: ../lib/backup-methods.sh:208 #, sh-format msgid "No such compressor supported: $compress." msgstr "Compresor no soportado: $compress" #: ../lib/backup-methods.sh:214 #, sh-format msgid "Unable to find $file_to_create" msgstr "No se pudo encontrar $file_to_create" #: ../lib/backup-methods.sh:342 msgid "No frequency given, set BM_TARBALLINC_MASTERDATETYPE." msgstr "" "No se ha indicado la frecuencia, establézcala en " "BM_TARBALLINC_MASTERDATETYPE" #: ../lib/backup-methods.sh:353 #, sh-format msgid "Unknown frequency: $BM_TARBALLINC_MASTERDATETYPE" msgstr "Frecuencia desconocida: $BM_TARBALLINC_MASTERDATETYPE" #: ../lib/backup-methods.sh:386 #, sh-format msgid "Building master backup for target: \"$dir_name\"." msgstr "Creando copia de seguridad maestra para el objetivo : $dir_name" #: ../lib/backup-methods.sh:515 msgid "Tar reported a file changed during archive creation." msgstr "" #: ../lib/backup-methods.sh:526 msgid "Dar reported a file changed during archive creation." msgstr "" #: ../lib/backup-methods.sh:564 #, sh-format msgid "The archive type \"tar.bz2\" depends on the tool \"$bzip\"." msgstr "El tipo de fichero \"tar.bz2\" depende de la herramienta \"$bzip\"." #: ../lib/backup-methods.sh:571 #, sh-format msgid "The archive type \"tar.lz\" depends on the tool \"$lzma\"." msgstr "El tipo de fichero \"tar.lz\" depende de la herramienta \"$lzma\"." #: ../lib/backup-methods.sh:578 #, sh-format msgid "The archive type \"zip\" depends on the tool \"$zip\"." msgstr "El tipo de fichero \"zip\" depende de la herramienta \"$zip\"." #: ../lib/backup-methods.sh:584 #, sh-format msgid "The archive type \"dar\" depends on the tool \"$dar\"." msgstr "El tipo de fichero \"dar\" depende de la herramienta \"$dar\"." #: ../lib/backup-methods.sh:590 ../lib/backup-methods.sh:677 #: ../lib/backup-methods.sh:723 #, sh-format msgid "The archive type \"$BM_TARBALL_FILETYPE\" is not supported." msgstr "El tipo de fichero \"$BM_TARBALL_FILETYPE\" no está soportado." #: ../lib/backup-methods.sh:651 msgid "The configuration variable \"BM_ENCRYPTION_RECIPIENT\" must be defined." msgstr "" "La variable de configuración \"$BM_ENCRYPTION_RECIPIENT\" debe estar " "definida." #: ../lib/backup-methods.sh:657 #, sh-format msgid "" "The encryption is not yet possible with \"$BM_TARBALL_FILETYPE\" archives." msgstr "Todavía no es posible cifrar archivos \"$BM_TARBALL_FILETYPE\"." #: ../lib/backup-methods.sh:695 #, sh-format msgid "The program \"$gpg\" is needed." msgstr "Se necesita el programa \"$gpg\"." #: ../lib/backup-methods.sh:704 ../lib/backup-methods.sh:737 #, sh-format msgid "File $file_to_check already exists, skipping." msgstr "El fichero $file_to_check, ya existe. Se ignora." #: ../lib/backup-methods.sh:769 #, fuzzy, sh-format msgid "Target \"$t\" is found in blacklist, skipping." msgstr "El destino \"$t\" no existe, se omite." #: ../lib/backup-methods.sh:773 #, sh-format msgid "Target \"$t\" does not exist, skipping." msgstr "El destino \"$t\" no existe, se omite." #: ../lib/backup-methods.sh:849 ../lib/backup-methods.sh:888 #: ../lib/backup-methods.sh:938 ../lib/backup-methods.sh:962 #, sh-format msgid "Using method \"$method\"." msgstr "Utilizando el método de subida \"$method\"." #: ../lib/backup-methods.sh:875 msgid "1 error occurred during the tarball generation." msgstr "Ha ocurrido un error durante la generación del archivo comprimido." #: ../lib/backup-methods.sh:877 #, sh-format msgid "$nb_err errors occurred during the tarball generation." msgstr "$nb_err errores durante la generación del archivo comprimido." #: ../lib/backup-methods.sh:890 #, sh-format msgid "The \"mysql\" method is chosen, but $mysqldump is not found." msgstr "" "El método \"mysql\" está seleccionado, pero no se pudo encontrar " "$mysqldump." #: ../lib/backup-methods.sh:900 #, sh-format msgid "Using existing MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:904 #, sh-format msgid "Creating a default MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:928 #, sh-format msgid "Removing default MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:940 #, sh-format msgid "The \"svn\" method is chosen, but $svnadmin is not found." msgstr "" "El método \"svn\" está seleccionado, pero no se pudo encontrar $svnadmin" #: ../lib/backup-methods.sh:946 #, sh-format msgid "SVN repository \"$repository\" is not valid; skipping." msgstr "El repositorio SVN \"$repository\" es inválido; se omite." #: ../lib/backup-methods.sh:971 #, sh-format msgid "Not enough args for this archive ($archive), skipping." msgstr "No hay suficientes argumentos para este fichero ($archive), se omite." #: ../lib/backup-methods.sh:978 msgid "Cannot create archive." msgstr "No se puede crear el fichero." #: ../lib/burning-methods.sh:37 #, sh-format msgid "Device \"/dev/$device\" is mounted on \"$m\", unmounting it." msgstr "" "El dispositivo \"/dev/$device\" está montado en \"$m\", desmontándolo. " #: ../lib/burning-methods.sh:53 #, sh-format msgid "" "MD5 checkup is only performed on disks. Please set the BM_BURNING_DEVICE in " "$conffile" msgstr "" "Sólo se realizara la comprobación MD5 sobre discos. Por favor configure " "BM_BURNING_DEVICE en $conffile." #: ../lib/burning-methods.sh:59 #, sh-format msgid "The mount point $mount_point is not there." msgstr "El punto de montaje $mount_point no existe" #: ../lib/burning-methods.sh:66 #, sh-format msgid "Mounting $BM_BURNING_DEVICE on $mount_point." msgstr "Montando $BM_BURNING_DEVICE en $mount_point." #: ../lib/burning-methods.sh:90 #, sh-format msgid "Checking MD5 sum for $base_file:" msgstr "Comprobando la firma MD5 de $base_file: " #: ../lib/burning-methods.sh:109 #, sh-format msgid "$str ok." msgstr "$str ok." #: ../lib/burning-methods.sh:112 #, sh-format msgid "$str failed (read error)." msgstr "$str falló (error de lectura)." #: ../lib/burning-methods.sh:116 #, sh-format msgid "$str failed (MD5 hash mismatch)." msgstr "$str falló (no coinciden las firmas MD5)." #: ../lib/burning-methods.sh:123 msgid "Errors encountered during MD5 checks." msgstr "Se encontraron errores durante la revisión de las firmas MD5." #: ../lib/burning-methods.sh:127 #, sh-format msgid "Unable to unmount the mount point $mount_point" msgstr "No se pudo desmontar el punto de montaje $mount_point" #: ../lib/burning-methods.sh:128 #, sh-format msgid "Unable to remove the mount point $mount_point" msgstr "No se pudo suprimir el punto de montaje $mount_point" #: ../lib/burning-methods.sh:147 msgid "No burning method used." msgstr "No se usó ningún método de grabación." #: ../lib/burning-methods.sh:171 #, sh-format msgid "Number of files to burn: $nb_file." msgstr "Número de archivos a grabar: $nb_file." #: ../lib/burning-methods.sh:173 #, sh-format msgid "" "Nothing to burn for the $BM__BURNING_DATE, try the '--burn <date>' switch." msgstr "" "Nada que grabar para el $BM__BURNING_DATE, pruebe el parámetro '--burn " "<fecha>'." #: ../lib/burning-methods.sh:202 ../lib/burning-methods.sh:227 #, sh-format msgid "Burning archives of $BM__BURNING_DATE." msgstr "Grabando archivos de $BM__BURNING_DATE." #: ../lib/burning-methods.sh:207 #, sh-format msgid "" "Cannot burn archives of the $BM__BURNING_DATE, too big: ${size}M, must fit " "in $BM_BURNING_MAXSIZE" msgstr "" "No se pueden grabar los ficheros de $BM__BURNING_DATE, son demasiado " "grandes: ${size}M, deben ocupar un máximo de $BM_BURNING_MAXSIZE" #: ../lib/burning-methods.sh:231 msgid "Burning the whole archives." msgstr "Grabando todos los archivos." #: ../lib/burning-methods.sh:236 #, sh-format msgid "Trying to burn $BM_REPOSITORY_ROOT ($size MB) in interactive mode." msgstr "Intentando grabar $BM_REPOSITORY_ROOT ($size MB) en modo interactivo." #: ../lib/burning-methods.sh:267 #, sh-format msgid "Redirecting burning logs into $logfile" msgstr "Redirigiendo los registros de grabación al fichero $logfile" #: ../lib/burning-methods.sh:272 #, sh-format msgid "Forcing dev=${BM_BURNING_DEVFORCED} for cdrecord commands." msgstr "Forzando dev=${BM_BURNING_DEVFORCED} para las órdenes de cdrecord." #: ../lib/burning-methods.sh:280 #, sh-format msgid "DVD+R(W) burning requires $growisofs, aborting." msgstr "Se requiere $growisofs para la grabación en DVD+R(W), abortando." #: ../lib/burning-methods.sh:283 #, sh-format msgid "Exporting archives to the DVD+R(W) disc in $BM_BURNING_DEVICE." msgstr "" "Exportando los ficheros al disco DVD+R(W) que está en $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:287 ../lib/burning-methods.sh:307 #: ../lib/burning-methods.sh:319 ../lib/burning-methods.sh:325 #: ../lib/burning-methods.sh:338 #, sh-format msgid "failed, check $logfile" msgstr "falló, consulte el fichero $logfile" #: ../lib/burning-methods.sh:292 #, sh-format msgid "DVD-R(W) burning requires $growisofs, aborting." msgstr "Se requiere $growisofs para la grabación en DVD-R(W), abortando." #: ../lib/burning-methods.sh:295 #, sh-format msgid "DVD-R(W) burning requires $dvdrwformat, aborting." msgstr "Se requiere $dvdrwformat para la grabación en DVD-R(W), abortando." #: ../lib/burning-methods.sh:298 #, sh-format msgid "Blanking the DVD-R(W) disc in $BM_BURNING_DEVICE" msgstr "Borrando el disco DVD-R(W) en $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:302 #, sh-format msgid "Unable to blank the DVD-R(W) disc (check $logfile)." msgstr "No se pudo borrar el disco DVD-R(W) (consulte $logfile)." #: ../lib/burning-methods.sh:304 #, sh-format msgid "Exporting archives to the DVD-R(W) disc in $BM_BURNING_DEVICE." msgstr "Exportando los ficheros al DVD-R(W) que está en $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:312 ../lib/burning-methods.sh:330 #, sh-format msgid "CD-R(W) burning requires $cdrecord, aborting." msgstr "Se requiere $cdrecord para la grabación de CD-R(W), abortando." #: ../lib/burning-methods.sh:315 #, sh-format msgid "Blanking the CDRW in $BM_BURNING_DEVICE." msgstr "Borrando el CDRW en $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:321 ../lib/burning-methods.sh:333 #, sh-format msgid "Burning data to $BM_BURNING_DEVICE." msgstr "Grabando los datos a $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:342 msgid "Nothing to burn." msgstr "Nada que grabar." #: ../lib/burning-methods.sh:346 #, sh-format msgid "" "The requested burning method is not supported, check BM_BURNING_METHOD in " "$conffile" msgstr "" "El método de grabación solicitado no está soportado, consulte " "BM_BURNING_METHOD en el fichero $conffile" #: ../lib/burning-methods.sh:402 #, sh-format msgid "Not burning $file because it does not fit in the disk." msgstr "No se grabará $file porque no cabe en el disco." #: ../lib/burning-methods.sh:443 #, sh-format msgid "No such index file: \"$index_file\"." msgstr "No existe el archivo índice \"$index_file\"." #: ../lib/burning-methods.sh:485 msgid "The burning process will need one disk." msgstr "El proceso de grabación necesitará un disco." #: ../lib/burning-methods.sh:487 #, sh-format msgid "The burning process will need $number_of_indexes disks." msgstr "El proceso de grabación necesitará $number_of_indexes disco(s)." #: ../lib/burning-methods.sh:499 #, sh-format msgid "Burning content of $index" msgstr "Grabando el contenido de $index" #: ../lib/dialog.sh:27 msgid "Output:" msgstr "Salida:" #: ../lib/dialog.sh:28 msgid "Print this short help message." msgstr "Imprime este pequeño mensaje de ayuda." #: ../lib/dialog.sh:29 msgid "Print what happens on STDOUT." msgstr "Imprime lo que sucede en STDOUT." #: ../lib/dialog.sh:30 msgid "Disable warnings." msgstr "Deshabilita los avisos." #: ../lib/dialog.sh:33 msgid "Single actions:" msgstr "Acciones únicas:" #: ../lib/dialog.sh:34 msgid "Just upload the files of the day." msgstr "Carga sólo los ficheros del día de hoy." #: ../lib/dialog.sh:35 msgid "Just burn the files of the day." msgstr "Graba sólo los ficheros del día de hoy." #: ../lib/dialog.sh:36 msgid "Just test the md5 sums." msgstr "Comprueba sólo las firmas md5." #: ../lib/dialog.sh:37 msgid "Just purge old archives." msgstr "Borra sólo los ficheros antiguos." #: ../lib/dialog.sh:40 msgid "Behaviour:" msgstr "Comportamiento:" #: ../lib/dialog.sh:41 msgid "Choose an alternate config file." msgstr "Elija un fichero de configuración alternativo." #: ../lib/dialog.sh:42 msgid "Force overwrite of existing archives." msgstr "Fuerza la sobrescritura de los ficheros existentes." #: ../lib/dialog.sh:45 msgid "Unwanted actions:" msgstr "Acciones no deseadas:" #: ../lib/dialog.sh:46 msgid "Disable the upload process." msgstr "Deshabilitar el proceso de carga." #: ../lib/dialog.sh:47 msgid "Disable the burning process." msgstr "Deshabilitar el proceso de grabación." #: ../lib/dialog.sh:48 msgid "Disable the purge process." msgstr "Deshabilitar el proceso de borrado." #: ../lib/dialog.sh:62 ../lib/dialog.sh:81 msgid "Not in interactive mode, cannot continue." msgstr "No se puede continuar, no está en modo interactivo." #: ../lib/files.sh:79 ../lib/files.sh:94 msgid "No path given." msgstr "No se especificó ninguna ruta." #: ../lib/files.sh:169 #, sh-format msgid "Removing lock for old PID, $pid is not running." msgstr "Liberando el bloqueo del PID antiguo, $pid no está en ejecución." #: ../lib/files.sh:179 #, sh-format msgid "" "A backup-manager process ($pid) is already running with the conffile " "$conffile" msgstr "" "Ya se está ejecutando un proceso backup-manager ($pid) usando el fichero de " "configuración $conffile." #: ../lib/files.sh:183 ../lib/files.sh:189 #, sh-format msgid "Getting lock for backup-manager $pid with $conffile" msgstr "Bloqueando backup-manager $pid con $conffile." #: ../lib/files.sh:192 msgid "failed (check the file permissions)." msgstr "Falló (compruebe los permisos del fichero)" #: ../lib/files.sh:280 #, sh-format msgid "$file is not a regular file." msgstr "$file no es un fichero uniforme." #: ../lib/files.sh:305 #, sh-format msgid "Removing obsolete master backup: \"$file\"." msgstr "Borrando copia de seguridad maestra obsoleta: \"$file\"." #: ../lib/files.sh:313 #, sh-format msgid "Removing obsolete master backup (isolated): \"$file\"." msgstr "Borrando copia de seguridad maestra obsoleta (aislada): \"$file\"." #: ../lib/files.sh:320 #, sh-format msgid "Removing archive \"$file\"." msgstr "Borrando fichero \"$file\"." #: ../lib/files.sh:342 msgid "Directory given was not found." msgstr "No se encuentra el directorio especificado." #: ../lib/files.sh:363 #, sh-format msgid "Removing archive \"$archive\"." msgstr "Borrando fichero \"$archive\"." #: ../lib/files.sh:387 #, sh-format msgid "The given file does not exist: $file_to_create" msgstr "El fichero especificado no existe: $file_to_create" #: ../lib/files.sh:392 msgid "No file given." msgstr "No se especificó ningún fichero" #: ../lib/files.sh:397 ../lib/files.sh:399 ../lib/files.sh:413 msgid "Unable to get date from file." msgstr "No se pudo obtener la fecha del fichero." #: ../lib/files.sh:403 msgid "Unable to find the pattern of the file." msgstr "No se pudo encontrar el patrón del fichero" #: ../lib/files.sh:419 #, sh-format msgid "Unable to find the md5 hash of file \"$file\" in file \"$md5file\"." msgstr "" "No se ha podido encontrar la firma md5 del fichero \"$file\" en el archivo " "\"$md5file\"." #: ../lib/files.sh:425 #, sh-format msgid "$file is a duplicate of $file_to_create (using symlink)." msgstr "$file es un duplicado de $file_to_create (usando un enlace simbólico)" #: ../lib/logger.sh:144 ../backup-manager:257 msgid "Unable to exec post-command." msgstr "No se pudo ejecutar la orden posterior." #: ../lib/logger.sh:146 msgid "Releasing lock" msgstr "Liberando el bloqueo" #: ../lib/md5sum.sh:30 msgid "Internal error: bad usage of function get_md5sum_from_file()" msgstr "Error interno: Mal uso de la función get_md5sum_from_file()" #: ../lib/md5sum.sh:34 #, sh-format msgid "No md5file found: $md5file" msgstr "No se encontró el fichero md5: $md5file" #: ../lib/md5sum.sh:82 #, sh-format msgid "Archive given does not exist in the repository: $archive" msgstr "El fichero especificado no existe en el repositorio: $archive" #: ../lib/sanitize.sh:32 #, sh-format msgid "The configuration key $key is not set, using \"$default\"." msgstr "" "La opción de configuración $key no esta definida, se usará \"$default\"." #: ../lib/sanitize.sh:43 #, sh-format msgid "" "The configuration key \"$deprecated_key\" is deprecated, you should rename " "it \"$new_key\". Using \"$deprecated_value\"." msgstr "" "La opción \"$deprecated_key\" esta obsoleta, debería renombrarla \"$new_key" "\". Se usará \"$deprecated_value\"." #: ../lib/sanitize.sh:84 #, sh-format msgid "The configuration key $key is not set but $keymandatory is enabled." msgstr "La opción $key no esta definida, pero $keymandatory esta activado." #: ../lib/sanitize.sh:100 #, sh-format msgid "Deprecated boolean, $key is set to \"yes\", setting \"true\" instead." msgstr "" "Valor booleano obsoleto, $key está definido como \"yes\", se usará \"true" "\" en su lugar." #: ../lib/sanitize.sh:105 #, sh-format msgid "Deprecated boolean, $key is set to \"no\", setting \"false\" instead." msgstr "" "Valor booleano obsoleto, $key está definido como \"no\", se usará \"false" "\" en su lugar." #: ../lib/sanitize.sh:128 #, sh-format msgid "Unable to create BM_TEMP_DIR: \"$BM_TEMP_DIR\"." msgstr "" #: ../lib/sanitize.sh:166 msgid "" "BM_TARBALLINC_MASTERDATEVALUE should not be greater than 6, falling back to 0" msgstr "" #: ../lib/sanitize.sh:276 #, sh-format msgid "" "When validating the configuration file $conffile, $nb_warnings warnings were " "found." msgstr "" "Se encontraron $nb_warnings avisos al validar el fichero de configuración " "$conffile" #: ../lib/upload-methods.sh:38 msgid "Using the upload method \"ssh\"." msgstr "Usando el método de subida \"ssh\"." #: ../lib/upload-methods.sh:47 ../lib/upload-methods.sh:85 msgid "No valid destination found, SSH upload not possible." msgstr "" "No se encontró un destino válido, no se puede subir el fichero utilizando " "SSH." #: ../lib/upload-methods.sh:68 #, sh-format msgid "" "Error reported by backup-manager-upload for method \"scp\", check \"$logfile" "\"." msgstr "" "backup-manager-upload ha reportado un error para el método \"scp\", revise " "\"$logfile" #: ../lib/upload-methods.sh:76 msgid "Using the upload method \"ssh-gpg\"." msgstr "Usando el método de subida \"ssh-gpg\"." #: ../lib/upload-methods.sh:88 msgid "" "No gpg recipient given. Argument is mandatory if upload method ssh-gpg is " "used." msgstr "" "No se ha especificado un destinatario gpg. Ese argumento es obligatorio si " "se usa el método de subida ssh-gpg." #: ../lib/upload-methods.sh:105 #, sh-format msgid "" "Error reported by backup-manager-upload for method \"ssh-gpg\", check " "\"$logfile\"." msgstr "" "backup-manager-upload ha reportado un error para el método \"ssh-gpg\", " "revise \"$logfile " #: ../lib/upload-methods.sh:112 msgid "Using the upload method \"ftp\"." msgstr "Utilizando el método de subida \"ftp\"." #: ../lib/upload-methods.sh:122 msgid "No valid destination found, FTP upload not possible." msgstr "" "No se encontró un destino válido, no se puede subir el fichero utilizando " "FTP." #: ../lib/upload-methods.sh:138 #, sh-format msgid "" "Error reported by backup-manager-upload for method \"ftp\", check \"$logfile" "\"." msgstr "" "backup-manager-upload ha reportado un error para el método \"ftp\", revise " "\"$logfile " #: ../lib/upload-methods.sh:146 msgid "Using the upload method \"S3\"." msgstr "Usando el método de subida \"S3\"." #: ../lib/upload-methods.sh:168 #, sh-format msgid "" "Error reported by backup-manager-upload for method \"s3\", check \"$logfile" "\"." msgstr "" "backup-manager-upload ha reportado un error para el método \"s3\", revise " "\"$logfile " #: ../lib/upload-methods.sh:174 #, sh-format msgid "Uploading $directory to ${host}:${BM_UPLOAD_RSYNC_DESTINATION}" msgstr "Subiendo $directory a ${host}:${BM_UPLOAD_RSYNC_DESTINATION}" #: ../lib/upload-methods.sh:185 msgid "Need a key to use rsync (set BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY)." msgstr "" "Necesita una clave para utilizar rsync (configure BM_UPLOAD_SSH_USER, " "BM_UPLOAD_SSH_KEY)" #: ../lib/upload-methods.sh:196 #, sh-format msgid "Upload of $directory with rsync failed; check $logfile." msgstr "" "No se pudo subir $directory utilizando rsync; consulte el fichero $logfile." #: ../lib/upload-methods.sh:215 msgid "No valid destination found, RSYNC upload not possible." msgstr "" "No se encontró un destino válido, no se puede subir el fichero utilizando " "RSYNC." #: ../lib/upload-methods.sh:234 msgid "No hosts given to the rsync method, set BM_UPLOAD_RSYNC_HOSTS." msgstr "" "No se especificó ningún equipo para el método rsync, configure " "BM_UPLOAD_RSYNC_HOSTS." #: ../lib/upload-methods.sh:241 msgid "Using the upload method \"rsync\"." msgstr "Utilizando el método de subida \"rsync\"." #: ../lib/upload-methods.sh:248 msgid "Using the upload method \"rsync-snapshots\"." msgstr "Utilizando el método de subida \"rsync-snapshots\"." #: ../backup-manager:127 msgid "The -b option must be followed by a valid date (YYYYMMDD)." msgstr "La opción -b debe acompañarse de una fecha válida (YYYYMMDD)." #: ../backup-manager:162 msgid "The -c option must be followed by an existing filename." msgstr "La opción -c debe acompañarse del nombre de un fichero existente." #: ../backup-manager:202 msgid "Unable to exec the pre-command" msgstr "No se pudo ejecutar la orden previa." #~ msgid "Internal error: wrong call to bm_merge_incremental_backups()." #~ msgstr "Error interno: Lamada erronea a bm_merge_incremental_backups()." #~ msgid "Unable to change the owner of \"$file_to_create\"." #~ msgstr "No se han podido borrar los duplicados de \"$file_to_create\"." #~ msgid "Unable to change file permissions of \"$file_to_create\"." #~ msgstr "No se han podido borrar los duplicados de \"$file_to_create\"." #, fuzzy #~ msgid "Compressor $compress requires $gzip." #~ msgstr "El compresor $compress requiere $bzip" #~ msgid "Compressor $compress requires $bzip." #~ msgstr "El compresor $compress requiere $bzip" #~ msgid "CDROM burning requires $cdrecord, aborting." #~ msgstr "Se requiere $cdrecord para la grabación en CDROM, abortando." ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/po/cs.po��������������������������������������������������������������������0000644�0001750�0001750�00000075203�11503702461�015440� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Czech translation of backup-manager # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the backup-manager package. # Miroslav Kure <kurem@debian.cz>, 2005,2006. # msgid "" msgstr "" "Project-Id-Version: backup-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-07-15 20:27+0200\n" "PO-Revision-Date: 2010-12-02 20:57+0100\n" "Last-Translator: Miroslav Kure <kurem@debian.cz>\n" "Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../lib/actions.sh:44 msgid "No backup method used." msgstr "Není použita žádná zálohovací metoda." #: ../lib/actions.sh:47 #, sh-format msgid "No such backup method: $BM_ARCHIVE_METHOD" msgstr "Tato zálohovací metoda neexistuje: $BM_ARCHIVE_METHOD" #: ../lib/actions.sh:56 #, sh-format msgid "Unable to change the owner of \"$md5file\"." msgstr "Nemohu zmÄ›nit vlastníka \"$md5file\"." #: ../lib/actions.sh:58 #, sh-format msgid "Unable to change file permissions of \"$md5file\"." msgstr "Nemohu zmÄ›nit oprávnÄ›ní k \"$md5file\"." #: ../lib/actions.sh:90 msgid "No upload method used." msgstr "Není použita žádná nahrávací metoda." #: ../lib/actions.sh:93 #, sh-format msgid "The upload method \"$method\" is not supported; skipping." msgstr "Nahrávací metoda \"$method\" není podporovaná; pÅ™eskakuji." #: ../lib/actions.sh:105 #, sh-format msgid "Cleaning $BM_REPOSITORY_ROOT" msgstr "ÄŒistím $BM_REPOSITORY_ROOT" #: ../lib/actions.sh:118 #, sh-format msgid "Running pre-command: $BM_PRE_BACKUP_COMMAND." msgstr "SpouÅ¡tím úvodní příkaz: $BM_PRE_BACKUP_COMMAND." #: ../lib/actions.sh:122 msgid "Pre-command failed. Stopping the process." msgstr "Úvodní příkaz selhal. Zastavuji proces." #: ../lib/actions.sh:127 #, sh-format msgid "Pre-command returned: \"$RET\" (success)." msgstr "Úvodní příkaz vrátil: \"$RET\" (úspÄ›ch)." #: ../lib/actions.sh:139 #, sh-format msgid "Running post-command: $BM_POST_BACKUP_COMMAND" msgstr "SpouÅ¡tím závÄ›reÄný příkaz: $BM_POST_BACKUP_COMMAND" #: ../lib/actions.sh:143 msgid "Post-command failed." msgstr "ZávÄ›reÄný příkaz selhal." #: ../lib/actions.sh:148 #, sh-format msgid "Post-command returned: \"$RET\" (success)." msgstr "ZávÄ›reÄný příkaz vrátil: \"$RET\" (úspÄ›ch)." #: ../lib/actions.sh:180 msgid "The BM_TARBALL_FILETYPE conf key is set to \"zip\" but zip is not installed." msgstr "KonfiguraÄní klÃ­Ä BM_TARBALL_FILETYPE je nastaven na \"zip\", ale zip není nainstalován." #: ../lib/actions.sh:185 msgid "The BM_TARBALL_FILETYPE conf key is set to \"bzip2\" but bzip2 is not installed." msgstr "KonfiguraÄní klÃ­Ä BM_TARBALL_FILETYPE je nastaven na \"bzip2\", ale bzip2 není nainstalován." #: ../lib/actions.sh:190 msgid "The BM_TARBALL_FILETYPE conf key is set to \"dar\" but dar is not installed." msgstr "KonfiguraÄní klÃ­Ä BM_TARBALL_FILETYPE je nastaven na \"dar\", ale dar není nainstalován." #: ../lib/actions.sh:202 #, sh-format msgid "The repository $BM_REPOSITORY_ROOT does not exist, creating it." msgstr "ÚložiÅ¡tÄ› $BM_REPOSITORY_ROOT neexistuje, vytvářím je." #: ../lib/backup-methods.sh:26 #, sh-format msgid "$file_to_create: ok (${size}M," msgstr "$file_to_create: ok (${size}M," #: ../lib/backup-methods.sh:54 #, sh-format msgid "Unable to purge duplicates of $file_to_create" msgstr "Nemohu smazat duplikáty $file_to_create" #: ../lib/backup-methods.sh:65 #, fuzzy, sh-format msgid "Unable to change the owner of \"$file\"." msgstr "Nemohu zmÄ›nit vlastníka \"$md5file\"." #: ../lib/backup-methods.sh:67 #, fuzzy, sh-format msgid "Unable to change file permissions of \"$file\"." msgstr "Nemohu zmÄ›nit oprávnÄ›ní k \"$md5file\"." #: ../lib/backup-methods.sh:78 #, fuzzy msgid "Warning, process interrupted." msgstr "Varování, proces pÅ™eruÅ¡en, archivy mohou být poruÅ¡eny." #: ../lib/backup-methods.sh:82 #, fuzzy, sh-format msgid "Removing archive \"$bm_pending_archive\" (build interrupted)." msgstr "Odstraňuji archiv \"$archive\"." #: ../lib/backup-methods.sh:88 #, sh-format msgid "Restoring incremental-building details list: \"$bm_pending_incremental_list\"." msgstr "" #: ../lib/backup-methods.sh:124 #, sh-format msgid "Unable to create \"$target\", check $logfile" msgstr "Nemohu vytvoÅ™it \"$target\", zkontrolujte $logfile" #: ../lib/backup-methods.sh:140 #, sh-format msgid "File $file_to_create already exists, skipping." msgstr "Soubor $file_to_create již existuje, pÅ™eskakuji." #: ../lib/backup-methods.sh:151 msgid "gzip is not installed but gzip compression needed." msgstr "" #: ../lib/backup-methods.sh:159 msgid "bzip2 is not installed but bzip2 compression needed." msgstr "" #: ../lib/backup-methods.sh:177 #: ../lib/backup-methods.sh:201 #, sh-format msgid "Unable to exec $command; check $logfile" msgstr "Nemohu spustit $command, zkontrolujte $logfile" #: ../lib/backup-methods.sh:183 #, fuzzy, sh-format msgid "Compressor $compress is needed." msgstr "Komprese $compress vyžaduje $gzip." #: ../lib/backup-methods.sh:208 #, sh-format msgid "No such compressor supported: $compress." msgstr "Tato komprese není podporovaná: $compress." #: ../lib/backup-methods.sh:214 #, sh-format msgid "Unable to find $file_to_create" msgstr "Nemohu najít $file_to_create" #: ../lib/backup-methods.sh:342 msgid "No frequency given, set BM_TARBALLINC_MASTERDATETYPE." msgstr "Nebyla zadána frekvence, nastavte BM_TARBALLINC_MASTERDATETYPE." #: ../lib/backup-methods.sh:353 #, sh-format msgid "Unknown frequency: $BM_TARBALLINC_MASTERDATETYPE" msgstr "Neznámá frekvence: $BM_TARBALLINC_MASTERDATETYPE" #: ../lib/backup-methods.sh:386 #, sh-format msgid "Building master backup for target: \"$dir_name\"." msgstr "Vytvářím hlavní zálohu pro cíl: \"$dir_name\"." #: ../lib/backup-methods.sh:515 msgid "Tar reported a file changed during archive creation." msgstr "" #: ../lib/backup-methods.sh:526 msgid "Dar reported a file changed during archive creation." msgstr "" #: ../lib/backup-methods.sh:564 #, sh-format msgid "The archive type \"tar.bz2\" depends on the tool \"$bzip\"." msgstr "Typ archivu \"tar.bz2\" závisí na nástroji \"$bzip\"." #: ../lib/backup-methods.sh:571 #, sh-format msgid "The archive type \"tar.lz\" depends on the tool \"$lzma\"." msgstr "Typ archivu \"tar.lz\" závisí na nástroji \"$lzma\"." #: ../lib/backup-methods.sh:578 #, sh-format msgid "The archive type \"zip\" depends on the tool \"$zip\"." msgstr "Typ archivu \"zip\" závisí na nástroji \"$zip\"." #: ../lib/backup-methods.sh:584 #, sh-format msgid "The archive type \"dar\" depends on the tool \"$dar\"." msgstr "Typ archivu \"dar\" závisí na nástroji \"$dar\"." #: ../lib/backup-methods.sh:590 #: ../lib/backup-methods.sh:677 #: ../lib/backup-methods.sh:723 #, sh-format msgid "The archive type \"$BM_TARBALL_FILETYPE\" is not supported." msgstr "Typ archivu \"$BM_TARBALL_FILETYPE\" není podporován." #: ../lib/backup-methods.sh:651 msgid "The configuration variable \"BM_ENCRYPTION_RECIPIENT\" must be defined." msgstr "KonfiguraÄní promÄ›nná \"$BM_ENCRYPTION_RECIPIENT\" musí být definována." #: ../lib/backup-methods.sh:657 #, sh-format msgid "The encryption is not yet possible with \"$BM_TARBALL_FILETYPE\" archives." msgstr "Å ifrování archivů \"$BM_TARBALL_FILETYPE\" zatím není možné." #: ../lib/backup-methods.sh:695 #, sh-format msgid "The program \"$gpg\" is needed." msgstr "Je vyžadován program \"$gpg\"." #: ../lib/backup-methods.sh:704 #: ../lib/backup-methods.sh:737 #, sh-format msgid "File $file_to_check already exists, skipping." msgstr "Soubor $file_to_check již existuje, pÅ™eskakuji." #: ../lib/backup-methods.sh:769 #, fuzzy, sh-format msgid "Target \"$t\" is found in blacklist, skipping." msgstr "Cíl \"$t\" neexistuje, pÅ™eskakuji." #: ../lib/backup-methods.sh:773 #, sh-format msgid "Target \"$t\" does not exist, skipping." msgstr "Cíl \"$t\" neexistuje, pÅ™eskakuji." #: ../lib/backup-methods.sh:849 #: ../lib/backup-methods.sh:888 #: ../lib/backup-methods.sh:938 #: ../lib/backup-methods.sh:962 #, sh-format msgid "Using method \"$method\"." msgstr "Používám metodu \"$method\"." #: ../lib/backup-methods.sh:875 msgid "1 error occurred during the tarball generation." msgstr "BÄ›hem vytváření tar archivu se objevila 1 chyba." #: ../lib/backup-methods.sh:877 #, sh-format msgid "$nb_err errors occurred during the tarball generation." msgstr "BÄ›hem vytváření tar archivu se objevily chyby (celkem $nb_err)." #: ../lib/backup-methods.sh:890 #, sh-format msgid "The \"mysql\" method is chosen, but $mysqldump is not found." msgstr "Je vybrána metoda \"mysql\", avÅ¡ak $mysqldump nelze nalézt." #: ../lib/backup-methods.sh:900 #, sh-format msgid "Using existing MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:904 #, sh-format msgid "Creating a default MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:928 #, sh-format msgid "Removing default MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:940 #, sh-format msgid "The \"svn\" method is chosen, but $svnadmin is not found." msgstr "Je vybrána metoda \"svn\", avÅ¡ak $svnadmin nelze nalézt." #: ../lib/backup-methods.sh:946 #, sh-format msgid "SVN repository \"$repository\" is not valid; skipping." msgstr "SVN repozitář \"$repository\" není platný; pÅ™eskakuji." #: ../lib/backup-methods.sh:971 #, sh-format msgid "Not enough args for this archive ($archive), skipping." msgstr "Pro tento archiv ($archive) nemám dost argumentů, pÅ™eskakuji." #: ../lib/backup-methods.sh:978 msgid "Cannot create archive." msgstr "Nemohu vytvoÅ™it archiv." #: ../lib/burning-methods.sh:37 #, sh-format msgid "Device \"/dev/$device\" is mounted on \"$m\", unmounting it." msgstr "Zařízení \"/dev/$device\" je pÅ™ipojeno na \"$m\", odpojuji." #: ../lib/burning-methods.sh:53 #, sh-format msgid "MD5 checkup is only performed on disks. Please set the BM_BURNING_DEVICE in $conffile" msgstr "MD5 souÄet se poÄítá pouze na médiích. V $conffile prosím nastavte klÃ­Ä BM_BURNING_DEVICE" #: ../lib/burning-methods.sh:59 #, sh-format msgid "The mount point $mount_point is not there." msgstr "Přípojný bod $mount_point neexistuje." #: ../lib/burning-methods.sh:66 #, sh-format msgid "Mounting $BM_BURNING_DEVICE on $mount_point." msgstr "PÅ™ipojuji $BM_BURNING_DEVICE na $mount_point." #: ../lib/burning-methods.sh:90 #, sh-format msgid "Checking MD5 sum for $base_file:" msgstr "Kontroluji MD5 souÄet $base_file:" #: ../lib/burning-methods.sh:109 #, sh-format msgid "$str ok." msgstr "$str ok." #: ../lib/burning-methods.sh:112 #, sh-format msgid "$str failed (read error)." msgstr "$str selhalo (chyba Ätení)." #: ../lib/burning-methods.sh:116 #, sh-format msgid "$str failed (MD5 hash mismatch)." msgstr "$str selhalo (MD5 nesouhlasí)." #: ../lib/burning-methods.sh:123 msgid "Errors encountered during MD5 checks." msgstr "BÄ›hem MD5 kontrol byly zaznamenány chyby." #: ../lib/burning-methods.sh:127 #, sh-format msgid "Unable to unmount the mount point $mount_point" msgstr "Nemohu odpojit přípojný bod $mount_point" #: ../lib/burning-methods.sh:128 #, sh-format msgid "Unable to remove the mount point $mount_point" msgstr "Nemohu odstranit přípojný bod $mount_point" #: ../lib/burning-methods.sh:147 msgid "No burning method used." msgstr "Není použita žádná vypalovací metoda." #: ../lib/burning-methods.sh:171 #, sh-format msgid "Number of files to burn: $nb_file." msgstr "PoÄet souborů k vypálení: $nb_file." #: ../lib/burning-methods.sh:173 #, sh-format msgid "Nothing to burn for the $BM__BURNING_DATE, try the '--burn <date>' switch." msgstr "Pro den $BM__BURNING_DATE nemám nic k vypálení; zkuste pÅ™epínaÄ '--burn datum'." #: ../lib/burning-methods.sh:202 #: ../lib/burning-methods.sh:227 #, sh-format msgid "Burning archives of $BM__BURNING_DATE." msgstr "Vypaluji archivy ze dne $BM__BURNING_DATE." #: ../lib/burning-methods.sh:207 #, sh-format msgid "Cannot burn archives of the $BM__BURNING_DATE, too big: ${size}M, must fit in $BM_BURNING_MAXSIZE" msgstr "Nemohu vypálit archivy ze dne $BM__BURNING_DATE, jsou příliÅ¡ velké: ${size}M, se musí vejít do $BM_BURNING_MAXSIZE" #: ../lib/burning-methods.sh:231 msgid "Burning the whole archives." msgstr "Vypaluji celé archivy." #: ../lib/burning-methods.sh:236 #, sh-format msgid "Trying to burn $BM_REPOSITORY_ROOT ($size MB) in interactive mode." msgstr "Zkouším vypálit $BM_REPOSITORY_ROOT ($size MB) v interaktivním režimu." #: ../lib/burning-methods.sh:267 #, sh-format msgid "Redirecting burning logs into $logfile" msgstr "PÅ™esmÄ›rovávám hlášení o vypalování do $logfile" #: ../lib/burning-methods.sh:272 #, sh-format msgid "Forcing dev=${BM_BURNING_DEVFORCED} for cdrecord commands." msgstr "Pro příkazy cdrecordu vynucuji dev=${BM_BURNING_DEVFORCED}." #: ../lib/burning-methods.sh:280 #, sh-format msgid "DVD+R(W) burning requires $growisofs, aborting." msgstr "Vypalování DVD+R(W) vyžaduje $growisofs, konÄím." #: ../lib/burning-methods.sh:283 #, sh-format msgid "Exporting archives to the DVD+R(W) disc in $BM_BURNING_DEVICE." msgstr "Exportuji archivy na DVD+R(W) médium v $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:287 #: ../lib/burning-methods.sh:307 #: ../lib/burning-methods.sh:319 #: ../lib/burning-methods.sh:325 #: ../lib/burning-methods.sh:338 #, sh-format msgid "failed, check $logfile" msgstr "selhalo, zkontrolujte $logfile" #: ../lib/burning-methods.sh:292 #, sh-format msgid "DVD-R(W) burning requires $growisofs, aborting." msgstr "Vypalování DVD-R(W) vyžaduje $growisofs, konÄím." #: ../lib/burning-methods.sh:295 #, sh-format msgid "DVD-R(W) burning requires $dvdrwformat, aborting." msgstr "Vypalování DVD-R(W) vyžaduje $dvdrwformat, konÄím." #: ../lib/burning-methods.sh:298 #, sh-format msgid "Blanking the DVD-R(W) disc in $BM_BURNING_DEVICE" msgstr "Mažu DVD-R(W) médium v $BM_BURNING_DEVICE" #: ../lib/burning-methods.sh:302 #, sh-format msgid "Unable to blank the DVD-R(W) disc (check $logfile)." msgstr "Nemohu smazat DVD-R(W) médium (zkontrolujte $logfile)." #: ../lib/burning-methods.sh:304 #, sh-format msgid "Exporting archives to the DVD-R(W) disc in $BM_BURNING_DEVICE." msgstr "Exportuji archivy na DVD-R(W) médium v $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:312 #: ../lib/burning-methods.sh:330 #, sh-format msgid "CD-R(W) burning requires $cdrecord, aborting." msgstr "Vypalování CD-R(W) vyžaduje $cdrecord, konÄím." #: ../lib/burning-methods.sh:315 #, sh-format msgid "Blanking the CDRW in $BM_BURNING_DEVICE." msgstr "Mažu CDRW v $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:321 #: ../lib/burning-methods.sh:333 #, sh-format msgid "Burning data to $BM_BURNING_DEVICE." msgstr "Vypaluji data na $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:342 msgid "Nothing to burn." msgstr "Nic k vypálení." #: ../lib/burning-methods.sh:346 #, sh-format msgid "The requested burning method is not supported, check BM_BURNING_METHOD in $conffile" msgstr "Požadovaný způsob vypalování není podporovaný, zkontrolujte promÄ›nnou BM_BURNING_METHOD v souboru $conffile" #: ../lib/burning-methods.sh:402 #, sh-format msgid "Not burning $file because it does not fit in the disk." msgstr "Nevypaluji soubor $file, protože se nevejde na médium." #: ../lib/burning-methods.sh:443 #, sh-format msgid "No such index file: \"$index_file\"." msgstr "Tento indexový soubor neexistuje: \"$index_file\"." #: ../lib/burning-methods.sh:485 msgid "The burning process will need one disk." msgstr "PoÄet médií nutných pro vypálení: 1." #: ../lib/burning-methods.sh:487 #, sh-format msgid "The burning process will need $number_of_indexes disks." msgstr "PoÄet médií nutných pro vypálení: $number_of_indexes." #: ../lib/burning-methods.sh:499 #, sh-format msgid "Burning content of $index" msgstr "Vypaluji obsah $index" #: ../lib/dialog.sh:27 msgid "Output:" msgstr "Výstup:" #: ../lib/dialog.sh:28 msgid "Print this short help message." msgstr "Vytiskne tuto krátkou nápovÄ›du." #: ../lib/dialog.sh:29 msgid "Print version number." msgstr "" #: ../lib/dialog.sh:30 msgid "Print what happens on STDOUT." msgstr "Vytiskne na STDOUT provádÄ›né kroky." #: ../lib/dialog.sh:31 #, fuzzy msgid "Print debug messages on STDOUT." msgstr "Vytiskne na STDOUT provádÄ›né kroky." #: ../lib/dialog.sh:32 msgid "Disable warnings." msgstr "Zakáže varování." #: ../lib/dialog.sh:35 msgid "Single actions:" msgstr "Samostatné akce:" #: ../lib/dialog.sh:36 msgid "Just upload the files of the day." msgstr "Pouze nahraje denní soubory." #: ../lib/dialog.sh:37 msgid "Just burn the files of the day." msgstr "Pouze vypálí denní soubory." #: ../lib/dialog.sh:38 msgid "Just test the md5 sums." msgstr "Pouze zkontroluje md5 souÄty." #: ../lib/dialog.sh:39 msgid "Just purge old archives." msgstr "Pouze smaže staré archivy." #: ../lib/dialog.sh:42 msgid "Behaviour:" msgstr "Chování:" #: ../lib/dialog.sh:43 msgid "Choose an alternate config file." msgstr "Použije alternativní konfiguraÄní soubor." #: ../lib/dialog.sh:44 msgid "Force overwrite of existing archives." msgstr "Povolí pÅ™epsání stávajících archivů." #: ../lib/dialog.sh:47 msgid "Unwanted actions:" msgstr "Zakazující akce:" #: ../lib/dialog.sh:48 msgid "Disable the upload process." msgstr "Zakáže nahrání na jiný poÄítaÄ." #: ../lib/dialog.sh:49 msgid "Disable the burning process." msgstr "Zakáže vypalování." #: ../lib/dialog.sh:50 msgid "Disable the purge process." msgstr "Zakáže promazání starých archivů." #: ../lib/dialog.sh:64 #: ../lib/dialog.sh:83 msgid "Not in interactive mode, cannot continue." msgstr "Nejsem v interaktivním režimu, nemohu pokraÄovat." #: ../lib/files.sh:79 #: ../lib/files.sh:94 msgid "No path given." msgstr "Nebyla zadána cesta." #: ../lib/files.sh:169 #, sh-format msgid "Removing lock for old PID, $pid is not running." msgstr "Odstraňuji zámek pro staré PID, $pid již neběží." #: ../lib/files.sh:179 #, sh-format msgid "A backup-manager process ($pid) is already running with the conffile $conffile" msgstr "Proces backup-manageru ($pid) již běží s konfiguraÄním souborem $conffile" #: ../lib/files.sh:183 #: ../lib/files.sh:189 #, sh-format msgid "Getting lock for backup-manager $pid with $conffile" msgstr "Získávám zámek pro backup-manager $pid s $conffile" #: ../lib/files.sh:192 msgid "failed (check the file permissions)." msgstr "selhalo (zkontrolujte přístupová práva souborů)." #: ../lib/files.sh:280 #, sh-format msgid "$file is not a regular file." msgstr "$file není běžný soubor." #: ../lib/files.sh:305 #, sh-format msgid "Removing obsolete master backup: \"$file\"." msgstr "Odstraňuji zastaralou hlavní zálohu: \"$file\"." #: ../lib/files.sh:313 #, sh-format msgid "Removing obsolete master backup (isolated): \"$file\"." msgstr "Odstraňuji zastaralou hlavní zálohu (izolovaná): \"$file\"." #: ../lib/files.sh:320 #, sh-format msgid "Removing archive \"$file\"." msgstr "Odstraňuji archiv \"$file\"." #: ../lib/files.sh:342 msgid "Directory given was not found." msgstr "Zadaný adresář nebyl nalezen." #: ../lib/files.sh:363 #, sh-format msgid "Removing archive \"$archive\"." msgstr "Odstraňuji archiv \"$archive\"." #: ../lib/files.sh:387 #, sh-format msgid "The given file does not exist: $file_to_create" msgstr "Zadaný soubor neexistuje: $file_to_create" #: ../lib/files.sh:392 msgid "No file given." msgstr "Nebyl zadán žádný soubor." #: ../lib/files.sh:397 #: ../lib/files.sh:399 #: ../lib/files.sh:413 msgid "Unable to get date from file." msgstr "Nemohu ze souboru získat datum." #: ../lib/files.sh:403 msgid "Unable to find the pattern of the file." msgstr "Nemohu najít vzor souboru." #: ../lib/files.sh:419 #, sh-format msgid "Unable to find the md5 hash of file \"$file\" in file \"$md5file\"." msgstr "Nemohu najít md5 hash souboru \"$file\" v souboru \"$md5file\"." #: ../lib/files.sh:425 #, sh-format msgid "$file is a duplicate of $file_to_create (using symlink)." msgstr "$file je kopií $file_to_create (používám symbolický odkaz)." #: ../lib/logger.sh:144 #: ../backup-manager:257 msgid "Unable to exec post-command." msgstr "Nemohu spustit závÄ›reÄný příkaz." #: ../lib/logger.sh:146 msgid "Releasing lock" msgstr "Uvolňuji zámek" #: ../lib/md5sum.sh:30 msgid "Internal error: bad usage of function get_md5sum_from_file()" msgstr "VnitÅ™ní chyba: chybné použití funkce get_md5sum_from_file()" #: ../lib/md5sum.sh:34 #, sh-format msgid "No md5file found: $md5file" msgstr "Nebyl nalezen soubor s md5 souÄty: $md5file" #: ../lib/md5sum.sh:82 #, sh-format msgid "Archive given does not exist in the repository: $archive" msgstr "Zadaný archiv v úložiÅ¡ti neexistuje: $archive" #: ../lib/sanitize.sh:32 #, sh-format msgid "The configuration key $key is not set, using \"$default\"." msgstr "KonfiguraÄní klÃ­Ä $key není nastaven, používám \"$default\"." #: ../lib/sanitize.sh:43 #, sh-format msgid "The configuration key \"$deprecated_key\" is deprecated, you should rename it \"$new_key\". Using \"$deprecated_value\"." msgstr "KonfiguraÄní klÃ­Ä \"$deprecated_key\" je zastaralý, mÄ›li byste jej pÅ™ejmenovat na \"$new_key\". Používám \"$deprecated_value\"." #: ../lib/sanitize.sh:84 #, sh-format msgid "The configuration key $key is not set but $keymandatory is enabled." msgstr "KonfiguraÄní klÃ­Ä $key není nastaven, ale $keymandatory je povolen." #: ../lib/sanitize.sh:100 #, sh-format msgid "Deprecated boolean, $key is set to \"yes\", setting \"true\" instead." msgstr "ZmÄ›nÄ›n typ boolean, $key má hodnotu \"yes\", nastavuji na \"true\"." #: ../lib/sanitize.sh:105 #, sh-format msgid "Deprecated boolean, $key is set to \"no\", setting \"false\" instead." msgstr "ZmÄ›nÄ›n typ boolean, $key má hodnotu \"no\", nastavuji na \"false\"." #: ../lib/sanitize.sh:128 #, sh-format msgid "Unable to create BM_TEMP_DIR: \"$BM_TEMP_DIR\"." msgstr "" #: ../lib/sanitize.sh:166 msgid "BM_TARBALLINC_MASTERDATEVALUE should not be greater than 6, falling back to 0" msgstr "" #: ../lib/sanitize.sh:276 #, sh-format msgid "When validating the configuration file $conffile, $nb_warnings warnings were found." msgstr "PÅ™i ověřování konfiguraÄního souboru $conffile bylo nalezeno $nb_warnings varování." #: ../lib/upload-methods.sh:38 msgid "Using the upload method \"ssh\"." msgstr "Používám nahrávací metodu \"ssh\"." #: ../lib/upload-methods.sh:47 #: ../lib/upload-methods.sh:85 msgid "No valid destination found, SSH upload not possible." msgstr "Nebyl nalezen platný cíl, nahrání pÅ™es SSH není možné." #: ../lib/upload-methods.sh:68 #, sh-format msgid "Error reported by backup-manager-upload for method \"scp\", check \"$logfile\"." msgstr "Metoda \"scp\" programu backup-manager-upload vrátila chybu, zkontrolujte \"$logfile\"." #: ../lib/upload-methods.sh:76 msgid "Using the upload method \"ssh-gpg\"." msgstr "Používám nahrávací metodu \"ssh-gpg\"." #: ../lib/upload-methods.sh:88 msgid "No gpg recipient given. Argument is mandatory if upload method ssh-gpg is used." msgstr "Nebyl zadán žádný gpg příjemce. PÅ™i použití metody ssh-gpg je argument povinný." #: ../lib/upload-methods.sh:105 #, sh-format msgid "Error reported by backup-manager-upload for method \"ssh-gpg\", check \"$logfile\"." msgstr "Metoda \"ssh-gpg\" programu backup-manager-upload vrátila chybu, zkontrolujte \"$logfile\"." #: ../lib/upload-methods.sh:112 msgid "Using the upload method \"ftp\"." msgstr "Používám nahrávací metodu \"ftp\"." #: ../lib/upload-methods.sh:122 msgid "No valid destination found, FTP upload not possible." msgstr "Nebyl nalezen platný cíl, nahrání pÅ™es FTP není možné." #: ../lib/upload-methods.sh:138 #, sh-format msgid "Error reported by backup-manager-upload for method \"ftp\", check \"$logfile\"." msgstr "Metoda \"ftp\" programu backup-manager-upload vrátila chybu, zkontrolujte \"$logfile\"." #: ../lib/upload-methods.sh:146 msgid "Using the upload method \"S3\"." msgstr "Používám nahrávací metodu \"S3\"." #: ../lib/upload-methods.sh:168 #, sh-format msgid "Error reported by backup-manager-upload for method \"s3\", check \"$logfile\"." msgstr "Metoda \"s3\" programu backup-manager-upload vrátila chybu, zkontrolujte \"$logfile\"." #: ../lib/upload-methods.sh:174 #, sh-format msgid "Uploading $directory to ${host}:${BM_UPLOAD_RSYNC_DESTINATION}" msgstr "Nahrávám $directory na ${host}:${BM_UPLOAD_RSYNC_DESTINATION}" #: ../lib/upload-methods.sh:185 msgid "Need a key to use rsync (set BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY)." msgstr "Použití rsync vyžaduje klÃ­Ä (nastavte BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY)." #: ../lib/upload-methods.sh:196 #, sh-format msgid "Upload of $directory with rsync failed; check $logfile." msgstr "Nahrání $directory pomocí rsync selhalo; zkontrolujte $logfile." #: ../lib/upload-methods.sh:215 msgid "No valid destination found, RSYNC upload not possible." msgstr "Nebyl nalezen platný cíl, nahrání pÅ™es RSYNC není možné." #: ../lib/upload-methods.sh:234 msgid "No hosts given to the rsync method, set BM_UPLOAD_RSYNC_HOSTS." msgstr "MetodÄ› rsync nebyl pÅ™edán žádný poÄítaÄ, nastavte BM_UPLOAD_RSYNC_HOSTS." #: ../lib/upload-methods.sh:241 msgid "Using the upload method \"rsync\"." msgstr "Používám nahrávací metodu \"rsync\"." #: ../lib/upload-methods.sh:248 msgid "Using the upload method \"rsync-snapshots\"." msgstr "Používám nahrávací metodu \"rsync-snapshots\"." #: ../backup-manager:127 msgid "The -b option must be followed by a valid date (YYYYMMDD)." msgstr "Za volbou -b musí následovat platný datum (YYYYMMDD)." #: ../backup-manager:162 msgid "The -c option must be followed by an existing filename." msgstr "Za volbou -c musí následovat jméno existujícího souboru" #: ../backup-manager:202 msgid "Unable to exec the pre-command" msgstr "Nemohu spustit úvodní příkaz" #~ msgid "Internal error: wrong call to bm_merge_incremental_backups()." #~ msgstr "VnitÅ™ní chyba: chybné volání bm_merge_incremental_backups()." #~ msgid "Unable to change the owner of \"$file_to_create\"." #~ msgstr "Nemohu zmÄ›nit vlastníka \"$file_to_create\"." #~ msgid "Unable to change file permissions of \"$file_to_create\"." #~ msgstr "Nemohu zmÄ›nit oprávnÄ›ní k \"$file_to_create\"." #, fuzzy #~ msgid "Compressor $compress requires $gzip." #~ msgstr "Komprese $compress vyžaduje $bzip." #~ msgid "Compressor $compress requires $bzip." #~ msgstr "Komprese $compress vyžaduje $bzip." #~ msgid "CDROM burning requires $cdrecord, aborting." #~ msgstr "Vypalování CD vyžaduje $cdrecord, konÄím." #~ msgid "Not in interactive mode, cannot follow." #~ msgstr "Nejsem v interaktivním režimu, nemohu následovat." #~ msgid "totoototo" #~ msgstr "tutůtutu" #~ msgid "During the tarballs generation, $nb_err error(s) occurred." #~ msgstr "BÄ›hem vytváření tar archivů se vyskytly chyby (celkem $nb_err)." #~ msgid "7z blacklist are not well supported..." #~ msgstr "Blacklisty 7z nejsou podporovány zrovna nejlépe..." #~ msgid "unable to exec $remote_command; check $logfile" #~ msgstr "Nemohu spustit $remote_command, zkontrolujte $logfile" #~ msgid "Unable to unmount the device $device" #~ msgstr "Nemohu odpojit zařízení $device" #~ msgid "backup-manager must be run as root." #~ msgstr "backup-manager musí být spuÅ¡tÄ›n pod uživatelem root." #~ msgid "The BM_TARBALL_DIRECTORIES conf key is not set in $conffile" #~ msgstr "KonfiguraÄní klÃ­Ä BM_TARBALL_DIRECTORIES není v $conffile nastaven" #~ msgid "Entering directory $file" #~ msgstr "Vstupuji do adresáře $file" #~ msgid "Unable to call backup-manager-upload." #~ msgstr "Nemohu zavolat backup-manager-upload." #~ msgid "$command ended, but $file_to_create not found; check $logfile" #~ msgstr "" #~ "$command skonÄil, ale $file_to_create nebyl nalezen; zkontrolujte $logfile" #~ msgid "Using method \"$BM_ARCHIVE_METHOD\"" #~ msgstr "Používám metodu \"$BM_ARCHIVE_METHOD\"" #~ msgid "Unable to mount $BM_BURNING_DEVICE on $mount_point." #~ msgstr "Nemohu pÅ™ipojit $BM_BURNING_DEVICE na $mount_point." #~ msgid "" #~ "$BM_BURNING_DEVICE is mounted, unmounting before the burning session." #~ msgstr "$BM_BURNING_DEVICE je pÅ™ipojeno, pÅ™ed vypalováním odpojuji." #~ msgid "unable to unmount $mount_point" #~ msgstr "nemohu odpojit $mount_point" #~ msgid "unable to remove $mount_point" #~ msgstr "nemohu odstranit $mount_point" #~ msgid "unable to call backup-manager-upload" #~ msgstr "nemohu zavolat backup-manager-upload" #~ msgid "Mounting $BM_BURNING_DEVICE: " #~ msgstr "PÅ™ipojuji $BM_BURNING_DEVICE: " #~ msgid "The burning system is disabled in the conf file." #~ msgstr "Vypalovací systém je v konfiguraÄním souboru zakázán." #~ msgid "The upload system is disabled in the conf file." #~ msgstr "Nahrávání na vzdálený poÄítaÄ je v konfiguraÄním souboru zakázáno." #~ msgid "unable to purge duplicates" #~ msgstr "nemohu smazat duplikáty" #~ msgid "Need a key to use rsync" #~ msgstr "Pro použití programu rsync potÅ™ebuji klíÄ" #~ msgid "Unable to dump the content of the database $database" #~ msgstr "Nemohu vysypat obsah databáze $database" #~ msgid "Unable to bzip2 $file_to_create" #~ msgstr "Nemohu vytvoÅ™it bzip2 $file_to_create" #~ msgid "This compression format is not supported: $BM_MYSQL_FILETYPE" #~ msgstr "Tento kompresní formát není podporován: $BM_MYSQL_FILETYPE" #~ msgid "backup_method_pipe is not yet supported" #~ msgstr "backup_method_pipe zatím není podporována" #~ msgid "Unmounting $BM_BURNING_DEVICE: " #~ msgstr "Odpojuji $BM_BURNING_DEVICE: " #~ msgid "Removing $mount_point: " #~ msgstr "Odstraňuji $mount_point: " #~ msgid "" #~ "The configuration key BM_UPLOAD_PASSWD is not set but BM_UPLOAD_MODE is " #~ "set to \"ftp\"." #~ msgstr "" #~ "KonfiguraÄní klÃ­Ä BM_UPLOAD_PASSWD není nastaven, ale BM_UPLOAD_MODE je " #~ "nastaven na \"ftp\"." #~ msgid "" #~ "Please set the BM_BURNING_MEDIA conf key in $conffile, I assume you want " #~ "'cdrom'" #~ msgstr "" #~ "V souboru $conffile nastavte prosím konfiguraÄní klÃ­Ä BM_BURNING_MEDIA, " #~ "pÅ™edpokládám, že chcete použít 'cdrom'" #~ msgid "" #~ "Please set the BM_BURNING_DEVICE conf key in $conffile, I assume you want " #~ "'/dev/cdrom'" #~ msgstr "" #~ "V souboru $conffile nastavte prosím konfiguraÄní klÃ­Ä BM_BURNING_DEVICE, " #~ "pÅ™edpokládám, že chcete použít '/dev/cdrom'" #~ msgid "" #~ "Please set the BM_BURNING_METHOD conf key in $conffile, I assume you want " #~ "'CDRW'" #~ msgstr "" #~ "V souboru $conffile nastavte prosím konfiguraÄní klÃ­Ä BM_BURNING_METHOD, " #~ "pÅ™edpokládám, že chcete použít 'CDRW'" #~ msgid "" #~ "Please set the BM_BURNING_MAXSIZE conf key in $conffile, I assume you " #~ "want '650'" #~ msgstr "" #~ "V souboru $conffile nastavte prosím konfiguraÄní klÃ­Ä BM_BURNING_MAXSIZE, " #~ "pÅ™edpokládám, že chcete použít '650'" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/po/vi.po��������������������������������������������������������������������0000644�0001750�0001750�00000071553�11503702461�015455� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Vietnamese translation for Backup Manager. # Copyright © 2006 Free Software Foundation, Inc. # Clytie Siddall <clytie@riverland.net.au>, 2005-2006. # msgid "" msgstr "" "Project-Id-Version: backup-manager 0.7.10\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-07-15 20:27+0200\n" "PO-Revision-Date: 2010-12-02 21:02+0100\n" "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n" "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: LocFactoryEditor 1.6fc1\n" #: ../lib/actions.sh:44 msgid "No backup method used." msgstr "Chưa dùng phương pháp sao lưu." #: ../lib/actions.sh:47 #, sh-format msgid "No such backup method: $BM_ARCHIVE_METHOD" msgstr "Không có phương pháp sao lưu như vậy: $BM_ARCHIVE_METHOD" #: ../lib/actions.sh:56 #, sh-format msgid "Unable to change the owner of \"$md5file\"." msgstr "Không thể thay đổi ngưá»i sở hữu tập tin « $md5file »." #: ../lib/actions.sh:58 #, sh-format msgid "Unable to change file permissions of \"$md5file\"." msgstr "Không thể thay đổi quyá»n hạn cá»§a tập tin « $md5file »." #: ../lib/actions.sh:90 msgid "No upload method used." msgstr "Chưa dùng phương pháp tải lên." #: ../lib/actions.sh:93 #, sh-format msgid "The upload method \"$method\" is not supported; skipping." msgstr "Không há»— trợ phương pháp tải lên « $method » nên bá» qua." #: ../lib/actions.sh:105 #, sh-format msgid "Cleaning $BM_REPOSITORY_ROOT" msgstr "Äang xóa sạch « $BM_REPOSITORY_ROOT »" #: ../lib/actions.sh:118 #, sh-format msgid "Running pre-command: $BM_PRE_BACKUP_COMMAND." msgstr "Äang chạy tiá»n lệnh: $BM_PRE_BACKUP_COMMAND." #: ../lib/actions.sh:122 msgid "Pre-command failed. Stopping the process." msgstr "Tiá»n lệnh bị lá»—i nên ngừng tiến trình." #: ../lib/actions.sh:127 #, sh-format msgid "Pre-command returned: \"$RET\" (success)." msgstr "Tiá»n lệnh đã trả lại: « $RET » (thành công)." #: ../lib/actions.sh:139 #, sh-format msgid "Running post-command: $BM_POST_BACKUP_COMMAND" msgstr "Äang chạy hậu lệnh: $BM_POST_BACKUP_COMMAND" #: ../lib/actions.sh:143 msgid "Post-command failed." msgstr "Hậu lệnh bị lá»—i." #: ../lib/actions.sh:148 #, sh-format msgid "Post-command returned: \"$RET\" (success)." msgstr "Hậu lệnh đã trả lại: « $RET » (thành công)." #: ../lib/actions.sh:180 msgid "The BM_TARBALL_FILETYPE conf key is set to \"zip\" but zip is not installed." msgstr "Khóa cấu hình « BM_TARBALL_FILETYPE » được đặt thành « zip » nhưng chưa cài đặt phần má»m zip." #: ../lib/actions.sh:185 msgid "The BM_TARBALL_FILETYPE conf key is set to \"bzip2\" but bzip2 is not installed." msgstr "Khóa cấu hình « BM_TARBALL_FILETYPE » được đặt thành « bzip » nhưng chưa cài đặt phần má»m bzip." #: ../lib/actions.sh:190 msgid "The BM_TARBALL_FILETYPE conf key is set to \"dar\" but dar is not installed." msgstr "Khóa cấu hình « BM_TARBALL_FILETYPE » được đặt thành « dar » nhưng chưa cài đặt phần má»m dar." #: ../lib/actions.sh:202 #, sh-format msgid "The repository $BM_REPOSITORY_ROOT does not exist, creating it." msgstr "Không có kho « $BM_REPOSITORY_ROOT » nên Ä‘ang tạo nó." #: ../lib/backup-methods.sh:26 #, sh-format msgid "$file_to_create: ok (${size}M," msgstr "$file_to_create: được (${size}M," #: ../lib/backup-methods.sh:54 #, sh-format msgid "Unable to purge duplicates of $file_to_create" msgstr "Không thể tẩy các bản sao cá»§a tập tin « $file_to_create »" #: ../lib/backup-methods.sh:65 #, fuzzy, sh-format msgid "Unable to change the owner of \"$file\"." msgstr "Không thể thay đổi ngưá»i sở hữu tập tin « $md5file »." #: ../lib/backup-methods.sh:67 #, fuzzy, sh-format msgid "Unable to change file permissions of \"$file\"." msgstr "Không thể thay đổi quyá»n hạn cá»§a tập tin « $md5file »." #: ../lib/backup-methods.sh:78 #, fuzzy msgid "Warning, process interrupted." msgstr "Cảnh báo : tiến trình bị ngắt thì kho có thể bị há»ng." #: ../lib/backup-methods.sh:82 #, fuzzy, sh-format msgid "Removing archive \"$bm_pending_archive\" (build interrupted)." msgstr "Äang gỡ bá» kho nén « $archive »." #: ../lib/backup-methods.sh:88 #, sh-format msgid "Restoring incremental-building details list: \"$bm_pending_incremental_list\"." msgstr "" #: ../lib/backup-methods.sh:124 #, sh-format msgid "Unable to create \"$target\", check $logfile" msgstr "Không thể tạo đích « $target », hãy kiểm tra lại tập tin bản ghi « $logfile »" #: ../lib/backup-methods.sh:140 #, sh-format msgid "File $file_to_create already exists, skipping." msgstr "Tập tin « $file_to_create » đã có nên bá» qua." #: ../lib/backup-methods.sh:151 msgid "gzip is not installed but gzip compression needed." msgstr "" #: ../lib/backup-methods.sh:159 msgid "bzip2 is not installed but bzip2 compression needed." msgstr "" #: ../lib/backup-methods.sh:177 #: ../lib/backup-methods.sh:201 #, sh-format msgid "Unable to exec $command; check $logfile" msgstr "Không thể thá»±c hiện lệnh « $command »; hãy kiểm tra lại tập tin bản ghi « $logfile »" #: ../lib/backup-methods.sh:183 #, fuzzy, sh-format msgid "Compressor $compress is needed." msgstr "Bá»™ nén « $compress » cần thiết $gzip." #: ../lib/backup-methods.sh:208 #, sh-format msgid "No such compressor supported: $compress." msgstr "Không há»— trợ bá»™ nén như vậy: $compress." #: ../lib/backup-methods.sh:214 #, sh-format msgid "Unable to find $file_to_create" msgstr "Không tìm thấy tập tin « $file_to_create »" #: ../lib/backup-methods.sh:342 msgid "No frequency given, set BM_TARBALLINC_MASTERDATETYPE." msgstr "Chưa nhập tần số, đặt $BM_TARBALLINC_MASTERDATETYPE" #: ../lib/backup-methods.sh:353 #, sh-format msgid "Unknown frequency: $BM_TARBALLINC_MASTERDATETYPE" msgstr "Không biết tần số : $BM_TARBALLINC_MASTERDATETYPE" #: ../lib/backup-methods.sh:386 #, sh-format msgid "Building master backup for target: \"$dir_name\"." msgstr "Äang xây dá»±ng bản sao lưu chính cho đích: « $dir_name »." #: ../lib/backup-methods.sh:515 msgid "Tar reported a file changed during archive creation." msgstr "" #: ../lib/backup-methods.sh:526 msgid "Dar reported a file changed during archive creation." msgstr "" #: ../lib/backup-methods.sh:564 #, sh-format msgid "The archive type \"tar.bz2\" depends on the tool \"$bzip\"." msgstr "Kiểu kho nén « tar.bz2 » phụ thuá»™c vào công cụ « $bzip »." #: ../lib/backup-methods.sh:571 #, sh-format msgid "The archive type \"tar.lz\" depends on the tool \"$lzma\"." msgstr "Kiểu kho nén « tar.lz » phụ thuá»™c vào công cụ « $lzma »." #: ../lib/backup-methods.sh:578 #, sh-format msgid "The archive type \"zip\" depends on the tool \"$zip\"." msgstr "Kiểu kho nén « zip » phụ thuá»™c vào công cụ « $zip »." #: ../lib/backup-methods.sh:584 #, sh-format msgid "The archive type \"dar\" depends on the tool \"$dar\"." msgstr "Kiểu kho nén « dar » phụ thuá»™c vào công cụ « $dar »." #: ../lib/backup-methods.sh:590 #: ../lib/backup-methods.sh:677 #: ../lib/backup-methods.sh:723 #, sh-format msgid "The archive type \"$BM_TARBALL_FILETYPE\" is not supported." msgstr "Không há»— trợ kiểu kho nén « $BM_TARBALL_FILETYPE »." #: ../lib/backup-methods.sh:651 msgid "The configuration variable \"BM_ENCRYPTION_RECIPIENT\" must be defined." msgstr "Phải xác định biến cấu hình « $BM_ENCRYPTION_RECIPIENT »." #: ../lib/backup-methods.sh:657 #, sh-format msgid "The encryption is not yet possible with \"$BM_TARBALL_FILETYPE\" archives." msgstr "Chưa có khả năng mật mã hoá kho nén kiểu « $BM_TARBALL_FILETYPE »." #: ../lib/backup-methods.sh:695 #, sh-format msgid "The program \"$gpg\" is needed." msgstr "Cần thiết chương trình « $gpg »." #: ../lib/backup-methods.sh:704 #: ../lib/backup-methods.sh:737 #, sh-format msgid "File $file_to_check already exists, skipping." msgstr "Tập tin « $file_to_check » đã có nên bá» qua." #: ../lib/backup-methods.sh:769 #, fuzzy, sh-format msgid "Target \"$t\" is found in blacklist, skipping." msgstr "Không có đích « $t » nên bá» qua." #: ../lib/backup-methods.sh:773 #, sh-format msgid "Target \"$t\" does not exist, skipping." msgstr "Không có đích « $t » nên bá» qua." #: ../lib/backup-methods.sh:849 #: ../lib/backup-methods.sh:888 #: ../lib/backup-methods.sh:938 #: ../lib/backup-methods.sh:962 #, sh-format msgid "Using method \"$method\"." msgstr "Äang dùng phương pháp « $method »." #: ../lib/backup-methods.sh:875 msgid "1 error occurred during the tarball generation." msgstr "Gặp 1 lá»—i trong tiến trình tạo ra kho nén « .tar »." #: ../lib/backup-methods.sh:877 #, sh-format msgid "$nb_err errors occurred during the tarball generation." msgstr "Gặp $nb_err lá»—i trong tiến trình tạo ra kho nén « .tar »." #: ../lib/backup-methods.sh:890 #, sh-format msgid "The \"mysql\" method is chosen, but $mysqldump is not found." msgstr "Phương pháp « mysql » đã chá»n còn không tìm thấy $mysqldump." #: ../lib/backup-methods.sh:900 #, sh-format msgid "Using existing MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:904 #, sh-format msgid "Creating a default MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:928 #, sh-format msgid "Removing default MySQL client configuration file: $mysql_conffile" msgstr "" #: ../lib/backup-methods.sh:940 #, sh-format msgid "The \"svn\" method is chosen, but $svnadmin is not found." msgstr "Phương pháp « svn » đã chá»n còn không tìm thấy $svnadmin." #: ../lib/backup-methods.sh:946 #, sh-format msgid "SVN repository \"$repository\" is not valid; skipping." msgstr "Kho SVN « $repository » không hợp lệ nên bá» qua." #: ../lib/backup-methods.sh:971 #, sh-format msgid "Not enough args for this archive ($archive), skipping." msgstr "Không đủ đối số cho kho này ($archive) nên bá» qua." #: ../lib/backup-methods.sh:978 msgid "Cannot create archive." msgstr "Không thể tạo kho." #: ../lib/burning-methods.sh:37 #, sh-format msgid "Device \"/dev/$device\" is mounted on \"$m\", unmounting it." msgstr "Thiết bị « /dev/$device » được lắp vào « $m » nên Ä‘ang tháo lắp nó." #: ../lib/burning-methods.sh:53 #, sh-format msgid "MD5 checkup is only performed on disks. Please set the BM_BURNING_DEVICE in $conffile" msgstr "Việc tổng kiểm MD5 được thá»±c hiện chỉ trên đĩa. Hãy đặt giá trị thiết bị ghi « BM_BURNING_DEVICE » trong tập tin cấu hình « $conffile »" #: ../lib/burning-methods.sh:59 #, sh-format msgid "The mount point $mount_point is not there." msgstr "Không có Ä‘iểm lắp « $mount_point »." #: ../lib/burning-methods.sh:66 #, sh-format msgid "Mounting $BM_BURNING_DEVICE on $mount_point." msgstr "Äang lắp thiết bị ghi « $BM_BURNING_DEVICE » vào Ä‘iểm lắp « $mount_point »." #: ../lib/burning-methods.sh:90 #, sh-format msgid "Checking MD5 sum for $base_file:" msgstr "Äang kiểm tra tổng MD5 cho tập tin cÆ¡ bản « $base_file »:" #: ../lib/burning-methods.sh:109 #, sh-format msgid "$str ok." msgstr "$str được." #: ../lib/burning-methods.sh:112 #, sh-format msgid "$str failed (read error)." msgstr "$str bị lá»—i (lá»—i Ä‘á»c)." #: ../lib/burning-methods.sh:116 #, sh-format msgid "$str failed (MD5 hash mismatch)." msgstr "$str bị lá»—i (tổng MD5 sai khá»›p)." #: ../lib/burning-methods.sh:123 msgid "Errors encountered during MD5 checks." msgstr "Gặp lá»—i trong các việc kiểm tra kiểu MD5." #: ../lib/burning-methods.sh:127 #, sh-format msgid "Unable to unmount the mount point $mount_point" msgstr "Không thể tháo lắp Ä‘iểm lắp « $mount_point »" #: ../lib/burning-methods.sh:128 #, sh-format msgid "Unable to remove the mount point $mount_point" msgstr "Không thể gỡ bá» Ä‘iểm lắp « $mount_point »" #: ../lib/burning-methods.sh:147 msgid "No burning method used." msgstr "Chưa dùng phương pháp ghi." #: ../lib/burning-methods.sh:171 #, sh-format msgid "Number of files to burn: $nb_file." msgstr "Số tập tin cần ghi: $nb_file." #: ../lib/burning-methods.sh:173 #, sh-format msgid "Nothing to burn for the $BM__BURNING_DATE, try the '--burn <date>' switch." msgstr "Không có gì cần ghi vào ngày $BM__BURNING_DATE, hãy thá»­ cái chuyển « --burn <ngày> »." #: ../lib/burning-methods.sh:202 #: ../lib/burning-methods.sh:227 #, sh-format msgid "Burning archives of $BM__BURNING_DATE." msgstr "Äang ghi các kho cá»§a ngày $BM__BURNING_DATE." #: ../lib/burning-methods.sh:207 #, sh-format msgid "Cannot burn archives of the $BM__BURNING_DATE, too big: ${size}M, must fit in $BM_BURNING_MAXSIZE" msgstr "Không thể ghi các kho cá»§a ngày $BM__BURNING_DATE vì quá lá»›n: ${size}M phải vừa trong vùng $BM_BURNING_MAXSIZE" #: ../lib/burning-methods.sh:231 msgid "Burning the whole archives." msgstr "Äang ghi toàn bá»™ kho." #: ../lib/burning-methods.sh:236 #, sh-format msgid "Trying to burn $BM_REPOSITORY_ROOT ($size MB) in interactive mode." msgstr "Äang thá»­ ghi « $BM_REPOSITORY_ROOT » ($size MB) trong chế độ tương tác." #: ../lib/burning-methods.sh:267 #, sh-format msgid "Redirecting burning logs into $logfile" msgstr "Äang chuyển hướng các bản ghi vá» ghi dữ liệu sang tập tin bản ghi « $logfile »" #: ../lib/burning-methods.sh:272 #, sh-format msgid "Forcing dev=${BM_BURNING_DEVFORCED} for cdrecord commands." msgstr "Äang buá»™c giá trị « dev=${BM_BURNING_DEVFORCED} » cho các lệnh cdrecord (ghi vào đĩa CD)." #: ../lib/burning-methods.sh:280 #, sh-format msgid "DVD+R(W) burning requires $growisofs, aborting." msgstr "Việc ghi vào đĩa DVD+R(W) cần thiết « $growisofs » nên há»§y bá»." #: ../lib/burning-methods.sh:283 #, sh-format msgid "Exporting archives to the DVD+R(W) disc in $BM_BURNING_DEVICE." msgstr "Äang xuất khẩu các kho vào đĩa DVD+R(W) trong thiết bị ghi $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:287 #: ../lib/burning-methods.sh:307 #: ../lib/burning-methods.sh:319 #: ../lib/burning-methods.sh:325 #: ../lib/burning-methods.sh:338 #, sh-format msgid "failed, check $logfile" msgstr "bị lá»—i, hãy kiểm tra xem bản ghi « $logfile »" #: ../lib/burning-methods.sh:292 #, sh-format msgid "DVD-R(W) burning requires $growisofs, aborting." msgstr "Việc ghi vào đĩa DVD-R(W) cần thiết « $growisofs » nên há»§y bá»." #: ../lib/burning-methods.sh:295 #, sh-format msgid "DVD-R(W) burning requires $dvdrwformat, aborting." msgstr "Việc ghi vào đĩa DVD-R(W) cần thiết « $dvdrwformat » nên há»§y bá»." #: ../lib/burning-methods.sh:298 #, sh-format msgid "Blanking the DVD-R(W) disc in $BM_BURNING_DEVICE" msgstr "Äang xóa trắng đĩa DVD-R(W) trong thiết bị ghi $BM_BURNING_DEVICE" #: ../lib/burning-methods.sh:302 #, sh-format msgid "Unable to blank the DVD-R(W) disc (check $logfile)." msgstr "Không thể xoá trắng đĩa DVD-R(W), hãy kiểm tra lại tập tin bản ghi « $logfile »." #: ../lib/burning-methods.sh:304 #, sh-format msgid "Exporting archives to the DVD-R(W) disc in $BM_BURNING_DEVICE." msgstr "Äang xuất khẩu các kho vào đĩa DVD-R(W) trong thiết bị ghi $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:312 #: ../lib/burning-methods.sh:330 #, sh-format msgid "CD-R(W) burning requires $cdrecord, aborting." msgstr "Việc ghi vào đĩa CD-R(W) cần thiết « $cdrecord » nên há»§y bá»." #: ../lib/burning-methods.sh:315 #, sh-format msgid "Blanking the CDRW in $BM_BURNING_DEVICE." msgstr "Äang xóa trắng đĩa CD-RW trong thiết bị ghi $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:321 #: ../lib/burning-methods.sh:333 #, sh-format msgid "Burning data to $BM_BURNING_DEVICE." msgstr "Äang ghi dữ liệu vào $BM_BURNING_DEVICE." #: ../lib/burning-methods.sh:342 msgid "Nothing to burn." msgstr "Không có gì cần ghi." #: ../lib/burning-methods.sh:346 #, sh-format msgid "The requested burning method is not supported, check BM_BURNING_METHOD in $conffile" msgstr "Không há»— trợ phương pháp ghi đã yêu cầu: hãy kiểm tra lại « BM_BURNING_METHOD » trong tập tin cấu hình « $conffile »" #: ../lib/burning-methods.sh:402 #, sh-format msgid "Not burning $file because it does not fit in the disk." msgstr "Không Ä‘ang ghi tập tin « $file » vì không đủ chá»— còn lại trên đĩa." #: ../lib/burning-methods.sh:443 #, sh-format msgid "No such index file: \"$index_file\"." msgstr "Không có tập tin chỉ mục như vậy: « $index_file »." #: ../lib/burning-methods.sh:485 msgid "The burning process will need one disk." msgstr "Tiến trình ghi sẽ cần có má»™t đĩa." #: ../lib/burning-methods.sh:487 #, sh-format msgid "The burning process will need $number_of_indexes disks." msgstr "Tiến trình ghi sẽ cần có $number_of_indexes đĩa." #: ../lib/burning-methods.sh:499 #, sh-format msgid "Burning content of $index" msgstr "Äang ghi ná»™i dung cá»§a « $index »" #: ../lib/dialog.sh:27 msgid "Output:" msgstr "Kết xuất:" #: ../lib/dialog.sh:28 msgid "Print this short help message." msgstr "Hiển thị trợ giúp ngắn này." #: ../lib/dialog.sh:29 msgid "Print version number." msgstr "" #: ../lib/dialog.sh:30 msgid "Print what happens on STDOUT." msgstr "In ra thiết bị xuất chuẩn." #: ../lib/dialog.sh:31 #, fuzzy msgid "Print debug messages on STDOUT." msgstr "In ra thiết bị xuất chuẩn." #: ../lib/dialog.sh:32 msgid "Disable warnings." msgstr "Tắt má»i cảnh báo." #: ../lib/dialog.sh:35 msgid "Single actions:" msgstr "Hành động đơn:" #: ../lib/dialog.sh:36 msgid "Just upload the files of the day." msgstr "Tải lên chỉ những tập tin cá»§a hôm nay." #: ../lib/dialog.sh:37 msgid "Just burn the files of the day." msgstr "Ghi chỉ những tập tin cá»§a hôm nay." #: ../lib/dialog.sh:38 msgid "Just test the md5 sums." msgstr "Kiểm tra chỉ tổng MD5." #: ../lib/dialog.sh:39 msgid "Just purge old archives." msgstr "Tẩy chỉ các kho cÅ©." #: ../lib/dialog.sh:42 msgid "Behaviour:" msgstr "Ứng xá»­ :" #: ../lib/dialog.sh:43 msgid "Choose an alternate config file." msgstr "Chá»n tập tin cấu hình thay thế." #: ../lib/dialog.sh:44 msgid "Force overwrite of existing archives." msgstr "Buá»™c ghi đè lên các kho đã có." #: ../lib/dialog.sh:47 msgid "Unwanted actions:" msgstr "Hành động vô ích:" #: ../lib/dialog.sh:48 msgid "Disable the upload process." msgstr "Tắt tiến trình tải lên." #: ../lib/dialog.sh:49 msgid "Disable the burning process." msgstr "Tắt tiến trình ghi." #: ../lib/dialog.sh:50 msgid "Disable the purge process." msgstr "Tắt tiến trình tẩy." #: ../lib/dialog.sh:64 #: ../lib/dialog.sh:83 msgid "Not in interactive mode, cannot continue." msgstr "Không phải trong chế độ tương tác nên không thể tiếp tục." #: ../lib/files.sh:79 #: ../lib/files.sh:94 msgid "No path given." msgstr "Chưa nhập đưá»ng dẫn." #: ../lib/files.sh:169 #, sh-format msgid "Removing lock for old PID, $pid is not running." msgstr "Äang gỡ bá» khóa cho PID cÅ©, tiến trình số $pid không Ä‘ang chạy." #: ../lib/files.sh:179 #, sh-format msgid "A backup-manager process ($pid) is already running with the conffile $conffile" msgstr "Má»™t tiến trình backup-manager ($pid) Ä‘ang chạy vá»›i tập tin cấu hình « $conffile »." #: ../lib/files.sh:183 #: ../lib/files.sh:189 #, sh-format msgid "Getting lock for backup-manager $pid with $conffile" msgstr "Äang lấy khóa cho backup-manager $pid vá»›i tập tin cấu hình « $conffile »" #: ../lib/files.sh:192 msgid "failed (check the file permissions)." msgstr "bị lá»—i (hãy kiểm tra lại quyá»n hạn tập tin)." #: ../lib/files.sh:280 #, sh-format msgid "$file is not a regular file." msgstr "$file không phải là tập tin chuẩn." #: ../lib/files.sh:305 #, sh-format msgid "Removing obsolete master backup: \"$file\"." msgstr "Äang gỡ bá» bản sao lưu chính cÅ© : « $file »." #: ../lib/files.sh:313 #, sh-format msgid "Removing obsolete master backup (isolated): \"$file\"." msgstr "Äang gỡ bá» bản sao lưu chính cÅ© (cô lập): « $file »." #: ../lib/files.sh:320 #, sh-format msgid "Removing archive \"$file\"." msgstr "Äang gỡ bá» kho nén « $file »." #: ../lib/files.sh:342 msgid "Directory given was not found." msgstr "Không tìm thấy thư mục đã cho." #: ../lib/files.sh:363 #, sh-format msgid "Removing archive \"$archive\"." msgstr "Äang gỡ bá» kho nén « $archive »." #: ../lib/files.sh:387 #, sh-format msgid "The given file does not exist: $file_to_create" msgstr "Không có tập tin đã cho : $file_to_create" #: ../lib/files.sh:392 msgid "No file given." msgstr "Chưa nhập tập tin." #: ../lib/files.sh:397 #: ../lib/files.sh:399 #: ../lib/files.sh:413 msgid "Unable to get date from file." msgstr "Không thể lấy ngày tháng từ tập tin." #: ../lib/files.sh:403 msgid "Unable to find the pattern of the file." msgstr "Không tìm thấy mẫu cá»§a tập tin." #: ../lib/files.sh:419 #, sh-format msgid "Unable to find the md5 hash of file \"$file\" in file \"$md5file\"." msgstr "Không tìm thấy tổng MD5 cá»§a tập tin « $file » trong tập tin « $md5file »." #: ../lib/files.sh:425 #, sh-format msgid "$file is a duplicate of $file_to_create (using symlink)." msgstr "Tập tin « $file » là bản sao cá»§a tập tin « $file_to_create » (dùng liên kết tượng trưng)." #: ../lib/logger.sh:144 #: ../backup-manager:257 msgid "Unable to exec post-command." msgstr "Không thể thá»±c hiện hậu lệnh." #: ../lib/logger.sh:146 msgid "Releasing lock" msgstr "Äang nhả khóa" #: ../lib/md5sum.sh:30 msgid "Internal error: bad usage of function get_md5sum_from_file()" msgstr "Lá»—i ná»™i bá»™ : dùng sai hàm « get_md5sum_from_file() »" #: ../lib/md5sum.sh:34 #, sh-format msgid "No md5file found: $md5file" msgstr "Không tìm thấy tập tin MD5: $md5file" #: ../lib/md5sum.sh:82 #, sh-format msgid "Archive given does not exist in the repository: $archive" msgstr "Kho nén đã cho không nằm trong kho lưu: $archive" #: ../lib/sanitize.sh:32 #, sh-format msgid "The configuration key $key is not set, using \"$default\"." msgstr "Chưa đặt khóa cấu hình « $key » nên dùng mặc định « $default »." #: ../lib/sanitize.sh:43 #, sh-format msgid "The configuration key \"$deprecated_key\" is deprecated, you should rename it \"$new_key\". Using \"$deprecated_value\"." msgstr "Khóa cấu hình « $deprecated_key » bị phản đối nên bạn hãy thay đổi tên nó thành « $new_key ». Như thế thì Ä‘ang sá»­ dụng « $deprecated_value »." #: ../lib/sanitize.sh:84 #, sh-format msgid "The configuration key $key is not set but $keymandatory is enabled." msgstr "Khóa cấu hình « $key » chưa được đặt còn « $keymandatory » đã được bật." #: ../lib/sanitize.sh:100 #, sh-format msgid "Deprecated boolean, $key is set to \"yes\", setting \"true\" instead." msgstr "Biểu thá»±c bun bị phản đối, khóa « $key » được lập thành « yes » (có) nên lập nó thành « true » (đúng) thay thế." #: ../lib/sanitize.sh:105 #, sh-format msgid "Deprecated boolean, $key is set to \"no\", setting \"false\" instead." msgstr "Biểu thá»±c bun bị phản đối, khóa « $key » được lập thành « nó » (không) nên lập nó thành « false » (sai) thay thế." #: ../lib/sanitize.sh:128 #, sh-format msgid "Unable to create BM_TEMP_DIR: \"$BM_TEMP_DIR\"." msgstr "" #: ../lib/sanitize.sh:166 msgid "BM_TARBALLINC_MASTERDATEVALUE should not be greater than 6, falling back to 0" msgstr "" #: ../lib/sanitize.sh:276 #, sh-format msgid "When validating the configuration file $conffile, $nb_warnings warnings were found." msgstr "Gặp $nb_warnings cảnh báo khi hợp lệ hóa tập tin cấu hình « $conffile »." #: ../lib/upload-methods.sh:38 msgid "Using the upload method \"ssh\"." msgstr "Äang dùng phương pháp tải lên « ssh »." #: ../lib/upload-methods.sh:47 #: ../lib/upload-methods.sh:85 msgid "No valid destination found, SSH upload not possible." msgstr "Không tìm thấy đích hợp lệ nên không thể tải lên bằng SSH." #: ../lib/upload-methods.sh:68 #, sh-format msgid "Error reported by backup-manager-upload for method \"scp\", check \"$logfile\"." msgstr "Lá»—i được thông báo bởi tiến trình tải lên « backup-manager-upload » đối vá»›i phương pháp « scp », hãy kiểm tra tập tin bản ghi « $logfile »." #: ../lib/upload-methods.sh:76 msgid "Using the upload method \"ssh-gpg\"." msgstr "Äang dùng phương pháp tải lên « ssh-gpg »." #: ../lib/upload-methods.sh:88 msgid "No gpg recipient given. Argument is mandatory if upload method ssh-gpg is used." msgstr "Chưa nhập ngưá»i nhận gpg. Äối số bắt buá»™c phải nhập nếu phương pháp tải lên « ssh-gpg » được dùng." #: ../lib/upload-methods.sh:105 #, sh-format msgid "Error reported by backup-manager-upload for method \"ssh-gpg\", check \"$logfile\"." msgstr "Lá»—i được thông báo bởi tiến trình tải lên « backup-manager-upload » đối vá»›i phương pháp « ssh-gpg », hãy kiểm tra tập tin bản ghi « $logfile »." #: ../lib/upload-methods.sh:112 msgid "Using the upload method \"ftp\"." msgstr "Äang dùng phương pháp tải lên « ftp »." #: ../lib/upload-methods.sh:122 msgid "No valid destination found, FTP upload not possible." msgstr "Không tìm thấy đích hợp lệ nên không thể tải lên bằng FTP." #: ../lib/upload-methods.sh:138 #, sh-format msgid "Error reported by backup-manager-upload for method \"ftp\", check \"$logfile\"." msgstr "Lá»—i được thông báo bởi tiến trình tải lên « backup-manager-upload » đối vá»›i phương pháp « ftp », hãy kiểm tra tập tin bản ghi « $logfile »." #: ../lib/upload-methods.sh:146 msgid "Using the upload method \"S3\"." msgstr "Äang dùng phương pháp tải lên « S3 »." #: ../lib/upload-methods.sh:168 #, sh-format msgid "Error reported by backup-manager-upload for method \"s3\", check \"$logfile\"." msgstr "Lá»—i được thông báo bởi tiến trình tải lên « backup-manager-upload » đối vá»›i phương pháp « s3 », hãy kiểm tra tập tin bản ghi « $logfile »." #: ../lib/upload-methods.sh:174 #, sh-format msgid "Uploading $directory to ${host}:${BM_UPLOAD_RSYNC_DESTINATION}" msgstr "Äang tải thư mục « $directory » lên máy « ${host} »:${BM_UPLOAD_RSYNC_DESTINATION}" #: ../lib/upload-methods.sh:185 msgid "Need a key to use rsync (set BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY)." msgstr "Cần thiết khóa để chạy tiến trình đồng bá»™ hoá rsync (đặt « BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY »)" #: ../lib/upload-methods.sh:196 #, sh-format msgid "Upload of $directory with rsync failed; check $logfile." msgstr "Lá»—i tải lên thư mục « $directory » bằng rsync; hãy kiểm tra lại tập tin bản ghi « $logfile »." #: ../lib/upload-methods.sh:215 msgid "No valid destination found, RSYNC upload not possible." msgstr "Không tìm thấy đích hợp lệ nên không thể tải lên bằng RSYNC." #: ../lib/upload-methods.sh:234 msgid "No hosts given to the rsync method, set BM_UPLOAD_RSYNC_HOSTS." msgstr "Chưa xác định máy đối vá»›i phương pháp rsync, hãy đặt « BM_UPLOAD_RSYNC_HOSTS »." #: ../lib/upload-methods.sh:241 msgid "Using the upload method \"rsync\"." msgstr "Äang dùng phương pháp tải lên « rsync »." #: ../lib/upload-methods.sh:248 msgid "Using the upload method \"rsync-snapshots\"." msgstr "Äang dùng phương pháp tải lên « rsync-snapshots »." #: ../backup-manager:127 msgid "The -b option must be followed by a valid date (YYYYMMDD)." msgstr "Tùy chá»n « -b » phải có má»™t ngày tháng hợp lệ theo sau (NNNNTTnn)." #: ../backup-manager:162 msgid "The -c option must be followed by an existing filename." msgstr "Tùy chá»n « -c » phải có má»™t tên tập tin tồn tại theo sau." #: ../backup-manager:202 msgid "Unable to exec the pre-command" msgstr "Không thể thá»±c hiện tiá»n lệnh" #~ msgid "Internal error: wrong call to bm_merge_incremental_backups()." #~ msgstr "Lá»—i ná»™i bá»™ : cuá»™c gá»i sai cho « bm_merge_incremental_backups() »." #~ msgid "Unable to change the owner of \"$file_to_create\"." #~ msgstr "Không thể thay đổi ngưá»i sở hữu tập tin « $file_to_create »." #~ msgid "Unable to change file permissions of \"$file_to_create\"." #~ msgstr "Không thể thay đổi quyá»n hạn cá»§a tập tin « $file_to_create »." #, fuzzy #~ msgid "Compressor $compress requires $gzip." #~ msgstr "Bá»™ nén « $compress » cần thiết $bzip." #~ msgid "Compressor $compress requires $bzip." #~ msgstr "Bá»™ nén « $compress » cần thiết $bzip." �����������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/README����������������������������������������������������������������������0000644�0001750�0001750�00000002237�11503702461�014732� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� Backup Manager * A really simple to use backup tool * http://www.backup-manager.org Description --------------------------------------------------------------------- Backup Manager is a command line backup tool for GNU/Linux, designed to help you make daily archives of your file system. Written in bash and perl, it can make archives in many formats and can be run in a parallel mode with different configuration files. Archives are kept for a given number of days and the upload system can use ftp or scp to transfer the generated archives to a list of remote hosts. The configuration file is very simple and basic and gettext is used for internationalization. Installation --------------------------------------------------------------------- See the file INSTALL Rporting Bugs --------------------------------------------------------------------- Use the bug tracking system: http://bugzilla.backup-manager.org Mailing Lists --------------------------------------------------------------------- You can subscribe to mailing lists at the following url: http://www.backup-manager.org/support-mailing-list/ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/VERSION���������������������������������������������������������������������0000644�0001750�0001750�00000000011�11503702461�015106� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0.7.10.1 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Backup-Manager-0.7.10.1/AUTHORS���������������������������������������������������������������������0000644�0001750�0001750�00000000241�11503702461�015113� 0����������������������������������������������������������������������������������������������������ustar �alexis��������������������������alexis����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� Backup Manager is currently maintained by Philippe Villiers. It was first written by Alexis Sukrieh. Check the ChangeLog file for details about contributors. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������