source: MondoRescue/branches/3.1/mondo/src/mondoarchive/mondoarchive.c@ 2898

Last change on this file since 2898 was 2508, checked in by Bruno Cornec, 14 years ago

r3287@localhost (orig r2285): bruno | 2009-07-20 11:36:47 +0200

r3285@localhost: bruno | 2009-07-20 11:17:35 +0200
Apply fix in 2.2.10 around multi USB device handling to 2.2.9 as well


r3291@localhost (orig r2288): bruno | 2009-07-21 16:48:31 +0200
Copy 2.2.10 test script in to 2.2.9 for memory problm analysis


r3293@localhost (orig r2290): bruno | 2009-07-22 14:03:44 +0200

  • Fix a printing error in mindi for the tar command
  • Fix all mr_asprintf which had no second param as a string


r3295@localhost (orig r2292): bruno | 2009-07-22 16:55:00 +0200

  • Fix #160 and #346 by rewriting the message.txt file with more valid information gathered in mindi


r3300@localhost (orig r2294): bruno | 2009-07-23 01:58:08 +0200

Man pages patch from Joe Ross (joe.ross_at_gmail.com)


r3303@localhost (orig r2297): bruno | 2009-07-23 17:43:49 +0200
Fix a remaining display error for 2.2.9. That version has been tested OK in a lab.


r3304@localhost (orig r2298): bruno | 2009-07-23 18:18:27 +0200

  • Remove memory leak for the last modification


r3308@localhost (orig r2302): bruno | 2009-07-24 21:18:50 +0200
Improve logging of mountlist.txt


r3310@localhost (orig r2304): bruno | 2009-07-27 19:45:10 +0200

  • popup_and_get_string needs an allocated buffer for the moment so fixing the calls with dyn. ones
  • Fix a bug in mem.c for mr_strcat, which wasn't modifying the right pointer level


r3311@localhost (orig r2305): bruno | 2009-07-27 19:49:35 +0200
Avoid a memory leak in the previous patch


r3314@localhost (orig r2308): bruno | 2009-07-27 20:59:06 +0200
Fix a bug in mr_strcat backported from 2.2.10. Should solve our seg faults.


r3315@localhost (orig r2309): bruno | 2009-07-28 02:14:23 +0200
Cosmetic changes to allow for quality to not giv false positive


r3343@localhost (orig r2311): bruno | 2009-08-18 02:13:43 +0200
Fix for initramfs detection with 2.6.30 (Hugo Vanwoerkom hvw59601_at_care2.com)


r3367@localhost (orig r2333): bruno | 2009-08-18 16:26:26 +0200
Adds a precision for -U option in man page on raw device usage and not partition name


r3373@localhost (orig r2336): bruno | 2009-08-20 17:37:41 +0200

  • Precise the combined usage of -E and -I in mondoarchive (Case 4601017223)


r3379@localhost (orig r2342): bruno | 2009-08-21 16:27:10 +0200


r3383@localhost (orig r2344): bruno | 2009-08-24 13:37:09 +0200

r3382@localhost: bruno | 2009-08-24 13:30:25 +0200
In NFS mode also propose access to expert, interactive, ... entry at boot prompt


r3388@localhost (orig r2346): bruno | 2009-08-27 11:41:16 +0200
Adds fdisk -l result in Log File at restore time


r3389@localhost (orig r2347): bruno | 2009-08-27 13:51:00 +0200

  • Solve tmp dir creation which sometimes was trying to create /%xx dirs. Should fix #293 for good


r3390@localhost (orig r2348): bruno | 2009-08-27 13:54:25 +0200
Improve logging (minor)


r3394@localhost (orig r2350): bruno | 2009-08-28 02:24:19 +0200
Change inerface of evaluate_mountlist and spread_flaws_across_three_lines in order to solve bugs linked to strings management in these functions. May fix a restoration crash seen by some customers


r3397@localhost (orig r2353): bruno | 2009-08-28 19:03:45 +0200

  • Addition of a nomd option to avoid starting mdadm
  • mpath is now already started if there was a mpath entry in mountlist


r3399@localhost (orig r2355): bruno | 2009-08-29 00:56:50 +0200
Remove function spread_flaws_across_three_lines and expand it at the single place where it was useful, and fix memory allocation issues in it.


r3402@localhost (orig r2358): bruno | 2009-09-01 19:02:35 +0200
P2V doc updated (Lester Wade lester.wade_at_hp.com)


r3404@localhost (orig r2360): bruno | 2009-09-01 19:26:53 +0200
Website update to refer to new P2V document


