Changeset 1087 in MondoRescue for branches/stable/mondo/src/common/libmondo-archive.c
- Timestamp:
- Feb 2, 2007, 11:31:00 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/stable/mondo/src/common/libmondo-archive.c
r1080 r1087 27 27 28 28 #include "mr_mem.h" 29 #include "mr_str.h" 30 #include "mr_file.h" 31 29 32 #include <sys/sem.h> 30 33 #include <sys/types.h> … … 534 537 char *tmp; 535 538 char *tmp1 = NULL; 536 char *tmp2 = NULL;537 539 char *scratchdir; 538 540 char *command; 539 char *use_lzo_sz;540 char *use_gzip_sz;541 char *use_comp_sz;542 char *use_star_sz;543 541 char *bootldr_str; 544 542 char *tape_device; 545 543 char *last_filelist_number; 546 char *broken_bios_sz;547 char *cd_recovery_sz;548 544 char *tape_size_sz; 549 545 char *devs_to_exclude; 550 char *use_lilo_sz;551 546 char *value; 552 547 char *bootdev; 553 554 555 548 556 549 /*@ char ************************************************************** */ … … 563 556 int res = 0; 564 557 long estimated_total_noof_slices = 0; 558 559 FILE *fd = NULL; 565 560 566 561 assert(bkpinfo != NULL); … … 568 563 malloc_string(tmp); 569 564 malloc_string(scratchdir); 570 malloc_string(use_lzo_sz);571 malloc_string(use_gzip_sz);572 malloc_string(use_star_sz);573 malloc_string(use_comp_sz);574 565 malloc_string(bootldr_str); 575 malloc_string(tape_device);576 566 malloc_string(last_filelist_number); 577 malloc_string(broken_bios_sz);578 malloc_string(cd_recovery_sz);579 567 malloc_string(tape_size_sz); 580 568 malloc_string(devs_to_exclude); 581 malloc_string(use_lilo_sz); /* BCO: shared between LILO/ELILO */582 569 malloc_string(value); 583 570 malloc_string(bootdev); … … 588 575 bkpinfo->exclude_paths); 589 576 strcpy(devs_to_exclude, call_program_and_get_last_line_of_output(tmp)); 590 sprintf(tmp, "devs_to_exclude = '%s'", devs_to_exclude);591 577 log_msg(2, tmp); 592 578 mvaddstr_and_log_it(g_currentY, 0, … … 601 587 } 602 588 lines_in_filelist = count_lines_in_file(tmp); 603 sprintf(tmp, "%s/LAST-FILELIST-NUMBER", bkpinfo->tmpdir);604 589 strcpy(last_filelist_number, last_line_of_file(tmp)); 605 if (IS_THIS_A_STREAMING_BACKUP(bkpinfo->backup_media_type)) {606 sprintf(tape_size_sz, "%ld", bkpinfo->media_size[1]);607 strcpy(tape_device, bkpinfo->media_device);608 } else {609 tape_size_sz[0] = '\0';610 tape_device[0] = '\0';611 }612 if (bkpinfo->use_lzo) {613 strcpy(use_lzo_sz, "yes");614 } else {615 strcpy(use_lzo_sz, "no");616 }617 if (bkpinfo->use_gzip) {618 strcpy(use_gzip_sz, "yes");619 } else {620 strcpy(use_gzip_sz, "no");621 }622 if (bkpinfo->use_star) {623 strcpy(use_star_sz, "yes");624 } else {625 strcpy(use_star_sz, "no");626 }627 628 if (bkpinfo->compression_level > 0) {629 strcpy(use_comp_sz, "yes");630 } else {631 strcpy(use_comp_sz, "no");632 }633 634 strcpy(broken_bios_sz, "yes"); /* assume so */635 if (g_cd_recovery) {636 strcpy(cd_recovery_sz, "yes");637 } else {638 strcpy(cd_recovery_sz, "no");639 }640 if (bkpinfo->make_cd_use_lilo) {641 strcpy(use_lilo_sz, "yes");642 } else {643 strcpy(use_lilo_sz, "no");644 }645 590 646 591 if (!bkpinfo->nonbootable_backup … … 758 703 bootldr_str, bkpinfo->boot_device); 759 704 log_to_screen(tmp); 760 sprintf(tmp, "%s/BOOTLOADER.DEVICE", bkpinfo->tmpdir);761 if (write_one_liner_data_file(tmp, bkpinfo->boot_device)) {762 log_msg(1, "%ld: Unable to write one-liner boot device", __LINE__);763 }764 switch (bkpinfo->backup_media_type) {765 case cdr:766 strcpy(value, "cdr");767 break;768 case cdrw:769 strcpy(value, "cdrw");770 break;771 case cdstream:772 strcpy(value, "cdstream");773 break;774 case tape:775 strcpy(value, "tape");776 break;777 case udev:778 strcpy(value, "udev");779 break;780 case iso:781 strcpy(value, "iso");782 break;783 case nfs:784 strcpy(value, "nfs");785 break;786 case dvd:787 strcpy(value, "dvd");788 break;789 case usb:790 strcpy(value, "usb");791 break;792 default:793 fatal_error("Unknown backup_media_type");794 }795 sprintf(tmp, "%s/BACKUP-MEDIA-TYPE", bkpinfo->tmpdir);796 if (write_one_liner_data_file(tmp, value)) {797 res++;798 log_msg(1, "%ld: Unable to write one-liner backup-media-type",799 __LINE__);800 }801 log_to_screen(bkpinfo->tmpdir);802 sprintf(tmp, "%s/BOOTLOADER.NAME", bkpinfo->tmpdir);803 if (write_one_liner_data_file(tmp, bootldr_str)) {804 res++;805 log_msg(1, "%ld: Unable to write one-liner bootloader.name",806 __LINE__);807 }808 sprintf(tmp, "%s/DIFFERENTIAL", bkpinfo->tmpdir);809 if (bkpinfo->differential) {810 res += write_one_liner_data_file(tmp, "1");811 } else {812 res += write_one_liner_data_file(tmp, "0");813 }814 815 if (g_getfattr) {816 mr_asprintf(&tmp1, "%s/XATTR", bkpinfo->tmpdir);817 if (write_one_liner_data_file(tmp1, "TRUE")) {818 log_msg(1, "%ld: Unable to write one-liner XATTR",819 __LINE__);820 }821 mr_free(tmp1);822 }823 if (g_getfacl) {824 mr_asprintf(&tmp1, "%s/ACL", bkpinfo->tmpdir);825 if (write_one_liner_data_file(tmp1, "TRUE")) {826 log_msg(1, "%ld: Unable to write one-liner ACL",827 __LINE__);828 }829 mr_free(tmp1);830 }831 705 832 706 estimated_total_noof_slices = … … 843 717 log_OS_error("Unable to make mnt floppy directory"); 844 718 } 845 sprintf(tmp, "BTW, I'm telling Mindi your kernel is '%s'", 846 bkpinfo->kernel_path); 847 848 log_msg(1, "lines_in_filelist = %ld", lines_in_filelist); 719 720 /* Prepare interface with mindi through a configuration file 721 * under /var/cache/mondo by default 722 * and the mondorestore configuration file at the same time that 723 * will be included by mindi on the initrd */ 724 725 fd = mr_fopen(MONDO_CACHE"/mindi.conf", "w"); 726 fd1 = mr_fopen(MONDORESTORECFG, "a"); 727 728 mr_fprintf(fd, "mindi_kernel=%s\n", bkpinfo->kernel_path); 729 mr_fprintf(fd, "mindi_use_own_kernel=yes\n"); 730 731 mr_fprintf(fd1, "files-in-filelist %ld\n", lines_in_filelist); 732 mr_fprintf(fd1, "internal-tape-block-size %ld\n", bkpinfo->internal_tape_block_size); 733 mr_fprintf(fd1, "total-slices %ld\n", estimated_total_noof_slices); 734 mr_fprintf(fd1, "excluded-devs %s\n", devs_to_exclude); 735 mr_fprintf(fd1, "image-devs %s\n", bkpinfo->image_devs); 736 mr_fprintf(fd1, "last-filelist-number %s\n", last_filelist_number); 737 mr_fprintf(fd1, "bootloader.name %s\n", bootldr_str); 738 mr_fprintf(fd1, "bootloader.device %s\n", bkpinfo->boot_device); 739 740 switch (bkpinfo->backup_media_type) { 741 case cdr: 742 mr_fprintf(fd1, "backup-media-type cdr\n"); 743 break; 744 case cdrw: 745 mr_fprintf(fd1, "backup-media-type cdrw\n"); 746 break; 747 case cdstream: 748 mr_fprintf(fd1, "backup-media-type cdstream\n"); 749 break; 750 case tape: 751 mr_fprintf(fd1, "backup-media-type tape\n"); 752 break; 753 case udev: 754 mr_fprintf(fd1, "backup-media-type udev\n"); 755 break; 756 case iso: 757 mr_fprintf(fd1, "backup-media-type iso\n"); 758 break; 759 case nfs: 760 mr_fprintf(fd1, "backup-media-type nfs\n"); 761 break; 762 case dvd: 763 mr_fprintf(fd1, "backup-media-type dvd\n"); 764 break; 765 case usb: 766 mr_fprintf(fd1, "backup-media-type usb\n"); 767 break; 768 default: 769 fatal_error("Unknown backup_media_type"); 770 } 849 771 850 772 if (bkpinfo->backup_media_type == usb) { 851 mr_asprintf(&tmp2, "--usb %s", bkpinfo->media_device); 773 mr_fprintf(fd, "mindi_write_usb=yes\n"); 774 mr_fprintf(fd, "mindi_usb_device=%s\n", bkpinfo->media_device); 775 } 776 if (IS_THIS_A_STREAMING_BACKUP(bkpinfo->backup_media_type)) { 777 mr_fprintf(fd, "mindi_write_tape=yes\n"); 778 mr_fprintf(fd, "mindi_tape_device=%s\n", bkpinfo->media_device); 779 mr_fprintf(fd1, "media-dev %s\n", bkpinfo->media_device); 780 mr_fprintf(fd1, "media-size %ld\n", bkpinfo->media_size[1]); 781 } 782 if (bkpinfo->compression_level > 0) { 783 mr_fprintf(fd1, "use-comp yes\n"); 852 784 } else { 853 mr_asprintf(&tmp2,""); 854 } 785 mr_fprintf(fd1, "use-comp no\n"); 786 } 787 if (bkpinfo->use_gzip) { 788 mr_fprintf(fd1, "use-gzip yes\n"); 789 } else { 790 mr_fprintf(fd1, "use-gzip no\n"); 791 } 792 if (bkpinfo->use_lzo) { 793 mr_fprintf(fd1, "use-lzo yes\n"); 794 } else { 795 mr_fprintf(fd1, "use-lzo no\n"); 796 } 797 if (bkpinfo->use_star) { 798 mr_fprintf(fd1, "use-star yes\n"); 799 } else { 800 mr_fprintf(fd1, "use-star no\n"); 801 } 802 if (g_getfattr) { 803 mr_fprintf(fd1, "xattr yes\n"); 804 } else { 805 mr_fprintf(fd1, "xattr no\n"); 806 } 807 if (g_getfacl) { 808 mr_fprintf(fd1, "acl yes\n"); 809 } else { 810 mr_fprintf(fd1, "acl no\n"); 811 } 812 813 if (g_cd_recovery) { 814 mr_fprintf(fd1, "use-cdrecovery yes\n"); 815 } else { 816 mr_fprintf(fd1, "use-cdrecovery no\n"); 817 } 818 if (bkpinfo->make_cd_use_lilo) { 819 mr_fprintf(fd1, "use-lilo yes\n"); 820 } else { 821 mr_fprintf(fd1, "use-lilo no\n"); 822 } 823 if (bkpinfo->nonbootable_backup) { 824 mr_fprintf(fd1, "non-bootable yes\n"); 825 } else { 826 mr_fprintf(fd1, "non-bootable no\n"); 827 } 828 if (bkpinfo->differential) { 829 mr_fprintf(fd1, "differential 1\n"); 830 } else { 831 mr_fprintf(fd1, "differential 0\n"); 832 } 833 834 mr_fclose(fd); 835 mr_fprintf(fd1, "datestamp %s\n", mr_date()); 836 mr_fclose(fd1); 855 837 856 838 sprintf(command, 857 /* "mindi --custom 2=%s 3=%s/images 4=\"%s\" 5=\"%s\" \ 858 6=\"%s\" 7=%ld 8=\"%s\" 9=\"%s\" 10=\"%s\" \ 859 11=\"%s\" 12=%s 13=%ld 14=\"%s\" 15=\"%s\" 16=\"%s\" 17=\"%s\" 18=%ld 19=%d",*/ 860 "mindi %s --custom '%s' '%s/images' '%s' '%s' \ 861 '%s' %ld '%s' '%s' '%s' \ 862 '%s' %s %ld '%s' '%s' '%s' '%s' %ld %d '%s'", 863 tmp2, 839 "mindi --custom '%s' '%s/images'", 864 840 bkpinfo->tmpdir, // parameter #2 865 841 bkpinfo->scratchdir, // parameter #3 866 bkpinfo->kernel_path, // parameter #4 867 tape_device, // parameter #5 868 tape_size_sz, // parameter #6 869 lines_in_filelist, // parameter #7 (INT) 870 use_lzo_sz, // parameter #8 871 cd_recovery_sz, // parameter #9 872 bkpinfo->image_devs, // parameter #10 873 broken_bios_sz, // parameter #11 874 last_filelist_number, // parameter #12 (STRING) 875 estimated_total_noof_slices, // parameter #13 (INT) 876 devs_to_exclude, // parameter #14 877 use_comp_sz, // parameter #15 878 use_lilo_sz, // parameter #16 879 use_star_sz, // parameter #17 880 bkpinfo->internal_tape_block_size, // parameter #18 (LONG) 881 bkpinfo->differential, // parameter #19 (INT) 882 use_gzip_sz); // parameter #20 (STRING) 883 884 mr_free(tmp2); 885 886 // Watch it! This next line adds a parameter... 887 if (bkpinfo->nonbootable_backup) { 888 strcat(command, " NONBOOTABLE"); // parameter #21 (STRING) 889 } 842 //bkpinfo->kernel_path, // parameter #4 843 //tape_device, // parameter #5 844 //tape_size_sz, // parameter #6 845 //lines_in_filelist, // parameter #7 (INT) 846 //use_lzo_sz, // parameter #8 847 //cd_recovery_sz, // parameter #9 848 //bkpinfo->image_devs, // parameter #10 849 //broken_bios_sz, // parameter #11 always yes 850 //last_filelist_number, // parameter #12 (STRING) 851 //estimated_total_noof_slices, // parameter #13 (INT) 852 //devs_to_exclude, // parameter #14 853 //use_comp_sz, // parameter #15 854 //use_lilo_sz, // parameter #16 855 //use_star_sz, // parameter #17 856 //bkpinfo->internal_tape_block_size, // parameter #18 (LONG) 857 //bkpinfo->differential, // parameter #19 (INT) 858 //use_gzip_sz); // parameter #20 (STRING) 859 ); 860 890 861 log_msg(2, command); 891 862 892 // popup_and_OK("Pausing"); 893 894 res = 895 run_program_and_log_to_screen(command, 896 "Generating boot+data disks"); 863 res = run_program_and_log_to_screen(command, "Generating boot+data disks"); 897 864 if (bkpinfo->nonbootable_backup) { 898 865 res = 0; … … 936 903 } 937 904 mr_free(tmp); 938 mr_free(use_lzo_sz);939 mr_free(use_gzip_sz);940 905 mr_free(scratchdir); 941 mr_free(use_comp_sz);942 906 mr_free(bootldr_str); 943 mr_free(tape_device);944 907 mr_free(last_filelist_number); 945 mr_free(broken_bios_sz);946 908 mr_free(cd_recovery_sz); 947 909 mr_free(tape_size_sz); 948 910 mr_free(devs_to_exclude); 949 mr_free(use_lilo_sz);950 911 mr_free(value); 951 912 mr_free(bootdev); 952 913 mr_free(command); 953 mr_free(use_star_sz);954 914 return (res); 955 915 } … … 1162 1122 closeout_tape(bkpinfo); 1163 1123 } else 1164 /* write final ISO */1124 /* write final ISO/USB */ 1165 1125 { 1166 1126 res = write_final_iso_if_necessary(bkpinfo); … … 1892 1852 if (bkpinfo->nonbootable_backup) { 1893 1853 log_msg(1, "Making nonbootable backup"); 1894 // FIXME --- change mkisofs string to MONDO_MKISOFS_NONBOOTABLE and add ' .' at end1895 1854 res = 1896 1855 eval_call_to_make_ISO(bkpinfo, … … 3658 3617 bkpinfo->media_size[g_current_media_number]) { 3659 3618 sprintf(tmp, 3660 "Warning! CD is too big. It occupies %ld KB, which is more than the %ld KB allowed.", 3619 "Warning! %s is too big. It occupies %ld KB, which is more than the %ld KB allowed.", 3620 media_descriptor_string(bkpinfo->backup_media_type), 3661 3621 (long) space_occupied_by_cd(bkpinfo->scratchdir), 3662 3622 (long) bkpinfo->media_size[g_current_media_number]); 3663 3623 log_to_screen(tmp); 3664 3624 } 3665 sprintf(isofile, "%s/%s/%s-%d.iso", bkpinfo->isodir, 3625 if (bkpinfo->backup_media_type != usb) { 3626 sprintf(isofile, "%s/%s/%s-%d.iso", bkpinfo->isodir, 3666 3627 bkpinfo->nfs_remote_dir, bkpinfo->prefix, 3667 3628 g_current_media_number); 3629 } else { 3630 } 3668 3631 for (that_one_was_ok = FALSE; !that_one_was_ok;) { 3669 res = make_iso_fs(bkpinfo, isofile); 3632 if (bkpinfo->backup_media_type != usb) { 3633 res = make_iso_fs(bkpinfo, isofile); 3634 } else { 3635 } 3670 3636 if (g_current_media_number == 1 && !res 3671 3637 && (bkpinfo->backup_media_type == cdr … … 3968 3934 3969 3935 setenv("MONDO_SHARE", MONDO_SHARE, 1); 3936 setenv("MONDORESTORECFG", MONDORESTORECFG, 1); 3937 setenv("MONDO_CACHE", MONDO_CACHE, 1); 3970 3938 }
Note:
See TracChangeset
for help on using the changeset viewer.