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

Last change on this file since 2898 was 2508, checked in by Bruno Cornec, 10 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.