/[BackupPC]/trunk/bin/BackupPC_burnArchiveCLI
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/bin/BackupPC_burnArchiveCLI

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 175 by dpavlin, Tue Oct 11 17:55:48 2005 UTC revision 193 by dpavlin, Thu Oct 13 15:11:58 2005 UTC
# Line 1  Line 1 
1  #!/usr/local/bin/perl  #!/usr/bin/perl
2    
3  use strict;  use strict;
4  #use lib "__INSTALLDIR__/lib";  use lib "__INSTALLDIR__/lib";
 # FIXME  
 use lib "/data/backuppc/lib";  
5    
6  use DBI;  use DBI;
7  use BackupPC::Lib;  use BackupPC::Lib;
# Line 34  my $dbh = DBI->connect($dsn, $user, "", Line 32  my $dbh = DBI->connect($dsn, $user, "",
32  my $tar_dir = $Conf{InstallDir}.'/';  my $tar_dir = $Conf{InstallDir}.'/';
33  $tar_dir .= $Conf{GzipTempDir} || die "GzipTempDir isn't defined in configuration";  $tar_dir .= $Conf{GzipTempDir} || die "GzipTempDir isn't defined in configuration";
34    
35  die "problem with $tar_dir, check GzipTempDir in configuration\n" unless (-d $tar_dir && -w $tar_dir);  die "problem with $tar_dir, check GzipTempDir in configuration\n" unless (-d $tar_dir);
36    
37  my $iso_dir = $Conf{InstallDir}.'/';  my $iso_dir = $Conf{InstallDir}.'/';
38  $iso_dir .= $Conf{ISOTempDir} || die "ISOTempDir isn't defined in configuration";  $iso_dir .= $Conf{ISOTempDir} || die "ISOTempDir isn't defined in configuration";
# Line 55  sub curr_time { Line 53  sub curr_time {
53          return strftime($t_fmt,localtime());          return strftime($t_fmt,localtime());
54  }  }
55    
56    sub dumpArchive2XML($$$)
57    {
58            my ($dbh, $dvd_nr, $filename) = @_;
59            my %archive;    
60            my $output = new IO::File(">$filename");
61            my $writer = new XML::Writer(OUTPUT=>$output, NEWLINES => 1);
62    
63            $writer->pi('xml-stylesheet', 'href="archive.css" type="text/css"');
64    
65            my $files_sql = q{
66                    SELECT
67                            files.path AS path,
68                            files.date AS date,
69                            files.type AS type,
70                            files.size AS size
71                    FROM files, backups, shares
72                    WHERE files.backupnum=backups.num AND
73                            files.shareid=shares.id AND
74                            shares.hostid=backups.hostid AND
75                            backups.id=?
76            };
77    
78            my $backups_sql = q{
79                    SELECT
80                            backups.id   AS backup_id,
81                            hosts.name   AS host,
82                            backups.num  AS num,
83                            backups.date AS date,
84                            shares.name  AS share,
85                            backups.size AS backup_size,
86                            backups.inc_size AS compress_size
87                    FROM backups, archive_backup, hosts, shares
88                    WHERE archive_backup.backup_id = backups.id
89                            AND hosts.id=backups.hostid
90                            AND shares.id=backups.shareid
91                            AND archive_backup.archive_id = ?
92            };
93    
94            my $sth = $dbh->prepare("SELECT dvd_nr, total_size, note, username, date,id FROM archive WHERE dvd_nr=?");
95            $sth->execute($dvd_nr);
96            my $row = $sth->fetchrow_hashref();
97    
98            my $row_h;
99            foreach my $hide (qw/id note/) {
100                    $row_h->{$hide} = $row->{$hide} || die "no $hide";
101                    delete $row->{$hide};
102            }
103    
104            $writer->startTag("archive", %{$row});
105    
106            $writer->startTag("note");
107            $writer->characters( $row_h->{'note'} );
108            $writer->endTag("note");
109    
110            my $sth_backups = $dbh->prepare( $backups_sql );
111            $sth_backups->execute( $row_h->{'id'} );
112    
113            while (my $row = $sth_backups->fetchrow_hashref()) {
114    
115                    my $sth_files = $dbh->prepare( $files_sql);
116                    $sth_files->execute($row->{'backup_id'});
117    
118                    delete($row->{'backup_id'});
119                    $row->{'date'} = strftime($t_fmt,gmtime($row->{'date'}));
120    
121                    $writer->startTag( "backup", %{$row} );
122    
123                    while (my $row = $sth_files->fetchrow_hashref()) {
124                            # convert filetype to string
125                            $row->{'type'} = BackupPC::Attrib::fileType2Text(undef, $row->{'type'});
126                            $row->{'date'} = strftime($t_fmt,gmtime($row->{'date'}));
127                            my $path = $row->{'path'}; delete $row->{'path'};
128    
129                            $writer->startTag("file", %{$row});
130                            $writer->characters( $path );
131                            $writer->endTag("file");
132                    }
133                    $writer->endTag("backup");
134            }      
135                            
136            $writer->endTag("archive");
137            $writer->end();
138            
139    }
140    
141    
142    
143  #----- main  #----- main
144    
145  my $sth = $dbh->prepare( qq{  my $sth = $dbh->prepare( qq{
# Line 132  sub skip($) { Line 217  sub skip($) {
217  my $sth_archive_backup = $dbh->prepare( qq{  my $sth_archive_backup = $dbh->prepare( qq{
218          select          select
219                  backup_id,                  backup_id,
220                    archive_id,
221                  hosts.name as host,                  hosts.name as host,
222                  shares.name as share,                  shares.name as share,
223                  backups.num as num                  backups.num as num
# Line 143  my $sth_archive_backup = $dbh->prepare( Line 229  my $sth_archive_backup = $dbh->prepare(
229          where archive.dvd_nr = ?          where archive.dvd_nr = ?
230  });  });
231    
232    my $sth_archive_burned = $dbh->prepare( qq{
233            insert into archive_burned
234                    (archive_id, iso_size)
235            values ( (select id from archive where dvd_nr =?), ?)
236    });
237    
238  foreach my $arc (@archives_to_burn) {  foreach my $arc (@archives_to_burn) {
239          exit if ($arc eq ']quit[');          exit if ($arc eq ']quit[');
240    
# Line 155  foreach my $arc (@archives_to_burn) { Line 247  foreach my $arc (@archives_to_burn) {
247    
248          print "Working on DVD #$dvd_nr in $tmp_dir\n";          print "Working on DVD #$dvd_nr in $tmp_dir\n";
249    
250          my $iso_file = "${iso_dir}/${dvd_nr}.iso";          my $list_file = my $iso_file = my $xml_file = "${iso_dir}/${dvd_nr}";
251            $list_file .= '.list';
252          skip "ISO $iso_file allready exists" if (-e $iso_file);          $iso_file .= '.iso';
253            $xml_file .= '.xml';
254    
255            if (-e $iso_file) {
256                    print "ISO $iso_file allready exists\n";
257                    goto BURN;
258            }
259    
260          $sth_archive_backup->execute($dvd_nr);          $sth_archive_backup->execute($dvd_nr);
261    
262          print "Running mkisofs now...\n";          open(my $list, "> $list_file") || skip "can't open $list_file: $!";
   
         my $cmd = qq{ mkisofs -A BackupPC -gui -J -r -T --input-charset ISO-8859-2 -V $dvd_nr -o $iso_file -path-list - };  
263    
264          open(my $mkisofs, "| $cmd 2>&1") || skip "can't run $cmd: $!";          my $inc = 0;
265    
266          while (my $row = $sth_archive_backup->fetchrow_hashref) {          while (my $row = $sth_archive_backup->fetchrow_hashref) {
267                  my $tar_file = BackupPC::SearchLib::getGzipName($row->{'host'}, $row->{'share'}, $row->{'num'});                  my $tar_file = BackupPC::SearchLib::getGzipName($row->{'host'}, $row->{'share'}, $row->{'num'});
268                  skip "can't find increment $tar_file: $!" unless (-r "$tar_dir/$tar_file");                  skip "can't find increment $tar_file: $!" unless (-r "$tar_dir/$tar_file");
269                  print $mkisofs "$tar_dir/$tar_file\n";                  print $list "$tar_dir/$tar_file\n";
270                    $inc++;
271    
272          }          }
273    
274          while(! -e $iso_file) {          # add file list and note in xml
275                  sleep 1;          dumpArchive2XML($dbh, $dvd_nr, $xml_file);
276            print $list "$xml_file\n";
277    
278            # add css file for archive
279            my $css_file = $Conf{CgiImageDir} . '/archive.css';
280            if (-r $css_file) {
281                    print $list "$css_file\n";
282            } else {
283                    print "WARNING: missing $css_file, not added to iso image!\n";
284          }          }
285    
286          print "Created $iso_file in ", fmt_time(time() - $t), "\n";          close($list);
287    
288            print "Running mkisofs now for $inc increments...\n";
289    
290            my $cmd = qq{ mkisofs -A BackupPC -gui -J -r -T --input-charset ISO-8859-2 -V $dvd_nr -o $iso_file -path-list $list_file };
291    
292            system($cmd) == 0 or skip "can't run $cmd: $?";
293    
294            my $size = (stat($iso_file))[7];
295    
296            print "Created $iso_file [$size bytes] in ", fmt_time(time() - $t), "\n";
297    
298    BURN:
299            # FIXME add call to cdrecord here!
300            $sth_archive_burned->execute($dvd_nr, $size);
301            print "Media burn for $dvd_nr recorded\n";
302    
303  SKIP:  SKIP:
304    

Legend:
Removed from v.175  
changed lines
  Added in v.193

  ViewVC Help
Powered by ViewVC 1.1.26