root/modules/branches/2.10/backup/bin/backup.php

Revision 14086, 5.5 kB (checked in by mbrevda, 1 year ago)

upstream changes - include core so that we can disable trunk, closes #5825

  • Property svn:executable set to *
Line 
1 #!/usr/bin/env php
2 <?php
3 $restrict_mods                        = array('backup' => true, 'core' => true);
4 $bootstrap_settings['cdrdb']        = true;
5 $bootstrap_settings['freepbx_auth']    = false;
6 if (!@include_once(getenv('FREEPBX_CONF') ? getenv('FREEPBX_CONF') : '/etc/freepbx.conf')) {
7     include_once('/etc/asterisk/freepbx.conf');
8 }
9
10
11 /**
12  * OPTIONS
13  * opts - if we have opts, run the backup from it, passing the file back when finisehed
14  * id - if we have an id. If we do, just run a "regular" backup, using the id for options
15  *    and pulling all other data from the database
16  * astdb - tools for handeling the astdb
17  */
18
19 $getopt = (function_exists('_getopt') ? '_' : '') . 'getopt';
20 $vars = $getopt($short = '', $long = array('opts::', 'id::', 'astdb::', 'data::'));
21
22 //if the id option was passed
23 if (isset($vars['id']) && $vars['id']) {
24     //bu = backup settings
25     //s= servers
26     //b= backup object
27     if ($bu = backup_get_backup($vars['id'])) {
28         
29         $s = backup_get_server('all_detailed');
30         $b = new Backup($bu, $s);       
31         backup_log(_('Intializing Backup') . ' ' .$vars['id']);
32         $b->init();
33         if ($b->b['bu_server'] == "0") {
34             //get lock to prevent backups from being run cuncurently
35             while (!$b->acquire_lock()) {
36                 backup_log(_('waiting for lock...'));
37                 sleep(10);
38             }
39             backup_log(_('Backup Lock acquired!'));
40             
41             backup_log(_('Running pre-backup hooks...'));
42             $b->run_hooks('pre-backup');
43             
44             backup_log(_('Adding items...'));
45             $b->add_items();
46             
47             backup_log(_('Bulding manifest...'));
48             $b->build_manifest();
49             $b->save_manifest('local');
50             $b->save_manifest('db');
51             
52             backup_log(_('Creating backup...'));
53             $b->create_backup_file();
54         } else {//run backup remotly
55             $opts = array(
56                     'bu'    => $bu,
57                     's'        => $s,
58                     'b'        => $b
59             );
60             
61             //dont run if there are no items to backup
62             if (!$opts['bu']['items']) {
63                 backup_log(_('No items in backup set. Aborting.'));
64                 exit();
65             }
66             backup_log(_('Connecting to remote server...'));
67             $cmd[] = fpbx_which('ssh');
68             $cmd[] = '-o StrictHostKeyChecking=no -i';
69             $cmd[] = backup__($s[$b->b['bu_server']]['key']);
70             $cmd[] = backup__($s[$b->b['bu_server']]['user'])
71                     . '\@'
72                     . backup__($s[$b->b['bu_server']]['host']);
73             $cmd[] = '\'php -r "';
74             $escape = '$bootstrap_settings["freepbx_auth"] = false;
75                 $bootstrap_settings["skip_astman"] = true;
76                 $restrict_mods = true;
77                 if (!@include_once(getenv("FREEPBX_CONF") ? getenv("FREEPBX_CONF") : "/etc/freepbx.conf")) {
78                     include_once("/etc/asterisk/freepbx.conf");
79                 }
80                 system($amp_conf["AMPBIN"] . "/backup.php --opts=' . base64_encode(serialize($opts)) . '");
81                 ';
82             $cmd[] = addcslashes(str_replace(array("\n", "\t"), '', $escape), '"$');
83             $cmd[] = '"\'';
84             $cmd[] = '> ' . $b->b['_tmpfile'];
85             //backup_log(implode(' ', $cmd));
86             exec(implode(' ', $cmd), $ret, $status);
87             if ($status !== 0) {
88                 backup_log(_('Something went wrong when connecting to remote server. Aborting!'));
89                 exit($status);
90             }
91             unset($cmd);
92             backup_log(_('Prossesing received file...'));
93             $b->b['manifest'] = backup_get_manifest_tarball($b->b['_tmpfile']);
94             $b->save_manifest('db');
95         }   
96         
97         backup_log(_('Storing backup...'));
98         $b->store_backup();
99         
100         backup_log(_('Running post-backup hooks...'));
101         $b->run_hooks('post-backup');
102         
103         if ($b->b['bu_server'] == "0") { //local backup? Were done!
104             backup_log(_('Backup successfully completed!'));
105         } else {
106             if ($b->b['restore']) {
107                 if (isset($b->b['manifest']['file_list'])) {
108                     foreach ($b->b['manifest']['file_list'] as $dir => $file) {
109                         $files[] = $dir;
110                     }
111                 }
112                 $restore['settings'] = true;
113                 if (isset($files)) {
114                     $restore['files'] = $files;
115                 }
116
117                 backup_log(_('Restoring backup...'));
118                 backup_restore($b->b['_tmpfile'], $restore);
119             }
120
121             backup_log(_('Running post-backup hooks...'));
122             $b->run_hooks('post-backup');
123             
124             //disable registered trunks if requested
125             if ($b->b['disabletrunks'] == 'true' && function_exists('core_trunks_disable')) {
126                 //disables registered trunks
127                 core_trunks_disable('reg', true);
128             }
129             
130             //apply configs if requested
131             if ($b->b['applyconfigs'] == 'true') {
132                 do_reload(true);
133             }
134             backup_log(_('Backup successfully completed!'));
135         }
136             
137     } else { //invalid backup
138         backup_log('backup id ' . $vars['id'] . ' not found!');
139     }
140     
141 //if the opts option was passed, used for remote backup (warm spare)
142 } elseif(isset($vars['opts']) && $vars['opts']) {
143     //r = remote options
144     if(!$r = unserialize(base64_decode($vars['opts']))) {
145         echo 'invalid opts';
146         exit(1);
147     }
148
149     $b = new Backup($r['bu'], $r['s']);
150     $b->b['_ctime']        = $r['b']->b['_ctime'];
151     $b->b['_file']        = $r['b']->b['_file'];
152     $b->b['_dirname']    = $r['b']->b['_dirname'];
153     $b->init();
154     $b->run_hooks('pre-backup');
155     $b->add_items();
156     $b->build_manifest();
157     $b->save_manifest('local');
158     $b->create_backup_file(true);
159     exit();
160 } elseif(isset($var['astdb']) && $var['astdb']) {
161     switch ($var['astdb']) {
162         case 'dump':
163             echo astdb_get(array('RG', 'BLKVM', 'FM', 'dundi'));
164             break;
165         case 'restore':
166             if (is_file($data)) {
167                 $data = file_get_contents($data);
168             }
169             astdb_put(unserialize($data), array('RINGGROUP', 'BLKVM', 'FM', 'dundi'));
170             break;
171     }
172 } else {
173     show_opts();
174 }
175
176 exit();
177
178 function show_opts() {
179     $e[] = 'backup.php';
180     $e[] = '';
181     $e[] = 'options:';
182     $e[] = "\t" . '--id=<id number> - a valid backup id';
183     $e[] = "\t" . '--astdb=<restore|dump> - dump or restore the astdb';
184     $e[] = "\t" . '--data=<data> a serilialized string of the astdb dumb to restore.';
185     $e[] = "\t\t" . ' Can also point to a file contianing the serializes string';
186     $e[] = '';
187     $e[] = '';
188     echo implode("\n", $e);
189 }
190 ?>
191
Note: See TracBrowser for help on using the browser.