Changeset 1977 in MondoRescue for branches/stable/mondo/src/common/libmondo-cli.c
- Timestamp:
- Jun 2, 2008, 10:49:01 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/stable/mondo/src/common/libmondo-cli.c
r1939 r1977 199 199 /* Reference to global bkpinfo */ 200 200 extern struct s_bkpinfo *bkpinfo; 201 202 extern void free_MR_global_filenames(void); 201 203 202 204 /** … … 349 351 bkpinfo->internal_tape_block_size = DEFAULT_INTERNAL_TAPE_BLOCK_SIZE; 350 352 351 /* compulsory */353 /* compulsory */ 352 354 i = flag_set['c'] + flag_set['i'] + flag_set['n'] + 353 355 flag_set['t'] + flag_set['u'] + flag_set['r'] + 354 356 flag_set['w'] + flag_set['C'] + flag_set['U']; 355 if ( i == 0) {357 if ((i == 0) && (! bkpinfo->restore_data)) { 356 358 retval++; 357 359 log_to_screen("You must specify the media type\n"); … … 361 363 log_to_screen("Please specify only one media type\n"); 362 364 } 365 363 366 if (flag_set['K']) { 364 367 g_loglevel = atoi(flag_val['K']); 365 log_msg(1,"Loglevel forced to % s",g_loglevel);368 log_msg(1,"Loglevel forced to %d",g_loglevel); 366 369 if (g_loglevel < 3) { 367 370 g_loglevel = 3; 368 371 } 369 372 } 370 if (flag_set['L'] && flag_set['0']) { 373 374 if ((flag_set['L'] && flag_set['0']) && (! bkpinfo->restore_data)) { 371 375 retval++; 372 376 log_to_screen("You cannot have 'no compression' _and_ LZOP.\n"); 373 377 } 374 bkpinfo->backup_data = flag_set['O']; 378 if (! bkpinfo->restore_data) { 379 bkpinfo->backup_data = flag_set['O']; 380 } 375 381 bkpinfo->verify_data = flag_set['V']; 382 376 383 if (flag_set['I'] && !bkpinfo->backup_data) { 377 384 log_to_screen("-I switch is ignored if just verifying"); … … 401 408 } 402 409 } 403 if (flag_set['W']) { 410 411 if ((flag_set['W']) && (! bkpinfo->restore_data)) { 404 412 bkpinfo->nonbootable_backup = TRUE; 405 413 log_to_screen("Warning - you have opted for non-bootable backup"); … … 409 417 } 410 418 } 411 if (flag_set['t'] && flag_set['H']) { 419 420 if ((flag_set['t'] && flag_set['H']) && (! bkpinfo->restore_data)) { 412 421 fatal_error 413 422 ("Sorry, you may not nuke w/o warning from tape. Drop -H, please."); 414 423 } 424 415 425 if (flag_set['I']) { 416 426 if (!strcmp(bkpinfo->include_paths, "/")) { … … 430 440 if (q != NULL) { 431 441 *q = '\0'; 432 if ( stat(p, &buf) != 0) {442 if ((stat(p, &buf) != 0) && (! bkpinfo->restore_data)) { 433 443 log_msg(1, "ERROR ! %s doesn't exist", p); 434 444 fatal_error("ERROR ! You specified a directory to include which doesn't exist"); … … 436 446 p = q+1 ; 437 447 } else { 438 if ( stat(p, &buf) != 0) {448 if ((stat(p, &buf) != 0) && (! bkpinfo->restore_data)) { 439 449 log_msg(1, "ERROR ! %s doesn't exist", p); 440 450 fatal_error("ERROR ! You specified a directory to include which doesn't exist"); … … 456 466 457 467 if (g_kernel_version >= 2.6 && !flag_set['d'] 458 && (flag_set['c'] || flag_set['w']) ) {468 && (flag_set['c'] || flag_set['w']) && (! bkpinfo->restore_data)) { 459 469 fatal_error 460 470 ("If you are using the 2.6.x kernel, please specify the CD-R(W) device."); … … 471 481 strcpy(bkpinfo->include_paths, flag_val['J']); 472 482 } 473 if (flag_set['c'] || flag_set['w'] || flag_set['C'] || flag_set['r']) { 483 484 if ((flag_set['c'] || flag_set['w'] || flag_set['C'] || flag_set['r']) && (! bkpinfo->restore_data)) { 474 485 if (!flag_set['r'] && g_kernel_version <= 2.5 475 486 && strstr(flag_val['d'], "/dev/")) { … … 522 533 } 523 534 } 524 if (flag_set['t'] && !flag_set['d']) { 535 536 if ((flag_set['t'] && !flag_set['d']) && (! bkpinfo->restore_data)) { 525 537 log_it("Hmm! No tape drive specified. Let's see what we can do."); 526 538 if (find_tape_device_and_size(flag_val['d'], tmp)) { … … 540 552 if (! flag_set['d']) { 541 553 fatal_error 542 ("You need to specify a device file with -d for bootable USB device creation");543 } 544 if ( !flag_set['s']) {554 ("You need to specify a device file with -d for bootable USB device usage"); 555 } 556 if ((!flag_set['s']) && (! bkpinfo->restore_data)) { 545 557 fatal_error("You did not specify a size (-s) for your USB device. Aborting"); 546 558 } … … 559 571 } 560 572 } 561 if (!find_home_of_exe("growisofs")) {562 fatal_error563 ("Please install growisofs (probably part of dvd+rw-tools). If you want DVD support, you need it.");564 }565 if (!find_home_of_exe("dvd+rw-format")) {566 fatal_error567 ("Please install dvd+rw-format (probably part of dvd+rw-tools). If you want DVD support, you need it.");568 }569 573 if (strchr(flag_val['d'], ',')) { 570 574 fatal_error 571 575 ("Please don't give a SCSI node. Give a _device_, preferably a /dev entry, for the parameter of the -d flag."); 572 576 } 573 if (!flag_set['s']) { 574 sprintf(flag_val['s'], "%d", DEFAULT_DVD_DISK_SIZE); // 4.7 salesman's GB = 4.482 real GB = 4582 MB 575 strcat(flag_val['s'], "m"); 576 log_to_screen 577 ("You did not specify a size (-s) for DVD. I'm guessing %s.", 578 flag_val['s']); 579 flag_set['s'] = 1; 577 if (! bkpinfo->restore_data) { 578 if (!find_home_of_exe("growisofs")) { 579 fatal_error 580 ("Please install growisofs (probably part of dvd+rw-tools). If you want DVD support, you need it."); 581 } 582 if (!find_home_of_exe("dvd+rw-format")) { 583 fatal_error 584 ("Please install dvd+rw-format (probably part of dvd+rw-tools). If you want DVD support, you need it."); 585 } 586 if (!flag_set['s']) { 587 sprintf(flag_val['s'], "%d", DEFAULT_DVD_DISK_SIZE); // 4.7 salesman's GB = 4.482 real GB = 4582 MB 588 strcat(flag_val['s'], "m"); 589 log_to_screen 590 ("You did not specify a size (-s) for DVD. I'm guessing %s.", 591 flag_val['s']); 592 flag_set['s'] = 1; 593 } 580 594 } 581 595 /* … … 591 605 ("Please don't give a SCSI node. Give a _device_, preferably a /dev entry, for the parameter of the -d flag."); 592 606 } 593 if ( flag_set['O']) {607 if ((flag_set['O']) && (! bkpinfo->restore_data)) { 594 608 if (flag_set['s']) { 595 609 if (flag_set['t']) { … … 609 623 } 610 624 } 611 } else {/* CD|USB size */625 } else if (! bkpinfo->restore_data) { /* CD|USB size */ 612 626 if (flag_set['s']) { 613 627 if (process_the_s_switch(flag_val['s'])) { … … 619 633 } /* CD-RW */ 620 634 } 635 621 636 if (flag_set['n']) { 622 637 strncpy(bkpinfo->nfs_mount, flag_val['n'], MAX_STR_LEN); … … 636 651 log_msg(3, "isodir= %s", bkpinfo->isodir); 637 652 } 653 638 654 if (flag_set['c']) { 639 655 bkpinfo->backup_media_type = cdr; … … 702 718 q++; 703 719 /* End of bug fix */ 704 if ( stat(p, &buf) != 0) {720 if ((stat(p, &buf) != 0) && (! bkpinfo->restore_data)) { 705 721 log_msg(1, "WARNING ! %s doesn't exist", p); 706 722 } 707 723 p = q+1 ; 708 724 } else { 709 if ( stat(p, &buf) != 0) {725 if ((stat(p, &buf) != 0) && (! bkpinfo->restore_data)) { 710 726 log_msg(1, "WARNING ! %s doesn't exist", p); 711 727 } … … 719 735 4*MAX_STR_LEN - strlen(bkpinfo->exclude_paths)); 720 736 } 737 721 738 if (flag_set['e']) { 722 739 bkpinfo->please_dont_eject = TRUE; 723 740 } 724 if (flag_set['N']) // exclude NFS mounts & devices 741 742 if ((flag_set['N']) && (! bkpinfo->restore_data)) // exclude NFS mounts & devices 725 743 { 726 744 // strncpy(psz, list_of_NFS_devices_and_mounts(), MAX_STR_LEN); … … 733 751 bkpinfo->exclude_paths); 734 752 } 753 735 754 if (strlen(bkpinfo->exclude_paths) >= 4*MAX_STR_LEN) { 736 755 fatal_error 737 756 ("Your '-E' parameter is too long. Increase MAX_STR_LEN"); 738 757 } 758 739 759 if (flag_set['b']) { 740 760 strcpy(psz, flag_val['b']); … … 754 774 bkpinfo->internal_tape_block_size = itbs; 755 775 } 756 if (flag_set['D']) { 776 777 if ((flag_set['D']) && (! bkpinfo->restore_data)) { 757 778 bkpinfo->differential = 1; 758 779 // bkpinfo->differential = atoi (flag_val['D']); … … 762 783 } 763 784 } 785 764 786 if (flag_set['x']) { 765 787 strncpy(bkpinfo->image_devs, flag_val['x'], MAX_STR_LEN / 4); 766 if ( run_program_and_log_output("which ntfsclone", 2)) {788 if ((run_program_and_log_output("which ntfsclone", 2)) && (! bkpinfo->restore_data)) { 767 789 fatal_error("Please install ntfsprogs package/tarball."); 768 790 } 769 791 } 792 770 793 if (flag_set['m']) { 771 794 bkpinfo->manual_cd_tray = TRUE; 772 795 } 773 if (flag_set['k']) { 796 797 if ((flag_set['k']) && (! bkpinfo->restore_data)) { 774 798 strncpy(bkpinfo->kernel_path, flag_val['k'], MAX_STR_LEN); 775 799 if (!strcmp(bkpinfo->kernel_path, "failsafe")) { … … 785 809 } 786 810 } 811 787 812 if (flag_set['p']) { 788 813 strncpy(bkpinfo->prefix, flag_val['p'], MAX_STR_LEN / 4); 789 }790 814 log_msg(1,"Prefix forced to %s",bkpinfo->prefix); 815 } 791 816 792 817 if (flag_set['d']) { /* backup directory (if ISO/NFS) */ … … 801 826 strncpy(bkpinfo->nfs_remote_dir, flag_val['d'], MAX_STR_LEN); 802 827 } else { /* backup device (if tape/CD-R/CD-RW) */ 803 804 828 strncpy(bkpinfo->media_device, flag_val['d'], MAX_STR_LEN / 4); 805 829 } 806 830 } 807 831 808 if ( flag_set['n']) {832 if ((flag_set['n']) && (! bkpinfo->restore_data)) { 809 833 asprintf(&tmp1,"%s/%s/.dummy.txt", bkpinfo->isodir,bkpinfo->nfs_remote_dir); 810 834 sprintf(tmp, "echo hi > %s", tmp1); … … 839 863 } 840 864 841 if ( !flag_set['d'] && !flag_set['n'] && !flag_set['C']) {865 if ((!flag_set['d'] && !flag_set['n'] && !flag_set['C']) && (! bkpinfo->restore_data)) { 842 866 retval++; 843 867 log_to_screen("Please specify the backup device/directory.\n"); … … 845 869 ("You didn't use -d to specify the backup device/directory."); 846 870 } 847 /* optional, obscure */ 871 848 872 for (i = '0'; i <= '9'; i++) { 849 873 if (flag_set[i]) { … … 851 875 } /* not '\0' but '0' */ 852 876 } 877 853 878 if (flag_set['S']) { 854 879 sprintf(bkpinfo->scratchdir, "%s/mondo.scratch.%ld", flag_val['S'], 855 880 random() % 32768); 856 881 } 882 857 883 if (flag_set['T']) { 858 884 setup_tmpdir(flag_val['T']); … … 872 898 } 873 899 } 874 if (flag_set['A']) { 900 901 if ((flag_set['A']) && (! bkpinfo->restore_data)) { 875 902 strncpy(bkpinfo->call_after_iso, flag_val['A'], MAX_STR_LEN); 876 903 } 877 if (flag_set['B']) { 904 905 if ((flag_set['B']) && (! bkpinfo->restore_data)) { 878 906 strncpy(bkpinfo->call_before_iso, flag_val['B'], MAX_STR_LEN); 879 907 } 880 if (flag_set['H']) { 908 909 if ((flag_set['H']) && (! bkpinfo->restore_data)) { 881 910 g_cd_recovery = TRUE; 882 911 } 883 if (flag_set['l']) { 912 913 if ((flag_set['l']) && (! bkpinfo->restore_data)) { 884 914 #ifdef __FreeBSD__ 885 915 # define BOOT_LOADER_CHARS "GLBMR" … … 901 931 #undef BOOT_LOADER_CHARS 902 932 } 933 903 934 if (flag_set['f']) { 904 935 strncpy(bkpinfo->boot_device, … … 907 938 MAX_STR_LEN / 4); 908 939 } 909 if (flag_set['P']) { 940 941 if ((flag_set['P']) && (! bkpinfo->restore_data)) { 910 942 strncpy(bkpinfo->postnuke_tarball, flag_val['P'], MAX_STR_LEN); 911 943 } 944 912 945 if (flag_set['Q']) { 913 946 i = which_boot_loader(tmp); … … 916 949 finish(0); 917 950 } 918 if (flag_set['L']) { 951 952 if ((flag_set['L']) && (! bkpinfo->restore_data)) { 919 953 bkpinfo->use_lzo = TRUE; 920 954 if (run_program_and_log_output("which lzop", 2)) { … … 925 959 } 926 960 927 if ( flag_set['G']) {961 if ((flag_set['G']) && (! bkpinfo->restore_data)) { 928 962 bkpinfo->use_gzip = TRUE; 929 963 if (run_program_and_log_output("which gzip", 2)) { … … 934 968 } 935 969 936 if (!flag_set['o'] 937 && 938 !run_program_and_log_output 939 ("grep -Ei suse /etc/issue.net | grep -E '9.0' | grep 64", 2)) { 970 bkpinfo->use_obdr = FALSE; 971 if (flag_set['o']) { 972 if ((!flag_set['t']) && (! bkpinfo->restore_data)) { 973 log_to_screen("OBDR support is only available for tapes. Use the -t option"); 974 fatal_error("Aborting"); 975 } 976 bkpinfo->use_obdr = TRUE; 977 } 978 979 #ifndef __FreeBSD__ 980 if ((!is_this_a_valid_disk_format("vfat")) && (! bkpinfo->restore_data)) { 940 981 bkpinfo->make_cd_use_lilo = TRUE; 941 982 log_to_screen 942 ("Forcing you to use LILO. SuSE 9.0 (64-bit) has a broken mkfs.vfat binary."); 943 } 944 if (flag_set['o']) { 983 ("Your kernel appears not to support vfat filesystems. I am therefore"); 984 log_to_screen 985 ("using LILO instead of SYSLINUX as the media boot loader."); 986 } 987 if ((run_program_and_log_output("which mkfs.vfat", 2)) && (! bkpinfo->restore_data)) { 945 988 bkpinfo->make_cd_use_lilo = TRUE; 946 }947 #ifndef __FreeBSD__948 else {949 if (!is_this_a_valid_disk_format("vfat")) {950 bkpinfo->make_cd_use_lilo = TRUE;951 log_to_screen952 ("Your kernel appears not to support vfat filesystems. I am therefore");953 log_to_screen954 ("using LILO instead of SYSLINUX as the media boot loader.");955 }956 if (run_program_and_log_output("which mkfs.vfat", 2)) {957 bkpinfo->make_cd_use_lilo = TRUE;958 989 #ifdef __IA32__ 959 960 961 962 990 log_to_screen 991 ("Your filesystem is missing 'mkfs.vfat', so I cannot use SYSLINUX as"); 992 log_to_screen 993 ("your boot loader. I shall therefore use LILO instead."); 963 994 #endif 964 995 #ifdef __IA64__ 965 966 967 968 996 log_to_screen 997 ("Your filesystem is missing 'mkfs.vfat', so I cannot prepare the EFI"); 998 log_to_screen("environment correctly. Please install it."); 999 fatal_error("Aborting"); 969 1000 #endif 970 1001 } 971 1002 #ifdef __IA64__ 972 973 1003 /* We force ELILO usage on IA64 */ 1004 bkpinfo->make_cd_use_lilo = TRUE; 974 1005 #endif 975 }976 1006 #endif 977 1007 … … 980 1010 } 981 1011 982 if ( ! bkpinfo->restore_data) {1012 if (! bkpinfo->restore_data) { 983 1013 i = flag_set['O'] + flag_set['V']; 984 1014 if (i == 0) { 985 1015 retval++; 986 1016 log_to_screen("Specify backup (-O), verify (-V) or both (-OV).\n"); 1017 } 1018 } 1019 1020 if ((! bkpinfo->restore_data) && (flag_set['Z'])) { 1021 fatal_error 1022 ("The -Z switch is only valid in restore mode"); 1023 } 1024 1025 if (flag_set['Z']) { 1026 if (! strcmp(flag_val['Z'], "nuke")) { 1027 bkpinfo->restore_mode = nuke; 1028 } else if (! strcmp(flag_val['Z'], "interactive")) { 1029 bkpinfo->restore_mode = interactive; 1030 } else if (! strcmp(flag_val['Z'], "compare")) { 1031 bkpinfo->restore_mode = compare; 1032 } else if (! strcmp(flag_val['Z'], "mbr")) { 1033 bkpinfo->restore_mode = mbr; 1034 } else if (! strcmp(flag_val['Z'], "iso")) { 1035 bkpinfo->restore_mode = isoonly; 1036 } else if (! strcmp(flag_val['Z'], "isonuke")) { 1037 bkpinfo->restore_mode = isonuke; 1038 } else { 1039 bkpinfo->restore_mode = interactive; 987 1040 } 988 1041 } … … 1082 1135 void help_screen() 1083 1136 { 1084 log_msg(1, "Type 'man mondo -archive' for more information\n");1137 log_msg(1, "Type 'man mondoarchive' for more information\n"); 1085 1138 exit(1); 1086 1139 } … … 1141 1194 } 1142 1195 kill_buffer(); 1196 1197 free_MR_global_filenames(); 1198 1143 1199 fatal_error 1144 ("Mondo archive is terminating in response to a signal from the OS");1200 ("MondoRescue is terminating in response to a signal from the OS"); 1145 1201 finish(254); // just in case 1146 1202 }
Note:
See TracChangeset
for help on using the changeset viewer.