r3405@localhost (orig r2361): bruno | 2009-09-03 13:54:25 +0200

  • Fix a case where the NFS dir in restore mode was mounted rw (linked to bug #291 could create a huge problem)


r3407@localhost (orig r2363): bruno | 2009-09-03 14:46:46 +0200
More verbose at installation of additional tools


r3409@localhost (orig r2365): bruno | 2009-09-03 18:08:32 +0200

  • New update from Lester Wade (lester.wade_at_hp.com) for P2V doc


r3410@localhost (orig r2366): bruno | 2009-09-05 01:28:18 +0200
place the code of mondo_makefilelist before its call



r3411@localhost (orig r2367): bruno | 2009-09-06 01:51:26 +0200

  • Advertising for project-builder on the website added


r3412@localhost (orig r2368): bruno | 2009-09-07 15:36:23 +0200
Fix compilation issue


r3413@localhost (orig r2369): bruno | 2009-09-07 18:03:40 +0200
Another compilation issue fixed.


r3415@localhost (orig r2371): bruno | 2009-09-08 13:40:25 +0200

  • Fix a problem a error detection in evaluate_mountlist which casued nuke mode to abort. Error string should also be better now.


r3417@localhost (orig r2373): bruno | 2009-09-08 13:55:31 +0200
Avoid asking the Prefix name in NFS mode twice


r3418@localhost (orig r2374): bruno | 2009-09-08 20:04:07 +0200

  • Try to fix garbled screen progression in text mode based on 2.2.10 modifications which are working


r3424@localhost (orig r2380): bruno | 2009-09-09 20:30:47 +0200

  • Change NFS support into a NetFS support to allow for multiple protocol in addition to NFS (NEEDS TESTING)
  • Better logging to detect a potential nuke issue


r3425@localhost (orig r2381): bruno | 2009-09-10 02:05:55 +0200
Fix a missing param for sshfs call


r3428@localhost (orig r2384): bruno | 2009-09-10 13:02:56 +0200

  • Remove separate function look_for_duplicate_mountpoints used only once and whose interface created problems with caller


r3430@localhost (orig r2386): bruno | 2009-09-10 16:06:52 +0200
Be compatible on backup type by making old nfs recognized as netfs and proto forced


r3431@localhost (orig r2387): bruno | 2009-09-10 18:40:47 +0200
Fix a problem in netfs analysis in mondoarchive


r3432@localhost (orig r2388): bruno | 2009-09-10 20:25:13 +0200
Fix mondoarchive CLI analysis for NETFS type of requests


r3434@localhost (orig r2390): bruno | 2009-09-11 03:05:20 +0200

  • Adds ext3 initrd support for 2.6.30


r3437@localhost (orig r2393): bruno | 2009-09-11 11:56:52 +0200

  • Tries to add support for bzip2 and lzma initramfs (preliminary, not tested) for 2.6.30


r3438@localhost (orig r2394): bruno | 2009-09-12 02:53:02 +0200
Fix interface of evaluate_mountlist (remove 2nd param useless) and fix nuke mode which wasn't working.


r3441@localhost (orig r2397): bruno | 2009-09-14 18:54:34 +0200
Fix a format issue in text mode on percentage


r3452@localhost (orig r2398): bruno | 2009-09-15 16:00:13 +0200

  • Fix a bug where flaws_str could be NULL and wasn't tested correctly.


r3453@localhost (orig r2399): bruno | 2009-09-15 19:28:39 +0200

  • Use protocol name when displaying restore progress instead of netfs
  • Ask for network protocol name at restore time


r3455@localhost (orig r2401): bruno | 2009-09-15 19:34:19 +0200
Wrong structure member name was used


r3456@localhost (orig r2402): bruno | 2009-09-16 13:04:17 +0200
Use dir for shell related commands and dir1 for C related actions in open_and_list_dir to avoid missing some files with { in names e.g.


r3457@localhost (orig r2403): bruno | 2009-09-16 16:32:03 +0200

  • At restore time read the netfs protocol in the conf file


r3462@localhost (orig r2408): bruno | 2009-09-18 15:17:08 +0200
Remove useless script


r3463@localhost (orig r2409): bruno | 2009-09-18 15:25:35 +0200

  • Split deplist.txt into multiple conf files under deplist.d in the conf dir. This will allow to have a minimal.conf file for initrd content to analyze to improve support of new embedded feature in the future (sshfs, live install). The other conf files contain the additional commands to put in the all.tar.gz. For the moment, mindi is still working the same. THis infra will allow that support in a near future. deplist.txt is now reserved for the admin additional commands.


r3465@localhost (orig r2410): bruno | 2009-09-18 19:10:54 +0200

  • Better list of mandatory tools
  • Adds fuse and sshfs support in initrd


r3466@localhost (orig r2411): bruno | 2009-09-18 20:32:47 +0200
sshfs also needs ssh at restore time in initrd


r3478@localhost (orig r2418): bruno | 2009-09-23 23:22:39 +0200
Modify getfattr call to have all extended attributes, including non user ones. (patch from Kevin Ritzenthaler Kevin.Ritzenthaler_at_hp.com) and fix #357


r3479@localhost (orig r2419): bruno | 2009-09-23 23:50:34 +0200
star only supports ACL when used with exustar mode. Fix #356.


r3482@localhost (orig r2422): bruno | 2009-09-24 16:53:24 +0200

  • Adds support for bnx2x (BL 460 G6) and auth_rpcgss (Debian 2.6.31)


r3485@localhost (orig r2423): bruno | 2009-09-25 16:38:40 +0200
Fix an issue in is_this_device_mounted (string freed before last usage)


r3486@localhost (orig r2424): bruno | 2009-09-25 18:44:01 +0200

  • analyze-my-lvm now removes excluded devices from list coming from mondoarchive
  • new mr_make_devlist_from_pathlist which handle the new bkpinfo->exclude_devs field containing the excluded devices and remove corresponding code from libmondo-cli.c
  • Move DSF code into libmondo-devices.c for coherency, and only the previous function is made externally available
  • Remove dev_to_exclude in libmondo-archive.c which wasn't working correctly and replace it with bkpinfo->exclude_devs


r3487@localhost (orig r2425): bruno | 2009-09-25 18:58:23 +0200

  • Improving ssh support at restore time by providing a shadow file


r3489@localhost (orig r2426): bruno | 2009-09-25 19:42:09 +0200

  • Attempt to stay backward compatible without protocol for -n option


r3490@localhost (orig r2427): bruno | 2009-09-28 02:08:06 +0200
Avoids null param for excludes_devs for mindi call


r3492@localhost (orig r2429): bruno | 2009-09-28 11:46:16 +0200

  • Simplify GetInitrdFilesystemToUse which doesn't need to detect everything, but just know if it's initramfs (new mode) or a compressed FS ext2/3 (older mode) as initrd is anyway re-made by mindi. Should fix #353


r3494@localhost (orig r2431): bruno | 2009-09-28 13:16:18 +0200

  • Use only the AWK veriable everywhere and not the awk command


r3495@localhost (orig r2432): bruno | 2009-09-28 14:16:31 +0200
Warning emited in case of duplicate mountpoints or devices in fstab found


r3496@localhost (orig r2433): bruno | 2009-09-28 15:55:17 +0200
ssh in the restore env needs some dlopened libs (libnss_compat|files)


r3497@localhost (orig r2434): bruno | 2009-09-28 16:33:14 +0200
Compiler warning fixed


r3498@localhost (orig r2435): bruno | 2009-09-28 17:55:26 +0200
Improve user management for NetFS cases


r3499@localhost (orig r2436): bruno | 2009-09-29 01:48:32 +0200

  • Improve deplist.d/* files
  • adds libnss for ssh support in boot disk
  • Solve a memory management issue in DSF module (strtok => mr_strtok)
  • DSF now also supports partitions in addition to full disks
  • Adds debug in open_and_list_dir


r3500@localhost (orig r2437): bruno | 2009-09-29 10:41:56 +0200

  • Fix udev support in init for Mandriva 2009.1 (udevadm settle is blocking)


r3501@localhost (orig r2438): bruno | 2009-09-29 14:41:36 +0200

  • Improvements on sshfs/ssh management in restore mode
  • Include now all minimal requirements for sshfs


r3502@localhost (orig r2439): bruno | 2009-09-29 18:46:08 +0200

  • Avoids error message if some ssh conf files do not exist


r3503@localhost (orig r2440): bruno | 2009-09-29 18:57:13 +0200

  • Avoids comment analysis in the new code handling deplist.d


r3504@localhost (orig r2441): bruno | 2009-09-29 19:34:34 +0200

  • fuse device is needed at restore time for sshfs


r3505@localhost (orig r2442): bruno | 2009-09-29 20:02:36 +0200

  • Improves udev timeout handling


r3506@localhost (orig r2443): bruno | 2009-09-29 20:43:38 +0200

  • priority given to env var for tmpdir
  • fuse FS excluded from tmpdir computation


r3518@localhost (orig r2447): bruno | 2009-10-04 01:58:08 +0200

  • Iprove USB log in case of error by adding the conf file


r3519@localhost (orig r2448): bruno | 2009-10-05 11:06:13 +0200


r3520@localhost (orig r2449): bruno | 2009-10-06 01:10:35 +0200

  • Adds support for grub2 conf file grub.cfg in addition to menu.lst


r3521@localhost (orig r2450): bruno | 2009-10-06 01:24:02 +0200

  • Fix a mr_asprintf usage without & causing a seg fault.


r3523@localhost (orig r2452): bruno | 2009-10-06 12:47:56 +0200
CIFS mounts shouldn't be part of the mountlist analysis (should help solving #288)


r3524@localhost (orig r2453): bruno | 2009-10-07 10:17:03 +0200

  • Fix a bug in handling of -E option with real devices (bad report in function mr_make_devlist_from_pathlist of the test between -E and -I)


r3525@localhost (orig r2454): bruno | 2009-10-07 10:19:02 +0200

  • Fix an error in the test for grub conf files (or used instead of and)


r3526@localhost (orig r2455): bruno | 2009-10-07 16:14:59 +0200
afio is under /bin on Debian


r3527@localhost (orig r2456): bruno | 2009-10-07 17:31:26 +0200

  • Adds support for libcrc32c (needed by bnx2x)


r3532@localhost (orig r2457): bruno | 2009-10-09 13:33:44 +0200

  • Apply path from Matthew Cline (matt_at_nightrealms.com) in order to fix #359


r3533@localhost (orig r2458): bruno | 2009-10-09 13:41:02 +0200
Adds a conf file example for mindi and fix #360


r3535@localhost (orig r2459): bruno | 2009-10-09 15:13:01 +0200
MOde of conf file


r3546@localhost (orig r2461): bruno | 2009-10-14 01:12:24 +0200

  • umount freshly created VFAT partition on USB key as Ubunu has an automounter mounting it as soon as created (Steffen Neumann sneumann_at_ipb-halle.de)


r3566@localhost (orig r2463): bruno | 2009-10-26 01:34:16 +0100

  • Reset an error counter before blanking a DVD to avoid always returning an error (Vincent Raman vincent.raman_at_macqel.eu)


r3567@localhost (orig r2464): bruno | 2009-10-26 13:57:14 +0100
bzip2 is under /bin on Debian


r3568@localhost (orig r2465): bruno | 2009-10-28 01:46:30 +0100
some distro hold lvm commands under /usr/sbin


r3595@localhost (orig r2469): bruno | 2009-11-10 12:22:10 +0100
/dev/shm is now part of the default exclude list


r3596@localhost (orig r2470): bruno | 2009-11-10 12:32:40 +0100
Remove useless pb_log and MONDO_TRACEFILE


r3597@localhost (orig r2471): bruno | 2009-11-10 12:57:58 +0100
Improve analysis of kernel modules by printing whether it's a live or extra module which has not been found (Matthew Cline) as reported in #362


r3598@localhost (orig r2472): bruno | 2009-11-10 13:21:46 +0100

  • Default to DVD size when in iso or netfs mode


r3599@localhost (orig r2473): bruno | 2009-11-10 14:13:10 +0100

  • Fix #363 where exclude_paths was extended up to memory limit dumping core


r3600@localhost (orig r2474): bruno | 2009-11-10 14:31:14 +0100

  • Update deplist for Debian support


r3602@localhost (orig r2476): bruno | 2009-11-11 02:44:42 +0100

  • small improvement for loging in USB case


r3603@localhost (orig r2477): bruno | 2009-11-11 13:29:27 +0100

  • Adds a nolvm boot option at restore time


r3604@localhost (orig r2478): bruno | 2009-11-11 19:54:51 +0100

  • Fix #367 - the for loop doesn't make any test now, as it was computed before entering the loop, leading to an error, and was also made inside the loop anyway.


r3605@localhost (orig r2479): bruno | 2009-11-12 00:32:45 +0100

  • Add support for diskdumplib driver useful for RHEL 3 and IBM xseries 336


r3606@localhost (orig r2480): bruno | 2009-11-12 01:09:40 +0100

  • If using nolvm, mondorestore should also not nalyze and handle i-want-my-lvm


r3608@localhost (orig r2482): bruno | 2009-11-14 12:54:11 +0100
Fix bunzip2 on debian as well


r3610@localhost (orig r2484): bruno | 2009-11-15 00:44:19 +0100

  • Adds support for variable serial port console, with defalut to /dev/ttyS0, and a boot param to change it with serial=/dev/ttySx


r3615@localhost (orig r2485): bruno | 2009-11-15 01:34:33 +0100

r3614@localhost: bruno | 2009-11-15 01:34:12 +0100
Adds a space in exclude paths


r3623@localhost (orig r2487): bruno | 2009-11-18 20:41:40 +0100

r3620@localhost: bruno | 2009-11-18 10:31:36 +0100

  • Only link /dev/tty to serial port when there is indeed a serial port. If not breaks mondorestore on normal console


r3631@localhost (orig r2490): bruno | 2009-11-24 01:48:29 +0100
Put news below in the main page to make it more readable


r3648@localhost (orig r2492): bruno | 2009-11-25 23:50:13 +0100

r3647@localhost: bruno | 2009-11-25 23:49:11 +0100

  • Add warning for -f and SW Raid as in 2.2.10


r3650@localhost (orig r2493): bruno | 2009-11-26 00:19:52 +0100

r3649@localhost: bruno | 2009-11-26 00:18:27 +0100

  • Addition of the german translation made by Magnus Rasche (Magnus.rasche_at_gmx.de) and Website inclusion


r3652@localhost (orig r2495): bruno | 2009-11-27 15:55:55 +0100
cosmetic display fix
r3659@localhost (orig r2498): bruno | 2009-12-05 17:53:03 +0100
nfsopt restore boot time option added to support custom mount options for network restore


r3684@localhost (orig r2501): bruno | 2009-12-17 00:35:08 +0100
Fix #375 mondo will segfault if the partition in sensibly_set_tmpdir_and_scratchdir() is read-only (cylau)


r3685@localhost (orig r2502): bruno | 2009-12-17 01:02:47 +0100

  • Fix an issue in the function listing kernel modules when not found


r3686@localhost (orig r2503): bruno | 2009-12-17 01:15:01 +0100
Adds scsi_dump_register to mindi SCSI_MODS for RHEL3 + IBM servers


r3701@localhost (orig r2504): bruno | 2009-12-23 02:24:33 +0100

  • Addition of the Lab for Mondorescue


r3702@localhost (orig r2505): bruno | 2009-12-23 02:41:17 +0100
Web site update for Lab MondoRescue delivery


r3706@localhost (orig r2506): bruno | 2010-01-04 11:31:53 +0100

  • Fix a bug when isodir is / only when splitting it in iso_path and iso_mnt


r3707@localhost (orig r2507): bruno | 2010-01-04 13:22:49 +0100

  • Fix #377: Segfault in pause_and_ask_for_cdr() (ggeens)


  • Property svn:keywords set to Id
File size: 12.2 KB
Line 
1/***************************************************************************
2$Id: mondoarchive.c 2508 2010-01-04 18:21:55Z bruno $
3* The main file for mondoarchive.
4*/
5
6/************************* #include statements *************************/
7#include <pthread.h>
8#include <stdio.h>
9#include <stdlib.h>
10#include "my-stuff.h"
11#include "mr_mem.h"
12#include "mr_str.h"
13#include "../common/mondostructures.h"
14#include "../common/libmondo.h"
15#include "../common/libmondo-cli-EXT.h"
16#include "../common/libmondo-tools-EXT.h"
17#include "mondoarchive.h"
18
19// for CVS
20//static char cvsid[] = "$Id: mondoarchive.c 2508 2010-01-04 18:21:55Z bruno $";
21
22/************************* external variables *************************/
23extern void set_signals(int);
24extern int g_current_media_number;
25extern int g_currentY;
26extern bool g_text_mode;
27extern char *g_boot_mountpt;
28extern bool g_remount_floppy_at_end;
29extern char *g_cdrw_drive_is_here;
30static char *g_cdrom_drive_is_here = NULL;
31static char *g_dvd_drive_is_here = NULL;
32extern double g_kernel_version;
33
34/***************** global vars, used only by main.c ******************/
35long diffs = 0L;
36
37extern t_bkptype g_backup_media_type;
38extern int g_loglevel;
39extern char *g_magicdev_command;
40
41/**
42 * Whether we're restoring from ISOs. Obviously not, since this is the
43 * backup program.
44 * @note You @b MUST declare this variable somewhere in your program if
45 * you use libmondo. Otherwise the link will fail.
46 * @ingroup globalGroup
47 */
48bool g_ISO_restore_mode = FALSE;
49
50/* Do we use extended attributes and acl ?
51 * * By default no, use --acl & --attr options to force their usage */
52char *g_getfacl = NULL;
53char *g_getfattr = NULL;
54
55/* Reference to global bkpinfo */
56struct s_bkpinfo *bkpinfo;
57
58/* Make cleanup the finish function */
59void (*mr_cleanup)(int) = finish;
60
61/* To be coded */
62void free_MR_global_filenames(void) {
63}
64
65/****************** subroutines used only by main.c ******************/
66
67
68/**
69 * Print a "don't panic" message to the log and a message about the logfile to the screen.
70 */
71void welcome_to_mondoarchive(void)
72{
73 char *tmp = NULL;
74
75 log_msg(0, "Mondo Archive v%s --- http://www.mondorescue.org", PACKAGE_VERSION);
76 log_msg(0, "running %s binaries", get_architecture());
77 tmp = get_uname_m();
78 log_msg(0, "running on %s architecture", tmp);
79 mr_free(tmp);
80 log_msg(0, "-----------------------------------------------------------");
81 log_msg(0, "NB: Mondo logs almost everything, so don't panic if you see");
82 log_msg(0, "some error messages. Please read them carefully before you");
83 log_msg(0, "decide to break out in a cold sweat. Despite (or perhaps");
84 log_msg(0, "because of) the wealth of messages. some users are inclined");
85 log_msg(0, "to stop reading this log. If Mondo stopped for some reason,");
86 log_msg(0, "chances are it's detailed here. More than likely there's a");
87 log_msg(0, "message at the very end of this log that will tell you what");
88 log_msg(0, "is wrong. Please read it! -Devteam");
89 log_msg(0, "-----------------------------------------------------------");
90
91 log_msg(0, "Zero...");
92 log_msg(1, "One...");
93 log_msg(2, "Two...");
94 log_msg(3, "Three...");
95 log_msg(4, "Four...");
96 log_msg(5, "Five...");
97 log_msg(6, "Six...");
98 log_msg(7, "Seven...");
99 log_msg(8, "Eight...");
100}
101
102
103/**
104 * Do whatever is necessary to insure a successful backup on the Linux distribution
105 * of the day.
106 */
107void distro_specific_kludges_at_start_of_mondoarchive(void)
108{
109 log_msg(2, "Unmounting old ramdisks if necessary");
110 stop_magicdev_if_necessary(); // for RH+Gnome users
111 /*
112 run_program_and_log_output
113 ("umount `mount | grep shm | grep mondo | cut -d' ' -f3`", 2);
114 */
115 unmount_supermounts_if_necessary(); // for Mandrake users whose CD-ROMs are supermounted
116 // stop_autofs_if_necessary(); // for Xandros users
117 mount_boot_if_necessary(); // for Gentoo users with non-mounted /boot partitions
118 clean_up_KDE_desktop_if_necessary(); // delete various misc ~/.* files that get in the way
119}
120
121
122
123/**
124 * Undo whatever was done by distro_specific_kludges_at_start_of_mondoarchive().
125 */
126void distro_specific_kludges_at_end_of_mondoarchive(void)
127{
128 log_msg(2, "Restarting magicdev if necessary");
129 sync();
130 restart_magicdev_if_necessary(); // for RH+Gnome users
131
132 log_msg(2, "Restarting autofs if necessary");
133 sync();
134 // restart_autofs_if_necessary(); // for Xandros users
135
136 log_msg(2, "Restarting supermounts if necessary");
137 sync();
138 remount_supermounts_if_necessary(); // for Mandrake users
139
140 log_msg(2, "Unmounting /boot if necessary");
141 sync();
142 unmount_boot_if_necessary(); // for Gentoo users
143
144// log_msg( 2, "Cleaning up KDE desktop");
145// clean_up_KDE_desktop_if_necessary();
146}
147
148
149/**
150 * Backup/verify the user's data.
151 * What did you think it did, anyway? :-)
152 */
153int main(int argc, char *argv[])
154{
155 char *tmp = NULL;
156 char *tmp1 = NULL;
157 int res = 0;
158 int i = 0;
159 int retval = 0;
160 char *say_at_end = NULL;
161
162 printf("Initializing...\n");
163
164 /* initialize log file with time stamp */
165 unlink(MONDO_LOGFILE);
166 tmp = mr_date();
167 log_msg(0, "Time started: %s", tmp);
168 mr_free(tmp);
169
170 init_bkpinfo();
171
172 /* Memory allocation is done in those functions */
173 malloc_libmondo_global_strings();
174 if (argc == 1) {
175 g_text_mode = FALSE;
176 } else {
177 g_text_mode = TRUE;
178 /* newt mode if -g specified on cli */
179 for (i = 0; i < argc; i++) {
180 if (!strcmp(argv[i],"-g")) {
181 g_text_mode = FALSE;
182 }
183 }
184 }
185 setup_newt_stuff();
186
187 /* Make sure I'm root; abort if not */
188 if (getuid() != 0) {
189 fatal_error("Please run as root.\n");
190 }
191
192 /* If -V, -v or --version then echo version no. and quit */
193 if (argc == 2 && (!strcmp(argv[argc - 1], "-v") || !strcmp(argv[argc - 1], "-V") || !strcmp(argv[argc - 1], "--version"))) {
194 printf("mondoarchive v%s\nSee man page for help\n", PACKAGE_VERSION);
195 finish(0);
196 }
197
198
199 /* make sure PATH environmental variable allows access to mkfs, fdisk, etc. */
200 mr_asprintf(tmp1,"%s:/sbin:/usr/sbin:/usr/local/sbin",getenv("PATH"));
201 setenv("PATH", tmp1, 1);
202 mr_free(tmp1);
203
204 /* Add the ARCH environment variable for ia64 purposes */
205 mr_asprintf(tmp1,"%s",get_architecture());
206 setenv("ARCH", tmp1, 1);
207 mr_free(tmp1);
208
209 /* Add MONDO_SHARE environment variable for mindi */
210 setenv_mondo_share();
211
212 /* Configure the bkpinfo structure, global file paths, etc. */
213 g_main_pid = getpid();
214 log_msg(9, "This");
215
216 set_signals(TRUE); // catch SIGTERM, etc.
217 run_program_and_log_output("dmesg -n1", TRUE);
218
219 log_msg(9, "Next");
220 make_hole_for_dir(MONDO_CACHE);
221
222 welcome_to_mondoarchive();
223 distro_specific_kludges_at_start_of_mondoarchive();
224 g_kernel_version = get_kernel_version();
225
226 if (argc == 4 && !strcmp(argv[1], "getfattr")) {
227 g_loglevel = 10;
228 if (!strstr(argv[2], "filelist")) {
229 printf("Sorry - filelist goes first\n");
230 finish(1);
231 } else {
232 finish(get_fattr_list(argv[2], argv[3]));
233 }
234 finish(0);
235 }
236 if (argc == 4 && !strcmp(argv[1], "setfattr")) {
237 g_loglevel = 10;
238 finish(set_fattr_list(argv[2], argv[3]));
239 }
240
241 if (argc == 3 && !strcmp(argv[1], "wildcards")) {
242 g_loglevel = 10;
243 tmp = mr_stresc(argv[2], "[]*?", '\\');
244 printf("in=%s; out=%s\n", argv[2], tmp);
245 mr_free(tmp);
246 finish(1);
247 }
248
249 if (argc == 4 && !strcmp(argv[1], "getfacl")) {
250 g_loglevel = 10;
251 if (!strstr(argv[2], "filelist")) {
252 printf("Sorry - filelist goes first\n");
253 finish(1);
254 } else {
255 finish(get_acl_list(argv[2], argv[3]));
256 }
257 finish(0);
258 }
259 if (argc == 4 && !strcmp(argv[1], "setfacl")) {
260 g_loglevel = 10;
261 finish(set_acl_list(argv[2], argv[3]));
262 }
263
264 if (argc > 2 && !strcmp(argv[1], "find-cd")) {
265 g_loglevel = 10;
266 if ((tmp = find_cdrw_device()) == NULL) {
267 printf("Failed to find CDR-RW drive\n");
268 } else {
269 printf("CD-RW is at %s\n", tmp);
270 }
271 mr_free(tmp);
272 if ((tmp = find_cdrom_device(FALSE)) == NULL) {
273 printf("Failed to find CD-ROM drive\n");
274 } else {
275 printf("CD-ROM is at %s\n", tmp);
276 }
277 mr_free(tmp);
278 finish(0);
279 }
280
281 if (argc > 2 && !strcmp(argv[1], "find-dvd")) {
282 g_loglevel = 10;
283 if ((tmp = find_dvd_device()) == NULL) {
284 printf("Failed to find DVD drive\n");
285 } else {
286 printf("DVD is at %s\n", tmp);
287 }
288 mr_free(tmp);
289 finish(0);
290 }
291
292 if (argc > 2 && !strcmp(argv[1], "disksize")) {
293 printf("%s --> %ld\n", argv[2], get_phys_size_of_drive(argv[2]));
294 finish(0);
295 }
296 if (argc > 2 && !strcmp(argv[1], "test-dev")) {
297 if (is_dev_an_NTFS_dev(argv[2])) {
298 printf("%s is indeed an NTFS dev\n", argv[2]);
299 } else {
300 printf("%s is _not_ an NTFS dev\n", argv[2]);
301 }
302 finish(0);
303 }
304
305 if (pre_param_configuration()) {
306 fatal_error("Pre-param initialization phase failed. Please review the error messages above, make the specified changes, then try again. Exiting...");
307 }
308
309 /* Process command line, if there is one. If not, ask user for info. */
310 if (argc == 1) {
311 res = interactively_obtain_media_parameters_from_user(TRUE); /* yes, archiving */
312 if (res) {
313 fatal_error("Syntax error. Please review the parameters you have supplied and try again.");
314 }
315 } else {
316 res = handle_incoming_parameters(argc, argv);
317 if (res) {
318 printf("Errors were detected in the command line you supplied.\n");
319 printf("Please review the log file - %s\n", MONDO_LOGFILE );
320 log_msg(1, "Mondoarchive will now exit.");
321 finish(1);
322 }
323 }
324
325/* Finish configuring global structures */
326 if (post_param_configuration()) {
327 fatal_error("Post-param initialization phase failed. Perhaps bad parameters were supplied to mondoarchive? Please review the documentation, error messages and logs. Exiting...");
328 }
329
330 /* If we're meant to backup then backup */
331 if (bkpinfo->backup_data) {
332 res = backup_data();
333 retval += res;
334 if (res) {
335 mr_asprintf(say_at_end, "Data archived. Please check the logs, just as a precaution. ");
336 } else {
337 mr_asprintf(say_at_end, "Data archived OK. ");
338 }
339 }
340
341/* If we're meant to verify then verify */
342 if (bkpinfo->verify_data) {
343 res = verify_data();
344 if (res < 0) {
345 mr_asprintf(tmp, "%d difference%c found.", -res, (-res != 1) ? 's' : ' ');
346 mr_asprintf(say_at_end, "%s", tmp);
347 log_to_screen(tmp);
348 mr_free(tmp);
349 res = 0;
350 }
351 retval += res;
352 }
353
354/* Report result of entire operation (success? errors?) */
355 if (!retval) {
356 mvaddstr_and_log_it(g_currentY++, 0,
357 "Backup and/or verify ran to completion. Everything appears to be fine.");
358 } else {
359 mvaddstr_and_log_it(g_currentY++, 0,
360 "Backup and/or verify ran to completion. However, errors did occur.");
361 }
362
363 if (does_file_exist(MINDI_CACHE"/mondorescue.iso")) {
364 log_to_screen
365 (MINDI_CACHE"/mondorescue.iso, a boot/utility CD, is available if you want it.");
366 }
367
368 if (length_of_file(MONDO_CACHE"/changed.files") > 2) {
369 if (g_text_mode) {
370 log_to_screen("Type 'less "MONDO_CACHE"/changed.files' to see which files don't match the archives");
371 } else {
372 log_msg(1, "Type 'less "MONDO_CACHE"/changed.files' to see which files don't match the archives");
373 log_msg(2, "Calling popup_changelist_from_file()");
374 popup_changelist_from_file(MONDO_CACHE"/changed.files");
375 log_msg(2, "Returned from popup_changelist_from_file()");
376 }
377 } else {
378 unlink(MONDO_CACHE"/changed.files");
379 }
380 if (say_at_end != NULL) {
381 log_to_screen(say_at_end);
382 mr_free(say_at_end);
383 }
384 mr_asprintf(tmp, "umount %s/tmpfs", bkpinfo->tmpdir);
385 run_program_and_log_output(tmp, TRUE);
386 mr_free(tmp);
387 if (bkpinfo->backup_media_type == usb) {
388 log_msg(1, "Unmounting USB device.");
389 if (bkpinfo->media_device == NULL) {
390 fatal_error("USB device set to NULL");
391 }
392 mr_asprintf(tmp, "umount %s1", bkpinfo->media_device);
393 run_program_and_log_output(tmp, TRUE);
394 mr_free(tmp);
395 }
396
397 run_program_and_log_output("mount", 2);
398
399 system("rm -f "MONDO_CACHE"/last-backup.aborted");
400 if (!retval) {
401 printf("Mondoarchive ran OK.\n");
402 } else {
403 printf("Errors occurred during backup. Please check logfile.\n");
404 }
405 distro_specific_kludges_at_end_of_mondoarchive();
406 set_signals(FALSE);
407
408 free_libmondo_global_strings();
409
410
411 if (!g_cdrom_drive_is_here) {
412 log_msg(10, "FYI, g_cdrom_drive_is_here was never used");
413 }
414 if (!g_dvd_drive_is_here) {
415 log_msg(10, "FYI, g_dvd_drive_is_here was never used");
416 }
417
418 /* finalize log file with time stamp */
419 tmp = mr_date();
420 log_msg(0, "Time finished: %s", tmp);
421 mr_free(tmp);
422
423 chdir("/tmp");
424
425 if (!g_text_mode) {
426 popup_and_OK("Mondo Archive has finished its run. Please press ENTER to return to the shell prompt.");
427 log_to_screen("See %s for details of backup run.", MONDO_LOGFILE);
428 } else {
429 printf("See %s for details of backup run.\n", MONDO_LOGFILE);
430 }
431 finish(retval);
432
433 return EXIT_SUCCESS;
434}
Note: See TracBrowser for help on using the repository browser.