Changeset 576 in MondoRescue for branches/2.0.8/mondo


Ignore:
Timestamp:
May 25, 2006, 2:00:37 PM (18 years ago)
Author:
bcornec
Message:

2.08 synced with stable as of r575
VERSION files updated

Location:
branches/2.0.8/mondo
Files:
1 deleted
54 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/2.0.8/mondo/ChangeLog

    r438 r576  
    22
    33MONDO CHANGES
     4
     52.0.8 (2006-05-25)
     6- new build process (Bruno Cornec)
     7- Fix a bug in .spec for RPM build (%attr now unused)
     8  (Bruno Cornec)
     9- Support of dm and LVM v2 (Andree Leidenfrost)
     10- New mr_strtok functionn added and used for dm support (Andree Leidenfrost)
     11- Complete doc is now a separate package. mondo still contains the
     12  man pages and howto in minimal useful formats
     13  (Bruno Cornec)
     14- HOWTO now contains a new chapter on unattended support for mondo
     15- Increase size (4 times) of include|exclude variables
     16- Fix a bug on -I and -E not working with multiple parameters
     17- Fix a bug in verify for NFS by swapping nfs_remote_dir and isodir when
     18  assembling name for image file to verify
     19  (Andree Leidenfrost)
     20- Fix mondo when restoring filenames containing blanks
     21  (still a problem for filenames with ')
     22  (Bruno Cornec)
     23- Fix a RPM generation bug for rh7.3 (i386-redhat-linux prefix for binaries)
     24  (Bruno Cornec)
    425
    5262.0.7 (2006-03-10)
  • branches/2.0.8/mondo/configure.in

    r519 r576  
    11dnl Autoconfigure file for Mondo Rescue v2.0x
    2 dnl Mondo by Hugo Rabson
     2dnl Mondo by Mondo dev team
    33dnl This script by Joshua Oreman
    44dnl
  • branches/2.0.8/mondo/distributions/gentoo/mondo.ebuild

    r535 r576  
    1 # Copyright 1999-2005 Gentoo Foundation
     1# Copyright 1999-2004 Gentoo Foundation
    22# Distributed under the terms of the GNU General Public License v2
     3# $Header: $
     4
    35# $Id$
    46
     
    79DESCRIPTION="The premier GPL disaster recovery solution."
    810HOMEPAGE="http://www.mondorescue.org"
    9 SRC_URI="ftp://ftp.mondorecue.org/src/${PN/-rescue/}-${PV}.tgz"
     11SRC_URI="ftp://ftp.mondorecue.org/src/${PN/-rescue/}-${PV}-${PR}.tgz"
    1012
    1113LICENSE="GPL-2"
     
    2729    >=sys-boot/syslinux-1.52"
    2830
    29 S=${WORKDIR}/${PN/-rescue/}-${PV}
     31S=${WORKDIR}/${PN/-rescue/}-${PV}-${PR}
    3032
    3133src_unpack() {
     
    3840    elibtoolize
    3941    econf || die "Configuration failed"
    40     emake || die "Make failed"
    41     #make VERSION=VVV CFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_REENTRANT"
     42    emake VERSION=VVV || die "Make failed"
    4243}
    4344
    4445src_install() {
    45     #make install DESTDIR=${D} || die "make install failed"
    46     einstall || die "Install failed"
     46    make install DESTDIR=${D} || die "make install failed"
     47    #einstall || die "Install failed"
    4748    exeinto /usr/share/mondo
    4849    doexe mondo/autorun
     
    5455    einfo "Or visit the website @ ${HOMEPAGE}"
    5556    echo
    56     ewarn "This package is still in unstable."
     57    ewarn "This package is a new version after a long gap."
    5758    ewarn "Please report bugs to http://bugs.gentoo.org/"
    5859    ewarn "However, please do an advanced query to search for bugs"
  • branches/2.0.8/mondo/distributions/mandriva/changelog

    r424 r576  
    99- Add -p option
    1010
    11 * Tue May 03 2005 Hugo Rabson <hugorabson@msn.com> 2.04_cvs_20050503
    12 
    13 - made mondo more clever about finding its home. Avoids mondo considering
    14   directories like '/usr/share/doc/momdo' as its home.
    15 
    16 * Wed Aug 04 2004 Hugo Rabson <hugorabson@msn.com> 2.03
    17 
    18 - test sanity of user-specified tempdir
    19 - better SLES8 support
    20 
    21 * Mon Jun 28 2004 Hugo Rabson <hugorabson@msn.com> 2.02
    22 
    23 - instead of using 'dd' to erase partition table, delete existing
    24   partitions w/ the same call to fdisk that is used to create the
    25   new partitions; this should avoids locking up the partition table
    26 - set bootable partition in the above same call to fdisk, for
    27   the same reason (avoids locking up the partition table)
    28 - better software RAID support
    29 - mount ext3 partitions as ext2 when restoring - better for Debian
    30 - better star, ACL support
    31 - added ACL, xattr support for afio users
    32 
    33 * Sat Jun 26 2004 Hugo Rabson <hugorabson@msn.com> 2.01
    34 
    35 - fixed cvs for SuSE systems
    36 - fixed NTFS backup/restore bug relating to partimagehack
    37   log file overflow and NTFS v non-NTFS differentiation
    38 - more reliable extraction of config info from CDs, floppies
    39 - better support of ISO dirs at restore-time (Conor Daly)
    40 - fixed spec file for SuSE users
    41 - added ldconfig to install section
    42 
    43 * Sat Jun 19 2004 Hugo Rabson <hugorabson@msn.com> 2.00
    44 
    45 - first 2.0 release
    46 - updated grub-install.patched to support SuSE and Red Hat
    47 - call 'mt' to set block size to 32K before opening in/out tape
    48 - updated mondo-prep.c to create each disk's partitions all at once
    49   (one call per drive) instead of one call to fdisk per partition
    50 - when extracting cfg file and mountlist from all.tar.gz (tape copy),
    51   use block size of INTERNAL_TAPE_BLK_SIZE, not TAPE_BLOCK_SIZE
    52 - added star and rudimentary SELinux support
    53 - fixed lots of bugs
    54 - all logging now goes to /var/log/mondo-archive.log, with symlink
    55   to /tmp/mondo-restore.log for restore-time log-tracking
    56 - added grub-install.patched
    57 - removed embleer & other binaries
    58 - added '-b' to specify block size
    59 - added '-R' for star support
    60 
    61 * Thu Mar 25 2004 Bruno Cornec <Bruno.Cornec@hp.com> 1.7_cvs-20040325
    62 
    63 - ia64 fixes
    64 
    65 * Fri Nov 07 2003 Joshua Oreman <oremanj@get-linux.org> 1.7_cvs-20031107
    66 
    67 - fixed symbolic links for libraries
    68 - added support for boot/root multi floppies
    69 
    70 - added kdelibs as xmondo dependency
    71 - added xmondo pixmap installation
    72 - better find_cdrom_device(), to cope w/ multiple CD writers
    73 - fixed -m and -Vc flags
    74 - fixed NTFS support!
    75 - bootable CD uses native, not El Torito, support now
    76 - removed mondo-makefilelist
    77 - added 2.6 kernel support
    78 - if 2.6 kernel, insist that the user specify CD device
    79 - drop Embleer; insist on ms-sys and parted if Windows partition
    80 
    81 * Wed Nov 05 2003 Jesse Keating <jkeating@j2solutions.net> 1.7_cvs-20031105.1
    82 
    83 - added -devel package
    84 
    85 * Tue Nov 04 2003 Jesse Keating <jkeating@j2solutions.net> 1.7_cvs-20031104.1
    86 
    87 - made xmondo a second package
    88 - added ability to specify --without xmondo at build time
    89 
    90 * Sun Nov 02 2003 Jesse Keating <jkeating@j2solutions.net> 1.7_cvs-20031102.1
    91 
    92 - Clean up, added spanish translation
    93 - Set prefix to be /usr
    94 - added/fixed Requires
    95 - remove CVS directories prior to building
    96 
    97 * Thu Oct 23 2003 Hugo Rabson <hugorabson@msn.com> 1.75_cvs_20031023
    98 
    99 - nothing yet
    100 
    101 * Wed Oct 22 2003 Hugo Rabson <hugorabson@msn.com> 1.75
    102 
    103 - fixed chmod/chown bug (Jens Richter)
    104 - ask user to confirm NFS mountpoint in Interactive Mode
    105 - rewritten format_everything() to make sure LVMs, RAIDs and
    106   regular partitions are prepped in the correct order
    107 - better magicdev support
    108 - rewritten external binary caller subroutine
    109 - DVD support added
    110 - better backup-time control gui; offer to exclude nfs if appl.
    111 - fixed multi-tape support
    112 - re-implemented -D and -J
    113 - fixed bug in extract_config_file_from_ramdisk() which
    114   affected tape+floppy users
    115 - updated is_incoming_block_valid() to make it
    116   return end-of-tape if >300 flotsam blocks
    117 - unmount CD-ROM before burning (necessary for RH8/9)
    118 - fixed some stray assert()'s
    119 - fixed bug in grub-MR (Christian)
    120 - make user remove floppy/CD before restoring interactively from tape
    121 - fixed bug in am_I_in_disaster_recovery_mode()
    122 - added code to nuke_mode() to make sure NFS
    123   (backup) share is mounted in Nuke Mode
    124 - improved tape device detection code
    125 - better GRUB support
    126 - better logging of changed bigfiles at compare-time
    127 - better NTFS support, thanks to partimagehack-static
    128 - better logging
    129 - rewrote tape-handling code, breaking compatibility w/ previous versions
    130 - fixed ISO/CD biggiefile verification bug in mondoarchive
    131 - fixed bug which stopped boot/compare-time changelist from popping up
    132 - replaced mondo-makefilelist with C code - faster, cleaner
    133 - tweaked GUI - better feedback
    134 
    135 * Wed May 28 2003 Anonymous <root@rohan> 1.74
    136 
    137 - misc fixes (Michael Hanscho's friend)
    138 - added rudimentary support for SME
    139 - added better label support
    140 - fixed biggietime atime/ctime restoration bug 73
    141 - fixed 'default boot loader' detection bug (Joshua Oreman)
    142 - use single-threaded make_afioballs_and_images() if FreeBSD
    143 - fixed mondoarchive -Vi multi-CD verify bug (Tom Mortell)
    144 - superior get_phys_size_of_drive() (Joshua Oreman)
    145 - fixed RAID-related bug in where_is_root_mounted()
    146 - ISO tweaks
    147 - fixed silly bug in load_filelist() which stopped
    148   funny German filenames from being handled properly
    149 - fixed various calls to popup_and_get_string()
    150 - fixed spec file
    151 - reject -E /
    152 - added partimagehack to the mix
    153 
    154 * Tue May 20 2003 Anonymous <root@rohan> 1.73
    155 
    156 - mark devices as bootable _after_ unmounting them
    157 - resolve boot device (-f) if softlink
    158 - post_param_configuration() --- store iso-dev and isodir
    159 - added post-nuke-sample.tgz to package
    160 - Nuke Mode now checks mountlist against hardware; offer user
    161   opportunity to edit mountlist if insane; if user declines, abort
    162 - added lots of assert()'s and other checks
    163 - ran code thru Valgrind to catch & fix some memory leaks
    164 - made mondo-restore.c smaller by moving some subroutines to
    165   common/libmondo-raid.c and mondorestore/mondo-rstr-compare.c
    166 - added '-Q' to let user test mondoarchive's ability to find
    167   their boot loader and type
    168 - improved which_boot_loader()
    169 - when burning or comparing to a CD, defeat autorun if it is
    170   running, to avoid confusing mondoarchive and the user
    171 - if original backup media no longer available at boot-time
    172   then offer user chance to choose another media source
    173 - when booting, type 'nuke noresize' to nuke w/o resizing
    174   mountlist to fill your drives
    175 - add 'textonly' when booting, to avoid using Newt gui
    176 - run nice(20) to prioritize mondoarchive at start
    177 - don't pause and wait for next blank CD at backup-time
    178   unless necessary (e.g. previous CD has not been removed)
    179 - get_phys_size_of_drive() --- better support of older drives
    180 - don't eject if "donteject" is in kernel's command line
    181 - cleaned up segfault-handling
    182 - added Conor's strip_path() to improve file list display
    183 - added Herman Kuster's multi-level bkp patch
    184 - better boot-time screen/message
    185 - added Joshua Oreman's FreeBSD patches x3
    186 - fixed interactive/textonly support
    187 - fixed support for subdir-within-NFS-mount
    188 - fixed "Can't backup if ramdisk not mounted" bug
    189 - try to work around eccentricities of multi-CD drive PCs
    190 - misc clean-ups (Steve Hindle)
    191 
    192 * Tue Apr 08 2003 Hugo Rabson <hugorabson@msn.com> 1.72
    193 
    194 - LVM/RAID bugs fixed (Brian Borgeson)
    195 - major clean-up of code (Stan Benoit)
    196 - make-me-bootable fix (Juraj Ziegler)
    197 - fixed problem w/ multi-ISO verify cycle (Tom Mortell)
    198 - removed duplicate entry from makefile
    199 - if root is /dev/root then assume not a ramdisk
    200 - reject relative paths if -d flag (Alessandro Polverini)
    201 - fixed potentially infinite loop in log_to_screen (Tom Mortell)
    202 - add '/' to custom filelist as workaround for obscure bug
    203 - ask user speed of CDRW if writing to CD
    204 - find_cdrom_device() --- if nonexistent/not found then
    205   make sure to return '' as dev str and 1 as res
    206 - tweaked restore scripts tgz
    207 - cleaned up find_cdrom_device()
    208 - if user creates /usr/share/mondo/payload.tgz then untar
    209   payload to CD at backup-time
    210 - fixed insist_on_this_cd_number()
    211 - fixed am_i_in_disaster_recovery_mode()
    212 - misc clean-up (Tom Mortell)
    213 - made code more legible
    214 - fixed post-nuke support
    215 - added -e support
    216 - fixed nfs support
    217 - fixed iso support
    218 - at restore-time, only sort mountlist internally,
    219   in mount_all_devices() and unmount_all_devices()
    220 - fixed cosmetic bug in label-partitions-as-necessary
    221 - updated documentation
    222 - fixed fstab-hacking scripts
    223 
    224 * Wed Feb 12 2003 Hugo Rabson <hugorabson@msn.com> 1.71
    225 
    226 - log newt, slang, ncurses info
    227 - updated man page
    228 - handle % chars in issue.net properly (Heiko Schlittermann)
    229 - fixed serious NFS restore bug
    230 - cleaned up spec file; it should cause fewer problems now (Jesse Keating)
    231 - changed various strcpy() calls to strncpy() calls
    232 - added mondo-makefilelist to makefile (Mikael Hultgren)
    233 - mount_cdrom() better at handling multiple CD drives
    234 - exclude /media/cdrom,cdrecorder,floppy
    235 - sensibly_set_tmpdir_and_scratchdir() --- exclude smb and smbfs
    236 - better logging by eval_call_to_make_ISO()
    237 - accept -J <fname> to let user provide their own fs catalog
    238   instead of -I <paths> to backup
    239 - if dir excluded with -E or included with -I and dir is actually
    240   a softlink then exclude/include the dir pointed to, as well
    241 - better location for manpage
    242 - adjusted block size of tarball at start of tape, to help
    243   users w/ broken tape driver firmware
    244 - sort -u fstab after modifying it
    245 - if backup type is nfs then don't estimate noof media
    246 - fixed Makefile (Mikael Hultgren)
    247 - updated manpage
    248 
    249 * Sat Dec 07 2002 Hugo Rabson <hugo@firstlinux.net> 1.70
    250 
    251 - new devel branch opened
    252 
    253 * Mon Dec 02 2002 Hugo Rabson <hugo@firstlinux.net> 1.52
    254 
    255 - fixed bug in multithreading
    256 - use new grub-MR instead of grub-install
    257 - wipe only the partition table (not the MBR) when partitioning drives
    258 - ignore lilo.conf.anaconda when looking for lilo.conf file
    259 - accepts '-l RAW' to backup/restore original boot sector instead
    260   of running grub or lilo to init it after restoring
    261 - fixed&updated stabgrub-me script; software RAID + GRUB work now
    262 - mount/unmount /boot partition for Gentoo 1.2 users
    263 - re-enabled extra tape checksums
    264 - disabled spurious warnings
    265 - unmount/remount supermounts at start/end of live restore, if nec.
    266 - cleaned up mondo's tape block handling (now, TAPE_BLOCK_SIZE=128K
    267   and I've added INTERNAL_TAPE_BLK_SIZE=32K variable for buffering)
    268 - added Makefile
    269 - added -l RAW, to backup and restore original MBR
    270 - cleaned up iso_mode() and nfs restoring
    271 - create /mnt/RESTORING/mnt/.boot.d for Gentoo users
    272 - made mondorestore CD bootable for ArkLinux users
    273 - if user runs as 'su' not 'su -' then work around
    274 
    275 * Sun Nov 17 2002 Hugo Rabson <hugo@firstlinux.net> 1.51
    276 
    277 - pop-up list of changed files, at end of verification phase
    278 - better handling of changed.files list at restore-time
    279 - lots of CD-related fixes
    280 - added '-N' flag --- to let user exclude all NFS-related mounts&devices
    281 - better handling of 'kill'
    282 - restructuring of code to ease integration of mondo w/XMondo
    283 - fixed obscure bug in find_and_mount_actual_cd()
    284 - if / or /root has <50MB free then abort & complain
    285 - fixed install.sh
    286 - fixed .spec file
    287 - updated documentation
    288 - commented code
    289 - updated man page
    290 - added -v / --version flag
    291 - replace convoluted grep with wc (KP)
    292 - fixed bug affecting restoration of bigfiles from CD's created w/0 compression
    293 - fixed BurnProof-related bug
    294 - better at figuring out which is the best partition for temp/scratchdir
    295 - added do-not-compress-these (text file) to RPM
    296 - do not compress files of types listed in do-not-compress-these
    297 - dropped -U from call to afio - saves 20-30% runtime (Cosgrove)
    298 - added Cosgrove's do-not-compress-these list
    299 - included various patches from KP
    300 - chmod tmpdir, scratchdir to 700 before using
    301 - restore from specified backup device, even if its own cfg file disagrees
    302 - fixed multi-tape bug
    303 - fixed "Can't find first ISO when verifying nonbootable ISO" bug
    304 - multithreaded make_afioballs_and_images()
    305 - tmpdir and scratchdir are set sensibly whether mondoarchive is called with
    306   command-line parameters or not
    307 - fixed bug in strip_spaces() which stopped it from handling
    308   small strings correctly - affected mountlist editor
    309 - create a repaired copy of grub-install which is RAID-friendly;
    310   use it when initializing boot sector with run_grub()
    311 - fixed bug in mondo-makefilelist
    312 
    313 * Sun Sep 08 2002 Hugo Rabson <hugo@firstlinux.net> 1.50
    314 
    315 - if restoring, don't try to find SCSI node of CD-ROM drive; find /dev entry
    316 - during selective restore, skip filesets which don't contain relevant archives
    317 - set /dev/null's perms to 777, just in case devfs-enabled kernel mangles it
    318 - remove /var/run/*.pid after restoring
    319 - move spurious lockfiles from /home/* to /home/*/.disabled
    320 - ask user to confirm the tape/CD device name
    321 - lots of multitape-related fixes
    322 - added code to autodetect the hardware of the user, if possible
    323 - if isodir does not exist then abort
    324 - more sanity-checking for -d flag
    325 - doubled 'biggiefile' threshold... to 32MB
    326 - exclude /root/images/mindi
    327 - fixed multi-imagedev bug (Emmanuel Druon)
    328 - unmount/remount /mnt/floppy before/after backing up, if Mandrake
    329 - restructured the source files
    330 - fixed serious bug in line 1546 - should have been !=, not ==; stopped
    331   mondorestore from correctly restoring big files
    332 - added '#include <signal.h>' to my-stuff.h
    333 - exclude "incheckentry xwait()" from changed.files
    334 - fixed minor bug in find_cdrom_device()
    335 - fixed bug in friendly_sizestr...
    336 - insist on tape #1 when start verifying
    337 - added internal buffering, replacing the external 'buffer' exe
    338 - if differential backup then don't permit formatting or fdisking,
    339   whether Interactive or Nuke mode
    340 - if mondorestore is run on live filesystem (or from ramdisk) without
    341   parameters then mondorestore will ask which backup media (tape, CD, etc.)
    342   was used; it will read the config file from the media and proceed from there
    343 - if tape streamer is softlink then resolve it first
    344 - incorporate post-nuke tarball
    345 - if user doesn't specify tape size, proceed anyway; behave intelligently
    346   in the event of end-of-tape
    347 - prefix bkpinfo->restore_path to biggiefile fname before generating
    348   checksum & comparing to archived biggiefile
    349 - if /etc/lilo.conf not found not /etc/lilo.conf.anaconda found
    350   then create a softlink from the former to the latter, to work
    351   around RH7.3's b0rken LILO support
    352 - LFS support (mharris, michele, hugo)
    353 - fixed verify bug --- CD#1 was being verified again & again & ...
    354 - differential mode fixed; supported again
    355 - ask user for boot loader + device if not detectible
    356 - list up to 512 files in file selection window at once (was 128)
    357 - better handling of bigfiles' checksums, perms and owns
    358 - delete final filelist if <=2 bytes long
    359 - if kernel not found and mondo in graphics mode then popup and ask
    360   for kernel path+filename
    361 
    362 * Sun Jul 14 2002 Hugo Rabson <hugo@firstlinux.net> 1.45-1
    363 
    364 - 1.5x branch forked off from 1.4x branch
    365 
  • branches/2.0.8/mondo/distributions/mandriva/spec.m4

    r519 r576  
    22dnl
    33dnl SSS is replaced by the source package format
    4 define(`SSS', `%{name}-%{version}.tar.bz2')dnl
     4define(`SSS', `ftp://ftp.mondorescue.org/src/%{name}-%{version}-%{tag}.tar.bz2')dnl
    55dnl DDD is replaced by the list of dependencies specific to that distro
    6 define(`DDD', `%{addreqb}')dnl
     6define(`DDD', )dnl
    77dnl GRP is replaced by the RPM group of apps
    88define(`GRP', `Archiving/Backup')dnl
    9 dnl OBS is replaced vy what is being obsoleted
     9dnl OBS is replaced with what is being obsoleted
    1010define(`OBS', `Obsoletes:   libmondo <= 2.04
    1111Provides:   libmondo')dnl
  • branches/2.0.8/mondo/distributions/redhat/changelog

    r535 r576  
    1 * Fri Feb 17 2006 Bruno Cornec <bruno@mondorescue.org> VVV
     1* Fri Feb 17 2006 Bruno Cornec <bruno@mondorescue.org> 2.0.7-1
    22- Updated to 2.0.7
    33- RPM sepc files are now generated
  • branches/2.0.8/mondo/distributions/redhat/spec.m4

    r535 r576  
    22dnl
    33dnl SSS is replaced by the source package format
    4 define(`SSS', ftp://ftp.mondorescue.org/src/%{name}-%{version}.tgz)dnl
     4define(`SSS', `ftp://ftp.mondorescue.org/src/%{name}-%{version}-%{tag}.tar.gz')dnl
    55dnl DDD is replaced by the list of dependencies specific to that distro
    6 define(`DDD', %{addreqb})dnl
     6define(`DDD', )dnl
    77dnl GRP is replaced by the RPM group of apps
    8 define(`GRP', Applications/Archiving)dnl
     8define(`GRP', `Applications/Archiving')dnl
    99dnl OBS is replaced vy what is being obsoleted
    1010define(`OBS', )dnl
  • branches/2.0.8/mondo/distributions/rpm/mondo.spec

    r535 r576  
    33#
    44
    5 %define name    mondo
    6 %define version VVV
    75%define mrel    RRR
     6%define tag     TTT
    87# if mandriva official build (rpm --with is_official)
    98%{?is_official:%define rel %{mkrel} %{mrel}}%{!?is_official:%define rel %{mrel}}
    10 %define src     SSS
    11 %define grp     GRP
    12 %define addreqb mindi >= 1.0.7, bzip2 >= 0.9, afio, mkisofs, binutils, newt >= 0.50, slang >= 1.4.1
    13 %define addreq  DDD
    14 %define rel     %{mrel}
     9%define addreq  mindi >= 1.0.7, bzip2 >= 0.9, afio, mkisofs, binutils, newt >= 0.50, slang >= 1.4.1 DDD
    1510
    1611Summary:    A program which a Linux user can utilize to create a rescue/restore CD/tape
     
    1914Summary(sp):    Un programa para los usuarios de Linux por crear una CD/cinta de restoracion/rescate
    2015
    21 Name:       %{name}
    22 Version:    %{version}
    23 Release:    %{rel}
     16Name:       mondo
     17Version:    VVV
     18Release:    %{mrel}
    2419License:    GPL
    25 Group:      %{grp}
     20Group:      GRP
    2621Url:        http://www.mondorescue.org
    27 Source:     %{src}
     22Source:     SSS
    2823BuildRoot:  %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -u -n)
    2924BuildRequires:  newt-devel >= 0.50, slang-devel >= 1.4.1, gcc
    30 Epoch:      %(echo EEE | cut -d- -f1 | sed "s~M~~")
    3125OBS
    3226%ifarch ia64
     
    6559
    6660%prep
    67 %setup -q -n %name-%{version}
     61%setup -q -n %name-%{version}-%{tag}
    6862
    6963%build
     
    7973
    8074%files
    81 %defattr(644,root,root,755)
    8275%doc ChangeLog svn.log
    8376%doc INSTALL COPYING README TODO AUTHORS NEWS
    8477%doc docs/en/mondorescue-howto.html docs/en/mondorescue-howto.pdf
    8578
     79<<<<<<< .working
    8680%attr(755,root,root) %{_sbindir}/*
    8781%attr(755,root,root) %{_datadir}/%{name}/restore-scripts/%{name}/*
     
    8983%attr(755,root,root) %{_datadir}/%{name}/post-nuke.sample/usr/bin/post-nuke
    9084%{_datadir}/%{name}/*
     85=======
     86%{_sbindir}/*
     87%{_datadir}/%{name}
     88>>>>>>> .merge-right.r575
    9189%{_mandir}/man8/*
    9290
  • branches/2.0.8/mondo/distributions/suse/spec.m4

    r455 r576  
    22dnl
    33dnl SSS is replaced by the source package format
    4 define(`SSS', %{name}-%{version}.tgz)dnl
     4define(`SSS', `ftp://ftp.mondorescue.org/src/%{name}-%{version}-%{tag}.tar.gz')dnl
    55dnl DDD is replaced by the list of dependencies specific to that distro
    6 define(`DDD', %{addreqb}, buffer, cdrecord)dnl
     6define(`DDD', `, buffer, cdrecord')dnl
    77dnl GRP is replaced by the RPM group of apps
    8 define(`GRP', Productivity/Archiving/Backup)dnl
     8define(`GRP', `Productivity/Archiving/Backup')dnl
    99dnl OBS is replaced vy what is being obsoleted
    1010define(`OBS', )dnl
  • branches/2.0.8/mondo/mondo/autorun

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/common/libmondo-raid-EXT.h

    r128 r576  
    5353#endif
    5454
    55 extern int create_raidtab_from_mdstat(char *, char *);
    56 extern int read_mdstat(struct s_mdstat *mdstat, char *mdstat_file);
    57 
    58 extern int create_raidtab_from_mdstat(char *raidtab_fname,
    59                                       char *mdstat_fname);
     55extern int parse_mdstat(struct raidlist_itself *raidlist, char *device_prefix);
     56extern int create_raidtab_from_mdstat(char *raidtab_fname);
  • branches/2.0.8/mondo/mondo/common/libmondo-raid.c

    r273 r576  
    395395
    396396    fprintf(fout, "raiddev %s\n", raidrec->raid_device);
    397     if (raidrec->raid_level == -1) {
     397    if (raidrec->raid_level == -2) {
     398        fprintf(fout, "    raid-level            multipath\n");
     399    } else if (raidrec->raid_level == -1) {
    398400        fprintf(fout, "    raid-level            linear\n");
    399401    } else {
     
    401403                raidrec->raid_level);
    402404    }
    403     fprintf(fout, "    chunk-size            %d\n", raidrec->chunk_size);
    404405    fprintf(fout, "    nr-raid-disks         %d\n",
    405406            raidrec->data_disks.entries);
    406     fprintf(fout, "    nr-spare-disks        %d\n",
    407             raidrec->spare_disks.entries);
     407    if (raidrec->spare_disks.entries > 0) {
     408        fprintf(fout, "    nr-spare-disks        %d\n",
     409                raidrec->spare_disks.entries);
     410    }
    408411    if (raidrec->parity_disks.entries > 0) {
    409412        fprintf(fout, "    nr-parity-disks       %d\n",
    410413                raidrec->parity_disks.entries);
    411414    }
    412 
    413415    fprintf(fout, "    persistent-superblock %d\n",
    414416            raidrec->persistent_superblock);
     417    if (raidrec->chunk_size > -1) {
     418      fprintf(fout, "    chunk-size            %d\n", raidrec->chunk_size);
     419    }
     420    if (raidrec->parity > -1) {
     421      switch(raidrec->parity) {
     422      case 0:
     423        fprintf(fout, "    parity-algorithm      left-asymmetric\n");
     424        break;
     425      case 1:
     426        fprintf(fout, "    parity-algorithm      right-asymmetric\n");
     427        break;
     428      case 2:
     429        fprintf(fout, "    parity-algorithm      left-symmetric\n");
     430        break;
     431      case 3:
     432        fprintf(fout, "    parity-algorithm      right-symmetric\n");
     433        break;
     434      default:
     435        fatal_error("Unknown RAID parity algorithm.");
     436        break;
     437      }
     438    }
    415439    save_additional_vars_to_file(&raidrec->additional_vars, fout);
    416440    fprintf(fout, "\n");
     
    713737
    714738    if (!strcmp(label, "raid-level")) {
    715         if (!strcmp(value, "linear")) {
     739        if (!strcmp(value, "multipath")) {
     740            raidrec->raid_level = -2;
     741        } else if (!strcmp(value, "linear")) {
    716742            raidrec->raid_level = -1;
    717743        } else {
     
    726752    } else if (!strcmp(label, "chunk-size")) {
    727753        raidrec->chunk_size = atoi(value);
     754    } else if (!strcmp(label, "parity-algorithm")) {
     755        if (!strcmp(value, "left-asymmetric")) {
     756            raidrec->parity = 0;
     757        } else if (!strcmp(value, "right-asymmetric")) {
     758            raidrec->parity = 1;
     759        } else if (!strcmp(value, "left-symmetric")) {
     760            raidrec->parity = 2;
     761        } else if (!strcmp(value, "right-symmetric")) {
     762            raidrec->parity = 3;
     763        } else {
     764            log_msg(1, "Unknown RAID parity algorithm '%s'\n.", value);
     765        }
    728766    } else if (!strcmp(label, "device")) {
    729767        get_next_raidtab_line(fin, labelB, valueB);
     
    9721010
    9731011
    974 int read_mdstat(struct s_mdstat *mdstat, char *mdstat_file)
    975 {
    976     FILE *fin;
    977     char *tmp;
    978     char *stub;
    979     char *incoming;
    980     char *raid_devname;
    981     char *p, *q, *r;
    982     int diskno;
    983 
    984     malloc_string(tmp);
    985     malloc_string(stub);
    986     malloc_string(incoming);
    987     malloc_string(raid_devname);
    988     if (!(fin = fopen(mdstat_file, "r"))) {
    989         log_msg(1, "%s not found", mdstat_file);
     1012int parse_mdstat(struct raidlist_itself *raidlist, char *device_prefix) {
     1013
     1014  const char delims[] = " ";
     1015
     1016  FILE   *fin;
     1017  int    res = 0, row, i, index_min;
     1018  int lastpos = 0;
     1019  size_t len = 0;
     1020  char   *token;
     1021  char *string = NULL;
     1022  char *pos;
     1023  char type;
     1024  char *strtmp;
     1025
     1026  // open file
     1027  if (!(fin = fopen(MDSTAT_FILE, "r"))) {
     1028    log_msg(1, "Could not open %s.\n", MDSTAT_FILE);
     1029    return 1;
     1030  }
     1031  // initialise record, build progress and row counters
     1032  raidlist->entries = 0;
     1033  raidlist->el[raidlist->entries].progress = 999;
     1034  row = 1;
     1035  // skip first output row - contains registered RAID levels
     1036  res = getline(&string, &len, fin);
     1037  // parse the rest
     1038  while ( !feof_unlocked(fin) ) {
     1039    res = getline(&string, &len, fin);
     1040    if (res <= 0) break;
     1041    // trim leading spaces
     1042    pos = string;
     1043    while (*pos == ' ') *pos++;
     1044    asprintf(&string, pos);
     1045    //
     1046    // if we have newline after only spaces, this is a blank line, update
     1047    // counters, otherwise do normal parsing
     1048    if (*string == '\n') {
     1049      row = 1;
     1050      raidlist->entries++;
     1051      raidlist->el[raidlist->entries].progress = 999;
     1052    } else {
     1053      switch (row) {
     1054      case 1:  // device information
     1055    // check whether last line of record and if so skip
     1056    pos = strcasestr(string, "unused devices: ");
     1057    if (pos == string) {
     1058      //raidlist->entries--;
     1059      break;
     1060    }
     1061    // tokenise string
     1062    token = mr_strtok (string, delims, &lastpos);
     1063    // get RAID device name
     1064    asprintf(&strtmp,"%s%s", device_prefix, token);
     1065    strcpy(raidlist->el[raidlist->entries].raid_device, strtmp);
     1066    paranoid_free(strtmp);
     1067    paranoid_free(token);
     1068    // skip ':' and status
     1069    token = mr_strtok (string, delims, &lastpos);
     1070    paranoid_free(token);
     1071    token = mr_strtok (string, delims, &lastpos);
     1072    if (!strcmp(token, "inactive")) {
     1073      log_msg(1, "RAID device '%s' inactive.\n",
     1074         raidlist->el[raidlist->entries].raid_device);
     1075      paranoid_free(string);
     1076      paranoid_free(token);
     1077      return 1;
     1078    }
     1079    paranoid_free(token);
     1080
     1081    // get RAID level
     1082    token = mr_strtok (string, delims, &lastpos);
     1083    if (!strcmp(token, "multipath")) {
     1084      raidlist->el[raidlist->entries].raid_level = -2;
     1085    } else if (!strcmp(token, "linear")) {
     1086      raidlist->el[raidlist->entries].raid_level = -1;
     1087    } else if (!strcmp(token, "raid0")) {
     1088      raidlist->el[raidlist->entries].raid_level = 0;
     1089    } else if (!strcmp(token, "raid1")) {
     1090      raidlist->el[raidlist->entries].raid_level = 1;
     1091    } else if (!strcmp(token, "raid4")) {
     1092      raidlist->el[raidlist->entries].raid_level = 4;
     1093    } else if (!strcmp(token, "raid5")) {
     1094      raidlist->el[raidlist->entries].raid_level = 5;
     1095    } else if (!strcmp(token, "raid6")) {
     1096      raidlist->el[raidlist->entries].raid_level = 6;
     1097    } else if (!strcmp(token, "raid10")) {
     1098      raidlist->el[raidlist->entries].raid_level = 10;
     1099    } else {
     1100      log_msg(1, "Unknown RAID level '%s'.\n", token);
     1101      paranoid_free(string);
     1102      paranoid_free(token);
     1103      return 1;
     1104    }
     1105    paranoid_free(token);
     1106
     1107    // get RAID devices (type, index, device)
     1108    // Note: parity disk for RAID4 is last normal disk, there is no '(P)'
     1109    raidlist->el[raidlist->entries].data_disks.entries = 0;
     1110    raidlist->el[raidlist->entries].spare_disks.entries = 0;
     1111    raidlist->el[raidlist->entries].failed_disks.entries = 0;
     1112    while((token = mr_strtok (string, delims, &lastpos))) {
     1113      if ((pos = strstr(token, "("))) {
     1114        type = *(pos+1);
     1115      } else {
     1116        type = ' ';
     1117      }
     1118      pos = strstr(token, "[");
     1119      *pos = '\0';
     1120      switch(type) {
     1121      case ' ': // normal data disks
     1122        raidlist->el[raidlist->entries].data_disks.el[raidlist->el[raidlist->entries].data_disks.entries].index = atoi(pos + 1);
     1123        asprintf(&strtmp,"%s%s", device_prefix, token);
     1124        strcpy(raidlist->el[raidlist->entries].data_disks.el[raidlist->el[raidlist->entries].data_disks.entries].device, strtmp);
     1125        paranoid_free(strtmp);
     1126        raidlist->el[raidlist->entries].data_disks.entries++;
     1127        break;
     1128      case 'S': // spare disks
     1129        raidlist->el[raidlist->entries].spare_disks.el[raidlist->el[raidlist->entries].spare_disks.entries].index = atoi(pos + 1);
     1130        asprintf(&strtmp,"%s%s", device_prefix, token);
     1131        strcpy(raidlist->el[raidlist->entries].spare_disks.el[raidlist->el[raidlist->entries].spare_disks.entries].device, strtmp);
     1132        paranoid_free(strtmp);
     1133        raidlist->el[raidlist->entries].spare_disks.entries++;
     1134        break;
     1135      case 'F': // failed disks
     1136        raidlist->el[raidlist->entries].failed_disks.el[raidlist->el[raidlist->entries].failed_disks.entries].index = atoi(pos + 1);
     1137        asprintf(&strtmp,"%s%s", device_prefix, token);
     1138        strcpy(raidlist->el[raidlist->entries].failed_disks.el[raidlist->el[raidlist->entries].failed_disks.entries].device, strtmp);
     1139        paranoid_free(strtmp);
     1140        raidlist->el[raidlist->entries].failed_disks.entries++;
     1141        log_it("At least one failed disk found in RAID array.\n");
     1142        break;
     1143      default: // error
     1144        log_msg(1, "Unknown device type '%c'\n", type);
     1145        paranoid_free(string);
     1146        paranoid_free(token);
     1147        return 1;
     1148        break;
     1149      }
     1150      paranoid_free(token);
     1151    }
     1152
     1153    // adjust index for each device so that it starts with 0 for every type
     1154    index_min = 99;
     1155    for (i=0; i<raidlist->el[raidlist->entries].data_disks.entries;i++) {
     1156      if (raidlist->el[raidlist->entries].data_disks.el[i].index < index_min) {
     1157        index_min = raidlist->el[raidlist->entries].data_disks.el[i].index;
     1158      }
     1159    }
     1160    if (index_min > 0) {
     1161      for (i=0; i<raidlist->el[raidlist->entries].data_disks.entries;i++) {
     1162        raidlist->el[raidlist->entries].data_disks.el[i].index = raidlist->el[raidlist->entries].data_disks.el[i].index - index_min;   
     1163      }
     1164    }
     1165    index_min = 99;
     1166    for (i=0; i<raidlist->el[raidlist->entries].spare_disks.entries;i++) {
     1167      if (raidlist->el[raidlist->entries].spare_disks.el[i].index < index_min) {
     1168        index_min = raidlist->el[raidlist->entries].spare_disks.el[i].index;
     1169      }
     1170    }
     1171    if (index_min > 0) {
     1172      for (i=0; i<raidlist->el[raidlist->entries].spare_disks.entries;i++) {
     1173        raidlist->el[raidlist->entries].spare_disks.el[i].index = raidlist->el[raidlist->entries].spare_disks.el[i].index - index_min; 
     1174      }
     1175    }
     1176    index_min = 99;
     1177    for (i=0; i<raidlist->el[raidlist->entries].failed_disks.entries;i++) {
     1178      if (raidlist->el[raidlist->entries].failed_disks.el[i].index < index_min) {
     1179        index_min = raidlist->el[raidlist->entries].failed_disks.el[i].index;
     1180      }
     1181    }
     1182    if (index_min > 0) {
     1183      for (i=0; i<raidlist->el[raidlist->entries].failed_disks.entries;i++) {
     1184        raidlist->el[raidlist->entries].failed_disks.el[i].index = raidlist->el[raidlist->entries].failed_disks.el[i].index - index_min;   
     1185      }
     1186    }
     1187    break;
     1188      case 2:  // config information
     1189    // check for persistent super block
     1190    if (strcasestr(string, "super non-persistent")) {
     1191      raidlist->el[raidlist->entries].persistent_superblock = 0;
     1192    } else {
     1193      raidlist->el[raidlist->entries].persistent_superblock = 1;
     1194    }
     1195    // extract chunk size
     1196    if (!(pos = strcasestr(string, "k chunk"))) {
     1197      raidlist->el[raidlist->entries].chunk_size = -1;
     1198    } else {
     1199      while (*pos != ' ') {
     1200        *pos--;
     1201        if (pos < string) {
     1202          log_it("String underflow!\n");
     1203          paranoid_free(string);
     1204          return 1;
     1205        }
     1206      }
     1207      raidlist->el[raidlist->entries].chunk_size = atoi(pos + 1);
     1208    }
     1209    // extract parity if present
     1210    if ((pos = strcasestr(string, "algorithm"))) {
     1211      raidlist->el[raidlist->entries].parity = atoi(pos + 9);
     1212    } else {
     1213      raidlist->el[raidlist->entries].parity = -1;
     1214    }
     1215    break;
     1216      case 3:  // optional build status information
     1217    if (!(pos = strchr(string, '\%'))) {
     1218      if (strcasestr(string, "delayed")) {
     1219        raidlist->el[raidlist->entries].progress = -1;  // delayed (therefore, stuck at 0%)
     1220      } else {
     1221        raidlist->el[raidlist->entries].progress = 999; // not found
     1222      }
     1223    } else {
     1224      while (*pos != ' ') {
     1225        *pos--;
     1226        if (pos < string) {
     1227          printf("ERROR: String underflow!\n");
     1228          paranoid_free(string);
     1229          return 1;
     1230        }
     1231      }
     1232      raidlist->el[raidlist->entries].progress = atoi(pos);
     1233    }
     1234    break;
     1235      default: // error
     1236    log_msg(1, "Row %d should not occur in record!\n", row);
     1237    break;
     1238      }
     1239      row++;
     1240    }
     1241  }
     1242  // close file
     1243  fclose(fin);
     1244  // free string
     1245  paranoid_free(string);
     1246  // return success
     1247  return 0;
     1248
     1249}
     1250
     1251
     1252
     1253
     1254int create_raidtab_from_mdstat(char *raidtab_fname)
     1255{
     1256    struct raidlist_itself *raidlist;
     1257    int retval = 0;
     1258
     1259    raidlist = malloc(sizeof(struct raidlist_itself));
     1260
     1261    // FIXME: Prefix '/dev/' should really be dynamic!
     1262    if (parse_mdstat(raidlist, "/dev/")) {
     1263        log_to_screen("Sorry, cannot read %s", MDSTAT_FILE);
    9901264        return (1);
    9911265    }
    992     mdstat->entries = 0;
    993     for (fgets(incoming, MAX_STR_LEN - 1, fin); !feof(fin);
    994          fgets(incoming, MAX_STR_LEN - 1, fin)) {
    995         p = incoming;
    996         if (*p != 'm' && *(p + 1) == 'm') {
    997             p++;
    998         }
    999         if (strncmp(p, "md", 2)) {
    1000             continue;
    1001         }
    1002 // read first line --- mdN : active raidX ............
    1003         mdstat->el[mdstat->entries].md = atoi(p + 2);
    1004         log_msg(8, "Storing /dev/md%d's info", atoi(p + 2));
    1005         while (*p != ':' && *p) {
    1006             p++;
    1007         }
    1008         while ((*p != 'r' || *(p + 1) != 'a') && *p) {
    1009             p++;
    1010         }
    1011         if (!strncmp(p, "raid", 4)) {
    1012             mdstat->el[mdstat->entries].raidlevel = *(p + 4) - '0';
    1013         }
    1014         p += 4;
    1015         while (*p != ' ' && *p) {
    1016             p++;
    1017         }
    1018         while (*p == ' ' && *p) {
    1019             p++;
    1020         }
    1021         for (diskno = 0; *p; diskno++) {
    1022             strcpy(stub, p);
    1023 //      log_msg(1, "diskno=%d; tmp=%s", diskno, tmp);
    1024             q = strchr(stub, '[');
    1025             if (q) {
    1026                 *q = '\0';
    1027                 q++;
    1028                 r = strchr(q, ']');
    1029                 if (r) {
    1030                     *r = '\0';
    1031                 }
    1032                 mdstat->el[mdstat->entries].disks.el[diskno].index =
    1033                     atoi(q);
    1034             } else {
    1035                 mdstat->el[mdstat->entries].disks.el[diskno].index = -1;
    1036                 q = strchr(stub, ' ');
    1037                 if (q) {
    1038                     *q = '\0';
    1039                 }
    1040             }
    1041             sprintf(tmp, "/dev/%s", stub);
    1042             log_msg(8, "/dev/md%d : disk#%d : %s (%d)",
    1043                     mdstat->el[mdstat->entries].md, diskno, tmp,
    1044                     mdstat->el[mdstat->entries].disks.el[diskno].index);
    1045             strcpy(mdstat->el[mdstat->entries].disks.el[diskno].device,
    1046                    tmp);
    1047             while (*p != ' ' && *p) {
    1048                 p++;
    1049             }
    1050             while (*p == ' ' && *p) {
    1051                 p++;
    1052             }
    1053         }
    1054         mdstat->el[mdstat->entries].disks.entries = diskno;
    1055 // next line --- skip it
    1056         if (!feof(fin)) {
    1057             fgets(incoming, MAX_STR_LEN - 1, fin);
    1058         } else {
    1059             continue;
    1060         }
    1061 // next line --- the 'progress' line
    1062         if (!feof(fin)) {
    1063             fgets(incoming, MAX_STR_LEN - 1, fin);
    1064         } else {
    1065             continue;
    1066         }
    1067 //  log_msg(1, "Percentage line = '%s'", incoming);
    1068         if (!(p = strchr(incoming, '\%'))) {
    1069             mdstat->el[mdstat->entries].progress = 999; // not found
    1070         } else if (strstr(incoming, "DELAYED")) {
    1071             mdstat->el[mdstat->entries].progress = -1;  // delayed (therefore, stuck at 0%)
    1072         } else {
    1073             for (*p = '\0'; *p != ' '; p--);
    1074             mdstat->el[mdstat->entries].progress = atoi(p);
    1075         }
    1076         log_msg(8, "progress =%d", mdstat->el[mdstat->entries].progress);
    1077         mdstat->entries++;
    1078     }
    1079     fclose(fin);
    1080     paranoid_free(tmp);
    1081     paranoid_free(stub);
    1082     paranoid_free(incoming);
    1083     paranoid_free(raid_devname);
    1084     return (0);
    1085 }
    1086 
    1087 
    1088 
    1089 int create_raidtab_from_mdstat(char *raidtab_fname, char *mdstat_fname)
    1090 {
    1091     struct raidlist_itself *raidlist;
    1092     struct s_mdstat *mdstat;
    1093     int retval = 0;
    1094     int i;
    1095 
    1096     raidlist = malloc(sizeof(struct raidlist_itself));
    1097     mdstat = malloc(sizeof(struct s_mdstat));
    1098 
    1099     if (read_mdstat(mdstat, mdstat_fname)) {
    1100         log_to_screen("Sorry, cannot read %s", mdstat_fname);
    1101         return (1);
    1102     }
    1103 
    1104     for (i = 0; i < mdstat->entries; i++) {
    1105         sprintf(raidlist->el[i].raid_device, "/dev/md%d",
    1106                 mdstat->el[i].md);
    1107         raidlist->el[i].raid_level = mdstat->el[i].raidlevel;
    1108         raidlist->el[i].persistent_superblock = 1;
    1109         raidlist->el[i].chunk_size = 4;
    1110         memcpy((void *) &raidlist->el[i].data_disks,
    1111                (void *) &mdstat->el[i].disks,
    1112                sizeof(struct list_of_disks));
    1113         // FIXME --- the above line does not allow for spare disks
    1114         log_to_screen
    1115             ("FIXME - create_raidtab_from_mdstat does not allow for spare disks");
    1116     }
    1117     raidlist->entries = i;
     1266
    11181267    retval += save_raidlist_to_raidtab(raidlist, raidtab_fname);
    11191268    return (retval);
  • branches/2.0.8/mondo/mondo/common/libmondo-raid.h

    r128 r576  
    4343#endif
    4444
    45 
    46 int create_raidtab_from_mdstat(char *, char *);
    47 int read_mdstat(struct s_mdstat *mdstat, char *mdstat_file);
    48 
    49 int create_raidtab_from_mdstat(char *raidtab_fname, char *mdstat_fname);
     45int create_raidtab_from_mdstat(char *raidtab_fname);
     46int parse_mdstat(struct raidlist_itself *raidlist, char *device_prefix);
  • branches/2.0.8/mondo/mondo/common/libmondo-string-EXT.h

    r128 r576  
    4444extern inline void turn_wildcard_chars_into_literal_chars(char *out,
    4545                                                          char *in);
     46/* Valid external functions */
     47extern char *mr_strtok(char *instr, const char *delims, int *lastpos);
  • branches/2.0.8/mondo/mondo/common/libmondo-string.c

    r128 r576  
    1 /* libmondo-string.c
    2    $Id$
    3 
    4 - string manipulation
    5 
    6 
    7 08/02
    8 - added function turn_wildcard_chars_into_literal_chars()
    9 
    10 03/10/2004?
    11 - make percent_media_full_comment() use media_descriptor_string():
    12   "DVD %d" or "ISO %d" (if that's what it is) rather than "CD %d"
    13 - fix build_partition_name() to use 'adXsY' rather than 'adXpY' on FreeBSD
    14 
    15 10/08/2003
    16 - changed 'CD %d' to '<media> %d' (msg)
    17 
    18 10/01
    19 - fixing strip_spaces() to handle /r properly
    20 
    21 09/26
    22 - added char *media_descriptor_string(t_bkptype);
    23 
    24 05/06
    25 - cleaned up severity_of_difference() a bit
    26 
    27 05/05
    28 - added Joshua Oreman's FreeBSD patches
    29 
    30 04/24
    31 - added lots of assert()'s and log_OS_error()'s
    32 - severity_of_difference() skips "/mnt/RESTORING" at start
    33   of filename if it's there
    34 
    35 04/04/2003
    36 - misc clean-up (Tom Mortell)
    37 
    38 11/17/2002
    39 - strip_spaces() now accommodates _smaller_ strings auto'y
    40 
    41 11/08
    42 - if decimal point in string sent to friendly_sizestr_to_sizelong()
    43   then fatal error: we expect integers only
    44 
    45 10/01 - 10/31
    46 - commented subroutines
    47 - strip_spaces() allows up to MAX_STR_LEN-len input string
    48 
    49 08/01 - 08/31
    50 - fixed bug in friendly_sizestr_to_sizelong() which stopped
    51   it from working with capital G's and K's
    52 - fixed bug in build_partition_name()
    53 
    54 07/24
    55 - created
    56 */
     1/* $Id$ */
    572
    583
     
    12121157}
    12131158
     1159
     1160/* New functions safe from a memory manageemnt point of view */
     1161/* Developped by Andree Leidenfrost */
     1162
     1163char *mr_strtok(char *instr, const char *delims, int *lastpos) {
     1164
     1165char *token = NULL;
     1166char *strptr = NULL;
     1167size_t pos1 = 0;
     1168size_t pos2 = 0;
     1169
     1170if (strlen(instr) <= *lastpos) {
     1171    *lastpos = 0;
     1172    return token;
     1173}
     1174
     1175strptr = instr + *lastpos;
     1176pos2 = strspn(strptr, delims);
     1177strptr += pos2;
     1178pos1 = strcspn(strptr, delims);
     1179token = malloc(sizeof(*token)*(pos1+1));
     1180strncpy(token, strptr, pos1);
     1181*lastpos = *lastpos + pos1 + pos2 + 1;
     1182
     1183return token;
     1184}
    12141185/* @} - end of stringGroup */
  • branches/2.0.8/mondo/mondo/common/libmondo-string.h

    r128 r576  
    3434char *media_descriptor_string(t_bkptype);
    3535inline void turn_wildcard_chars_into_literal_chars(char *out, char *in);
     36
     37/* Valid external functions */
     38char *mr_strtok(char *instr, const char *delims, int *lastpos);
  • branches/2.0.8/mondo/mondo/common/libmondo-tools.c

    r424 r576  
    442442    assert(raidrec != NULL);
    443443    raidrec->raid_device[0] = '\0';
    444     raidrec->raid_level = 0;
    445     raidrec->chunk_size = 4;
     444    raidrec->raid_level = -9;
    446445    raidrec->persistent_superblock = 1;
     446    raidrec->chunk_size = 64;
     447    raidrec->parity = -1;
    447448    raidrec->data_disks.entries = 0;
    448449    raidrec->spare_disks.entries = 0;
     
    12241225        log_to_screen
    12251226            ("You have RAID partitions but no /etc/raidtab - creating one from /proc/mdstat");
    1226         create_raidtab_from_mdstat("/etc/raidtab", "/proc/mdstat");
     1227        create_raidtab_from_mdstat("/etc/raidtab");
    12271228    }
    12281229
  • branches/2.0.8/mondo/mondo/common/mondostructures.h

    r519 r576  
    150150   */
    151151    int index;
     152   
     153  /**
     154   * Type of disk.
     155   */
     156    char type;  // ' ' = data (default), S = spare, F = faulty
     157   
    152158};
    153159
     
    241247       */
    242248    int chunk_size;
     249   
     250      /**
     251       * The parity algorithm of this RAID device. (RAID5 only)
     252       */
     253    int parity; // 0=left-asymmetric, 1=right-asymmetric, 2=left-symmetric, 3=right-symmetric
    243254
    244255      /**
     
    266277       */
    267278    struct additional_raid_variables additional_vars;
     279
     280      /**
     281       * Resync progress for this device.
     282       */
     283    int progress;
    268284};
    269285
     
    787803    struct s_tapecat_entry el[MAX_TAPECATALOG_ENTRIES];
    788804};
    789 
    790 
    791 
    792 struct s_mdrec {
    793     int md;                     // /dev/mdN
    794     int raidlevel;              // 0, 1, 5
    795     struct list_of_disks disks;
    796     int progress;
    797 };
    798 
    799 struct s_mdstat {
    800     int entries;
    801     struct s_mdrec el[MAXIMUM_RAID_DEVS];
    802 };
  • branches/2.0.8/mondo/mondo/common/my-stuff.h

    r459 r576  
    231231 */
    232232#define MONDO_CFG_FILE_STUB "tmp/mondo-restore.cfg"
     233
     234/**
     235 * The RAID kernel proc file
     236 */
     237#define MDSTAT_FILE "/proc/mdstat"
    233238
    234239/**
  • branches/2.0.8/mondo/mondo/mondorestore/mondo-prep.c

    r196 r576  
    695695
    696696/**
     697 * Create @p RAID device using information from @p structure.
     698 * This will create the specified RAID devive using information provided in
     699 * raidlist by means of the mdadm tool.
     700 * @param raidlist The structure containing all RAID information
     701 * @param device The RAID device to create.
     702 * @return 0 for success, nonzero for failure.
     703 */
     704int create_raid_device_via_mdadm(struct raidlist_itself *raidlist, char *device)
     705{
     706  /** int **************************************************************/
     707  int i   = 0;
     708  int j   = 0;
     709  int res = 0;
     710 
     711  /** buffers ***********************************************************/
     712  char *devices = NULL;
     713  char *strtmp  = NULL;
     714  char *level   = NULL;
     715  char *program = NULL;
     716 
     717  // leave straight away if raidlist is initial or has no entries
     718  if (!raidlist || raidlist->entries == 0) {
     719    log_msg(1, "No RAID arrays found.");
     720    return 1;
     721  } else {
     722    log_msg(1, "%d RAID arrays found.", raidlist->entries);
     723  }
     724  // find raidlist entry for requested device
     725  for (i = 0; i < raidlist->entries; i++) {
     726    if (!strcmp(raidlist->el[i].raid_device, device)) break;
     727  }
     728  // check whether RAID device was found in raidlist
     729  if (i == raidlist->entries) {
     730    log_msg(1, "RAID device %s not found in list.", device);
     731    return 1;
     732  }
     733  // create device list from normal disks followed by spare ones
     734  asprintf(&devices, raidlist->el[i].data_disks.el[0].device);
     735  for (j = 1; j < raidlist->el[i].data_disks.entries; j++) {
     736    asprintf(&strtmp, "%s", devices);
     737    paranoid_free(devices);
     738    asprintf(&devices, "%s %s", strtmp,
     739         raidlist->el[i].data_disks.el[j].device);
     740    paranoid_free(strtmp);
     741  }
     742  for (j = 0; j < raidlist->el[i].spare_disks.entries; j++) {
     743    asprintf(&strtmp, "%s", devices);
     744    paranoid_free(devices);
     745    asprintf(&devices, "%s %s", strtmp,
     746         raidlist->el[i].spare_disks.el[j].device);
     747    paranoid_free(strtmp);
     748  }
     749  // translate RAID level
     750  if (raidlist->el[i].raid_level == -2) {
     751    asprintf(&level, "multipath");
     752  } else if (raidlist->el[i].raid_level == -1) {
     753    asprintf(&level, "linear");
     754  } else {
     755    asprintf(&level, "raid%d", raidlist->el[i].raid_level);
     756  }
     757  // create RAID device:
     758  // - RAID device, number of devices and devices mandatory
     759  // - parity algorithm, chunk size and spare devices optional
     760  // - faulty devices ignored
     761  // - persistent superblock always used as this is recommended
     762  asprintf(&program,
     763       "mdadm --create --force --run --auto=yes %s --level=%s --raid-devices=%d",
     764       raidlist->el[i].raid_device, level,
     765       raidlist->el[i].data_disks.entries);
     766  if (raidlist->el[i].parity != -1) {
     767    asprintf(&strtmp, "%s", program);
     768    paranoid_free(program);
     769    switch(raidlist->el[i].parity) {
     770    case 0:
     771      asprintf(&program, "%s --parity=%s", strtmp, "la");
     772      break;
     773    case 1:
     774      asprintf(&program, "%s --parity=%s", strtmp, "ra");
     775      break;
     776    case 2:
     777      asprintf(&program, "%s --parity=%s", strtmp, "ls");
     778      break;
     779    case 3:
     780      asprintf(&program, "%s --parity=%s", strtmp, "rs");
     781      break;
     782    default:
     783      fatal_error("Unknown RAID parity algorithm.");
     784      break;
     785    }
     786    paranoid_free(strtmp);
     787  }
     788  if (raidlist->el[i].chunk_size != -1) {
     789    asprintf(&strtmp, "%s", program);
     790    paranoid_free(program);
     791    asprintf(&program, "%s --chunk=%d", strtmp, raidlist->el[i].chunk_size);
     792    paranoid_free(strtmp);
     793  }
     794  if (raidlist->el[i].spare_disks.entries > 0) {
     795    asprintf(&strtmp, "%s", program);
     796    paranoid_free(program);
     797    asprintf(&program, "%s --spare-devices=%d", strtmp,
     798         raidlist->el[i].spare_disks.entries);
     799    paranoid_free(strtmp);
     800  }
     801  asprintf(&strtmp, "%s", program);
     802  paranoid_free(program);
     803  asprintf(&program, "%s %s", strtmp, devices);
     804  paranoid_free(strtmp);
     805  res = run_program_and_log_output(program, 1);
     806  // free memory
     807  paranoid_free(devices);
     808  paranoid_free(level);
     809  paranoid_free(program);
     810  // return to calling instance
     811  return res;
     812}
     813
     814
     815/**
    697816 * Format @p device as a @p format filesystem.
    698817 * This will use the format command returned by which_format_command_do_i_need().
     
    704823 * @return 0 for success, nonzero for failure.
    705824 */
    706 int format_device(char *device, char *format)
     825int format_device(char *device, char *format, struct raidlist_itself *raidlist)
    707826{
    708827    /** int **************************************************************/
     
    836955
    837956        log_msg(1, "Making %s", device);
    838         sprintf(program, "mkraid --really-force %s", device);
    839         res = run_program_and_log_output(program, 1);
    840         log_msg(1, "%s returned %d", program, res);
    841         system("sync");
    842         sleep(3);
    843         start_raid_device(device);
    844         if (g_fprep) {
    845             fprintf(g_fprep, "%s\n", program);
     957        // use mkraid if it exists, otherwise use mdadm
     958        if (run_program_and_log_output("which mkraid", FALSE)) {
     959            res = create_raid_device_via_mdadm(raidlist, device);
     960            log_msg(1, "Creating RAID device %s via mdadm returned %d", device, res);
     961        } else {
     962            sprintf(program, "mkraid --really-force %s", device);
     963            res = run_program_and_log_output(program, 1);
     964            log_msg(1, "%s returned %d", program, res);
     965            system("sync");
     966            sleep(3);
     967            start_raid_device(device);
     968            if (g_fprep) {
     969                fprintf(g_fprep, "%s\n", program);
     970            }
    846971        }
    847972        system("sync");
    848973        sleep(2);
    849 
    850974//      log_to_screen("Starting %s", device);
    851975//      sprintf(program, "raidstart %s", device);
     
    853977//      log_msg(1, "%s returned %d", program, res);
    854978//      system("sync"); sleep(1);
    855         if (g_fprep) {
    856             fprintf(g_fprep, "%s\n", program);
    857         }
    858979#endif
    859980        system("sync");
     
    9231044 * @return The number of errors encountered (0 for success).
    9241045 */
    925 int format_everything(struct mountlist_itself *mountlist,
    926                       bool interactively)
     1046int format_everything(struct mountlist_itself *mountlist, bool interactively,
     1047                          struct raidlist_itself *raidlist)
    9271048{
    9281049    /** int **************************************************************/
     
    9831104            if (do_it) {
    9841105                // NB: format_device() also stops/starts RAID device if necessary
    985                 retval += format_device(me->device, me->format);
     1106                retval += format_device(me->device, me->format, raidlist);
    9861107            }
    9871108            g_current_progress += progress_step;
     
    10001121    log_msg(1, "Creating LVMs");
    10011122    if (does_file_exist("/tmp/i-want-my-lvm")) {
    1002         wait_until_software_raids_are_prepped("/proc/mdstat", 10);
     1123        wait_until_software_raids_are_prepped("/proc/mdstat", 100);
    10031124        log_to_screen("Configuring LVM");
    10041125        if (!g_text_mode) {
     
    10761197
    10771198            if (do_it)
    1078                 retval += format_device(me->device, me->format);
     1199                retval += format_device(me->device, me->format, raidlist);
    10791200        }
    10801201
     
    22472368    sprintf(program, "vinum stop -f %s", raid_device);
    22482369#else
    2249     sprintf(program, "raidstop %s", raid_device);
    2250 //      sprintf (program, "raidstop " RAID_DEVICE_STUB "*");
     2370    // use raidstop if it exists, otherwise use mdadm
     2371    if (run_program_and_log_output("which raidstop", FALSE)) {
     2372        sprintf(program, "mdadm -S %s", raid_device);
     2373    } else {
     2374        sprintf(program, "raidstop %s", raid_device);
     2375    }
    22512376#endif
    22522377    log_msg(1, "program = %s", program);
  • branches/2.0.8/mondo/mondo/mondorestore/mondo-restore.c

    r519 r576  
    837837                    }
    838838
    839                     fmt_errs = format_everything(mountlist, FALSE);
     839                    fmt_errs = format_everything(mountlist, FALSE, raidlist);
    840840                    if (!fmt_errs) {
    841841                        log_to_screen
     
    855855                if (ask_me_yes_or_no
    856856                    ("Do you want to format your hard drives?")) {
    857                     fmt_errs = format_everything(mountlist, TRUE);
     857                    fmt_errs = format_everything(mountlist, TRUE, raidlist);
    858858                    if (!fmt_errs) {
    859859                        done = TRUE;
     
    11621162                system("sync");
    11631163                log_to_screen("Please wait. This may take a few minutes.");
    1164                 res += format_everything(mountlist, FALSE);
     1164                res += format_everything(mountlist, FALSE, raidlist);
    11651165            }
    11661166            paranoid_fclose(g_fprep);
     
    34153415    }
    34163416
    3417     if (argc == 4 && strcmp(argv[1], "--mdconv") == 0) {
    3418         finish(create_raidtab_from_mdstat(argv[2], argv[3]));
     3417    if (argc == 3 && strcmp(argv[1], "--mdconv") == 0) {
     3418        finish(create_raidtab_from_mdstat(argv[2]));
    34193419    }
    34203420
     
    35153515            strcpy(g_mountlist_fname, "/tmp/mountlist.txt");
    35163516            load_mountlist(mountlist, g_mountlist_fname);
    3517             res = format_everything(mountlist, FALSE);
     3517            res = format_everything(mountlist, FALSE, raidlist);
    35183518            finish(res);
    35193519        }
  • branches/2.0.8/mondo/mondo/mondorestore/mondo-rstr-tools.c

    r425 r576  
    25852585                                           int wait_for_percentage)
    25862586{
    2587     struct s_mdstat *mdstat;
     2587    struct raidlist_itself *raidlist;
    25882588    int unfinished_mdstat_devices = 9999, i;
    25892589    char *screen_message;
    25902590
    25912591    malloc_string(screen_message);
    2592     mdstat = malloc(sizeof(struct s_mdstat));
     2592    raidlist = malloc(sizeof(struct raidlist_itself));
    25932593
    25942594    assert(wait_for_percentage <= 100);
    25952595    iamhere("Help, my boat is sync'ing. (Get it? Urp! Urp!)");
    25962596    while (unfinished_mdstat_devices > 0) {
    2597         if (read_mdstat(mdstat, mdstat_file)) {
    2598             log_to_screen("Sorry, cannot read %s", mdstat_file);
     2597            // FIXME: Prefix '/dev/' should really be dynamic!
     2598        if (parse_mdstat(raidlist, "/dev/")) {
     2599            log_to_screen("Sorry, cannot read %s", MDSTAT_FILE);
     2600            log_msg(1,"Sorry, cannot read %s", MDSTAT_FILE);
    25992601            return;
    26002602        }
    2601         for (unfinished_mdstat_devices = i = 0; i < mdstat->entries; i++) {
    2602             if (mdstat->el[i].progress < wait_for_percentage) {
     2603        for (unfinished_mdstat_devices = i = 0; i <= raidlist->entries; i++) {
     2604            if (raidlist->el[i].progress < wait_for_percentage) {
    26032605                unfinished_mdstat_devices++;
    2604                 sprintf(screen_message, "Sync'ing /dev/md%d",
    2605                         mdstat->el[i].md);
     2606                log_msg(1,"Sync'ing %s (i=%d)", raidlist->el[i].raid_device, i);
     2607                sprintf(screen_message, "Sync'ing %s",
     2608                        raidlist->el[i].raid_device);
    26062609                open_evalcall_form(screen_message);
    2607                 if (mdstat->el[i].progress == -1)   // delayed while another partition inits
     2610                if (raidlist->el[i].progress == -1) // delayed while another partition inits
    26082611                {
    26092612                    continue;
    26102613                }
    2611                 while (mdstat->el[i].progress < wait_for_percentage) {
    2612                     update_evalcall_form(mdstat->el[i].progress);
     2614                while (raidlist->el[i].progress < wait_for_percentage) {
     2615                    log_msg(1,"Percentage sync'ed: %d", raidlist->el[i].progress);
     2616                    update_evalcall_form(raidlist->el[i].progress);
    26132617                    sleep(2);
    2614                     if (read_mdstat(mdstat, mdstat_file)) {
     2618                    // FIXME: Prefix '/dev/' should really be dynamic!
     2619                    if (parse_mdstat(raidlist, "/dev/")) {
    26152620                        break;
    26162621                    }
     
    26212626    }
    26222627    paranoid_free(screen_message);
    2623     paranoid_free(mdstat);
    2624 }
     2628    paranoid_free(raidlist);
     2629}
  • branches/2.0.8/mondo/mondo/mondorestore/mondoprep.h

    r128 r576  
    5858int start_all_raid_devices(struct mountlist_itself *);
    5959int stop_all_raid_devices(struct mountlist_itself *);
    60 int format_everything(struct mountlist_itself *, bool);
     60int format_everything(struct mountlist_itself *, bool, struct raidlist_itself *);
    6161int partition_device(FILE *, const char *, int, int, const char *,
    6262                     long long);
     
    6565int partition_device_with_fdisk(FILE *, const char *, int, int,
    6666                                const char *, long long);
    67 int format_device(char *, char *);
     67int format_device(char *, char *, struct raidlist_itself *);
    6868int partition_drive(struct mountlist_itself *, char *);
    6969int partition_everything(struct mountlist_itself *);
  • branches/2.0.8/mondo/mondo/mondorestore/mr-externs.h

    r128 r576  
    2727extern int edit_mountlist(char *mountlist_fname, struct mountlist_itself *,
    2828                          struct raidlist_itself *);
    29 extern int format_everything(struct mountlist_itself *, bool);
    30 extern int format_device(char *, char *);
     29extern int format_everything(struct mountlist_itself *, bool, struct raidlist_itself *);
     30extern int format_device(char *, char *, struct raidlist_itself *);
    3131extern void finish(int);
    3232extern void free_filelist(struct s_node *);
  • branches/2.0.8/mondo/mondo/post-nuke.sample/usr/bin/post-nuke

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/etc

    • Property svn:unix-mode set to restore-scripts/
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo

    • Property svn:unix-mode set to restore-scripts/
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/ask-me-a-question

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/compare-me

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/compare-subroutine-me

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/edit-mountlist

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/grub-MR

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/grub-install.patched

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/hack-elilo

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/hack-fstab

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/hack-grub

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/hack-lilo

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/ide-opt

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/ide-opt-off

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/label-partitions-as-necessary

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/make-me-bootable

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/mount-me

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/mount-subroutine-me

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/raw-MR

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/restore-bigfiles-from-iso

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/stabelilo-me

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/stabgrub-me

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/stablilo-me

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/stabraw-me

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/unmount-me

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/mondo/unmount-subroutine-me

    • Property svn:unix-mode set to 755
  • branches/2.0.8/mondo/mondo/restore-scripts/usr

    • Property svn:unix-mode set to restore-scripts/
  • branches/2.0.8/mondo/mondo/restore-scripts/usr.bin

    • Property svn:unix-mode set to restore-scripts/
  • branches/2.0.8/mondo/mondo/restore-scripts/usr/bin

    • Property svn:unix-mode set to restore-scripts/
Note: See TracChangeset for help on using the changeset viewer.