Changeset 576 in MondoRescue
- Timestamp:
- May 25, 2006, 2:00:37 PM (19 years ago)
- Location:
- branches/2.0.8
- Files:
-
- 13 deleted
- 101 edited
- 11 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2.0.8/mindi-kernel/VERSION
r575 r576 1 stable 1 2.0.8 -
branches/2.0.8/mindi/ChangeLog
r438 r576 2 2 3 3 MINDI CHANGES 4 5 1.0.8 (2006-05-25) 6 - new build process (Bruno Cornec) 7 - Fix a bug when a disk less than 2.8 MB can be built, to 8 include enough modules to support SCSI cds 9 (Bruno Cornec) 10 - Fix a bug in .spec for RPM build (%attr now unused) 11 (Bruno Cornec) 12 - Add support for LABEL on swap partitions 13 (Michel Loiseleur + Julien Pinon) 14 - Attempt to fix bug 6827 (addition of a script for 15 busybox udhcpc to support pxe/dhcp restore) 16 (Bruno Cornec) 17 - support of dm and LVM v2 (Andree Leidenfrost) 18 - analyze-my-lvm is under $MINDI_LIB (Andree Leidenfrost) 19 - Fix a bug introduced by trying to avoid an error 20 message when modprobe.d doesn't exist 21 (Johannes Franken) 22 - Fix for Bug #6975 (/net is now excluded from kernel search location) 23 (Bruno Cornec) 24 - Allow 5670 MB fllopy disks for lilo as well (Bruno Cornec) 25 - Add missing net modules (Klaus Ade Johnstad) 4 26 5 27 1.0.7 (2006-03-10) -
branches/2.0.8/mindi/README.ia64
r196 r576 19 19 Note that parted2fdisk.pl supports currently only the -l and -s options as well as the commands p,n,d,w,t,a,q 20 20 21 Please report any problem around that tool to b cornec@users.berlios.de21 Please report any problem around that tool to bruno@mondorescue.org 22 22 Bruno. 23 23 -
branches/2.0.8/mindi/README.pxe
r256 r576 27 27 During boot mondorestore will start your NFS configuration and mount mondo's content from the network rather than from a physical media. You may alter the IP configuration stored from the original machine by passing the ipconf option describing respectively the IP address, netmask, broadcast and default gateway you want to setup for the machine, separated by ':'. Or alternatively, you may specify the dhcp keyword so that a DhCP request is made to get those information. On some configurations, you may also want to increase the number of ping queries made before the NFS mount, which is of 3 by default, using the ping option and give the number you want. 28 28 29 Please report any problem around that tool to b cornec@users.berlios.de29 Please report any problem around that tool to bruno@mondorescue.org 30 30 31 31 2005-12-18 new ipconf and ping option -
branches/2.0.8/mindi/aux-tools/sbin
-
Property svn:unix-mode
set to
mindi/aux-tools/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/aux-tools/usr
-
Property svn:unix-mode
set to
mindi/aux-tools/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/aux-tools/usr/share
-
Property svn:unix-mode
set to
mindi/aux-tools/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/aux-tools/usr/share/terminfo
-
Property svn:unix-mode
set to
mindi/aux-tools/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/aux-tools/usr/share/terminfo/l
-
Property svn:unix-mode
set to
mindi/aux-tools/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/distributions/gentoo/mindi.ebuild
r535 r576 1 # Copyright 1999-200 5Gentoo Foundation1 # Copyright 1999-2004 Gentoo Foundation 2 2 # Distributed under the terms of the GNU General Public License v2 3 # $Header: $ 4 3 5 # $Id$ 4 6 5 7 DESCRIPTION="A program that creates emergency boot disks/CDs using your kernel, tools and modules." 6 8 HOMEPAGE="http://www.mondorescue.org" 7 SRC_URI="ftp://ftp.mondorescue.org/src/${P }.tgz"9 SRC_URI="ftp://ftp.mondorescue.org/src/${PVR}.tar.gz" 8 10 9 11 LICENSE="GPL-2" … … 14 16 DEPEND="virtual/libc" 15 17 RDEPEND=">=app-arch/bzip2-0.9 16 >=sys-apps/mindi-kernel-1.0-r117 18 sys-libs/ncurses 18 19 sys-devel/binutils … … 27 28 export PREFIX="/usr" 28 29 export CONFDIR="/etc" 30 export DONT_RELINK=1 29 31 export RPMBUILDMINDI="true" 30 32 ./install.sh -
branches/2.0.8/mindi/distributions/mandriva/spec.m4
r388 r576 2 2 dnl 3 3 dnl SSS is replaced by the source package format 4 define(`SSS', ` %{name}-%{version}.tar.bz2')dnl4 define(`SSS', `ftp://ftp.mondorescue.org/src/%{name}-%{version}-%{tag}.tar.bz2')dnl 5 5 dnl DDD is replaced by the list of dependencies specific to that distro 6 define(`DDD', ` %{addreqb}, which, grep >= 2.5')dnl6 define(`DDD', `, which, grep >= 2.5')dnl 7 7 dnl GRP is replaced by the RPM group of apps 8 8 define(`GRP', `Archiving/Backup')dnl -
branches/2.0.8/mindi/distributions/redhat/spec.m4
r495 r576 2 2 dnl 3 3 dnl SSS is replaced by the source package format 4 define(`SSS', ftp://ftp.mondorescue.org/src/%{name}-%{version}.tgz)dnl4 define(`SSS', `ftp://ftp.mondorescue.org/src/%{name}-%{version}-%{tag}.tar.gz')dnl 5 5 dnl DDD is replaced by the list of dependencies specific to that distro 6 define(`DDD', %{addreqb}, which, grep >= 2.5)dnl6 define(`DDD', `, which, grep >= 2.5')dnl 7 7 dnl GRP is replaced by the RPM group of apps 8 define(`GRP', Applications/Archiving)dnl8 define(`GRP', `Applications/Archiving')dnl -
branches/2.0.8/mindi/distributions/rpm/mindi.spec
r495 r576 2 2 # $Id$ 3 3 # 4 %define name mindi5 %define version VVV6 4 %define mrel RRR 7 %define src SSS 8 %define grp GRP 9 %define addreqb bzip2 >= 0.9, mkisofs, ncurses, binutils, gawk, dosfstools 10 %define addreq DDD 11 %define rel %{mrel} 5 %define tag TTT 12 6 13 7 Summary: Mindi creates emergency boot disks/CDs using your kernel, tools and modules 14 Name: %name15 Version: %version16 Release: % rel8 Name: mindi 9 Version: VVV 10 Release: %mrel 17 11 License: GPL 18 Group: %{grp}12 Group: GRP 19 13 Url: http://www.mondorescue.org 20 Source: %{src}14 Source: SSS 21 15 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -u -n) 22 Requires: %{addreq} 23 Epoch: %(echo EEE | cut -d- -f1 | sed "s~M~~") 16 Requires: bzip2 >= 0.9, mkisofs, ncurses, binutils, gawk, dosfstools DDD 24 17 # Not on all systems 25 18 #Conflicts: bonnie++ … … 32 25 33 26 %prep 34 %setup -n %name-%{version} 27 %setup -n %name-%{version}-%{tag} 35 28 36 29 %build … … 59 52 60 53 %files 61 %defattr(644,root,root,755)62 54 %config(noreplace) %{_sysconfdir}/mindi 63 55 %config(noreplace) %{_sysconfdir}/mindi/deplist.txt … … 65 57 %{_mandir}/man8/* 66 58 %{_libdir}/mindi 67 %attr(755,root,root) %{_sbindir}/* 68 %attr(755,root,root) %{_libdir}/mindi/aux-tools/sbin/* 69 %attr(755,root,root) %{_libdir}/mindi/rootfs/bin/* 70 %attr(755,root,root) %{_libdir}/mindi/rootfs/sbin/* 59 %{_sbindir}/* 71 60 72 61 %changelog -
branches/2.0.8/mindi/distributions/suse/spec.m4
r401 r576 2 2 dnl 3 3 dnl SSS is replaced by the source package format 4 define(`SSS', %{name}-%{version}.tgz)dnl4 define(`SSS', `ftp://ftp.mondorescue.org/src/%{name}-%{version}-%{tag}.tar.gz')dnl 5 5 dnl DDD is replaced by the list of dependencies specific to that distro 6 define(`DDD', %{addreqb}, syslinux)dnl6 define(`DDD', `, syslinux')dnl 7 7 dnl GRP is replaced by the RPM group of apps 8 define(`GRP', Productivity/Archiving/Backup)dnl8 define(`GRP', `Productivity/Archiving/Backup')dnl -
branches/2.0.8/mindi/mindi
r528 r576 702 702 pwd=`pwd` 703 703 if [ "$YOUR_KERNEL_SUCKS" ] ; then 704 cd $TMP_ROOT705 else 706 cd /704 cd $TMP_ROOT 705 else 706 cd / 707 707 fi 708 708 if [ ! -e "$1" ] ; then 709 LogIt "Warning - cannot search specific path '$1'\n"710 return 1709 LogIt "Warning - cannot search specific path '$1'\n" 710 return 1 711 711 fi 712 712 modpaths=`find $1 -name $2.*o -type f` … … 1222 1222 echo "echo -en \"Loading your modules...\"" >> $outfile 1223 1223 if [ "$YOUR_KERNEL_SUCKS" ] ; then 1224 kver=$FAILSAFE_KVER1225 cd $TMP_ROOT1226 searchpath=lib/modules/$kver1224 kver=$FAILSAFE_KVER 1225 cd $TMP_ROOT 1226 searchpath=lib/modules/$kver 1227 1227 else 1228 1228 ### … … 1239 1239 ### Sq-Modification end 1240 1240 ### 1241 searchpath=/lib/modules/$kver1241 searchpath=/lib/modules/$kver 1242 1242 fi 1243 1243 … … 2780 2780 old_pwd=`pwd` 2781 2781 if [ "$YOUR_KERNEL_SUCKS" ] ; then 2782 cd $TMP_ROOT2783 floppy_modules_path=lib/modules/$FAILSAFE_KVER2784 else 2785 cd /2782 cd $TMP_ROOT 2783 floppy_modules_path=lib/modules/$FAILSAFE_KVER 2784 else 2785 cd / 2786 2786 ### 2787 2787 ### Sq-Modification... Use kernel name in module path if specified. … … 2790 2790 if [ "${kernelname}" != "" ] 2791 2791 then 2792 2792 floppy_modules_path=lib/modules/${kernelname} 2793 2793 else 2794 2794 floppy_modules_path=lib/modules/`uname -r` 2795 2795 fi 2796 2796 ### … … 2800 2800 floppy_modules="" 2801 2801 if [ "$disksize" -lt "2880" ] ; then 2802 list_of_groovy_mods="$FLOPPY_MODS `WhichOfTheseModulesAreLoaded "$SCSI_MODS"`"2802 list_of_groovy_mods="$FLOPPY_MODS $IDE_MODS ide-scsi sr_mod `WhichOfTheseModulesAreLoaded "$SCSI_MODS"`" 2803 2803 else 2804 2804 list_of_groovy_mods="$CDROM_MODS `WhichOfTheseModulesAreLoaded "$SCSI_MODS"`" … … 2815 2815 [ -e "$floppy_modules_path" ] || LogIt "path $floppy_modules_path does not exist.\n If you're not using a modular kernel then you're NUTS.\n" 2816 2816 for i in $list_of_groovy_mods ; do 2817 floppy_modules="$floppy_modules `FindSpecificModuleInPath $floppy_modules_path $i`"2817 floppy_modules="$floppy_modules `FindSpecificModuleInPath $floppy_modules_path $i`" 2818 2818 done 2819 2819 for i in $floppy_modules ; do 2820 2820 [ -e "$i" ] && s=`du -sk $i | cut -f1` || s="" 2821 [ "$YOUR_KERNEL_SUCKS" ] && i=$TMP_ROOT/$i2822 echo "Adding $i ($s KB) to the rootfs" >> $LOGFILE2823 cp -df $i $mountpoint/ || LogIt "Unable to copy $i to $mountpoint\n"2824 [ "`echo "$i" | fgrep ".gz"`" ] && gunzip -f $mountpoint/`basename $i`2821 [ "$YOUR_KERNEL_SUCKS" ] && i=$TMP_ROOT/$i 2822 echo "Adding $i ($s KB) to the rootfs" >> $LOGFILE 2823 cp -df $i $mountpoint/ || LogIt "Unable to copy $i to $mountpoint\n" 2824 [ "`echo "$i" | fgrep ".gz"`" ] && gunzip -f $mountpoint/`basename $i` 2825 2825 done 2826 2826 # if [ -e "/dev/.devfsd" ] ; then -
branches/2.0.8/mindi/parted2fdisk.pl
r221 r576 4 4 # 5 5 # parted2fdisk: fdisk like interface for parted 6 # [developped for mindi/mondo http:// mondorescue.berlios.de]6 # [developped for mindi/mondo http://www.mondorescue.org] 7 7 # 8 8 # Aims to be architecture independant (i386/ia64) -
branches/2.0.8/mindi/rootfs/bin
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/dev
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/etc
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/lib
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/proc
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/root
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/sbin
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/tmp
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/usr
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/usr/X11R6
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/usr/X11R6/bin
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/usr/X11R6/lib
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/usr/bin
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/usr/lib
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/usr/local
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/usr/local/bin
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/usr/local/sbin
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/usr/sbin
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/usr/share
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/usr/share/udhcpc
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/var
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/var/log
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mindi/rootfs/var/run
-
Property svn:unix-mode
set to
mindi/rootfs/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo-doc/VERSION
r547 r576 1 stable 1 2.0.8 -
branches/2.0.8/mondo/ChangeLog
r438 r576 2 2 3 3 MONDO CHANGES 4 5 2.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) 4 25 5 26 2.0.7 (2006-03-10) -
branches/2.0.8/mondo/configure.in
r519 r576 1 1 dnl Autoconfigure file for Mondo Rescue v2.0x 2 dnl Mondo by Hugo Rabson2 dnl Mondo by Mondo dev team 3 3 dnl This script by Joshua Oreman 4 4 dnl -
branches/2.0.8/mondo/distributions/gentoo/mondo.ebuild
r535 r576 1 # Copyright 1999-200 5Gentoo Foundation1 # Copyright 1999-2004 Gentoo Foundation 2 2 # Distributed under the terms of the GNU General Public License v2 3 # $Header: $ 4 3 5 # $Id$ 4 6 … … 7 9 DESCRIPTION="The premier GPL disaster recovery solution." 8 10 HOMEPAGE="http://www.mondorescue.org" 9 SRC_URI="ftp://ftp.mondorecue.org/src/${PN/-rescue/}-${PV} .tgz"11 SRC_URI="ftp://ftp.mondorecue.org/src/${PN/-rescue/}-${PV}-${PR}.tgz" 10 12 11 13 LICENSE="GPL-2" … … 27 29 >=sys-boot/syslinux-1.52" 28 30 29 S=${WORKDIR}/${PN/-rescue/}-${PV} 31 S=${WORKDIR}/${PN/-rescue/}-${PV}-${PR} 30 32 31 33 src_unpack() { … … 38 40 elibtoolize 39 41 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" 42 43 } 43 44 44 45 src_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" 47 48 exeinto /usr/share/mondo 48 49 doexe mondo/autorun … … 54 55 einfo "Or visit the website @ ${HOMEPAGE}" 55 56 echo 56 ewarn "This package is still in unstable."57 ewarn "This package is a new version after a long gap." 57 58 ewarn "Please report bugs to http://bugs.gentoo.org/" 58 59 ewarn "However, please do an advanced query to search for bugs" -
branches/2.0.8/mondo/distributions/mandriva/changelog
r424 r576 9 9 - Add -p option 10 10 11 * Tue May 03 2005 Hugo Rabson <hugorabson@msn.com> 2.04_cvs_2005050312 13 - made mondo more clever about finding its home. Avoids mondo considering14 directories like '/usr/share/doc/momdo' as its home.15 16 * Wed Aug 04 2004 Hugo Rabson <hugorabson@msn.com> 2.0317 18 - test sanity of user-specified tempdir19 - better SLES8 support20 21 * Mon Jun 28 2004 Hugo Rabson <hugorabson@msn.com> 2.0222 23 - instead of using 'dd' to erase partition table, delete existing24 partitions w/ the same call to fdisk that is used to create the25 new partitions; this should avoids locking up the partition table26 - set bootable partition in the above same call to fdisk, for27 the same reason (avoids locking up the partition table)28 - better software RAID support29 - mount ext3 partitions as ext2 when restoring - better for Debian30 - better star, ACL support31 - added ACL, xattr support for afio users32 33 * Sat Jun 26 2004 Hugo Rabson <hugorabson@msn.com> 2.0134 35 - fixed cvs for SuSE systems36 - fixed NTFS backup/restore bug relating to partimagehack37 log file overflow and NTFS v non-NTFS differentiation38 - more reliable extraction of config info from CDs, floppies39 - better support of ISO dirs at restore-time (Conor Daly)40 - fixed spec file for SuSE users41 - added ldconfig to install section42 43 * Sat Jun 19 2004 Hugo Rabson <hugorabson@msn.com> 2.0044 45 - first 2.0 release46 - updated grub-install.patched to support SuSE and Red Hat47 - call 'mt' to set block size to 32K before opening in/out tape48 - updated mondo-prep.c to create each disk's partitions all at once49 (one call per drive) instead of one call to fdisk per partition50 - when extracting cfg file and mountlist from all.tar.gz (tape copy),51 use block size of INTERNAL_TAPE_BLK_SIZE, not TAPE_BLOCK_SIZE52 - added star and rudimentary SELinux support53 - fixed lots of bugs54 - all logging now goes to /var/log/mondo-archive.log, with symlink55 to /tmp/mondo-restore.log for restore-time log-tracking56 - added grub-install.patched57 - removed embleer & other binaries58 - added '-b' to specify block size59 - added '-R' for star support60 61 * Thu Mar 25 2004 Bruno Cornec <Bruno.Cornec@hp.com> 1.7_cvs-2004032562 63 - ia64 fixes64 65 * Fri Nov 07 2003 Joshua Oreman <oremanj@get-linux.org> 1.7_cvs-2003110766 67 - fixed symbolic links for libraries68 - added support for boot/root multi floppies69 70 - added kdelibs as xmondo dependency71 - added xmondo pixmap installation72 - better find_cdrom_device(), to cope w/ multiple CD writers73 - fixed -m and -Vc flags74 - fixed NTFS support!75 - bootable CD uses native, not El Torito, support now76 - removed mondo-makefilelist77 - added 2.6 kernel support78 - if 2.6 kernel, insist that the user specify CD device79 - drop Embleer; insist on ms-sys and parted if Windows partition80 81 * Wed Nov 05 2003 Jesse Keating <jkeating@j2solutions.net> 1.7_cvs-20031105.182 83 - added -devel package84 85 * Tue Nov 04 2003 Jesse Keating <jkeating@j2solutions.net> 1.7_cvs-20031104.186 87 - made xmondo a second package88 - added ability to specify --without xmondo at build time89 90 * Sun Nov 02 2003 Jesse Keating <jkeating@j2solutions.net> 1.7_cvs-20031102.191 92 - Clean up, added spanish translation93 - Set prefix to be /usr94 - added/fixed Requires95 - remove CVS directories prior to building96 97 * Thu Oct 23 2003 Hugo Rabson <hugorabson@msn.com> 1.75_cvs_2003102398 99 - nothing yet100 101 * Wed Oct 22 2003 Hugo Rabson <hugorabson@msn.com> 1.75102 103 - fixed chmod/chown bug (Jens Richter)104 - ask user to confirm NFS mountpoint in Interactive Mode105 - rewritten format_everything() to make sure LVMs, RAIDs and106 regular partitions are prepped in the correct order107 - better magicdev support108 - rewritten external binary caller subroutine109 - DVD support added110 - better backup-time control gui; offer to exclude nfs if appl.111 - fixed multi-tape support112 - re-implemented -D and -J113 - fixed bug in extract_config_file_from_ramdisk() which114 affected tape+floppy users115 - updated is_incoming_block_valid() to make it116 return end-of-tape if >300 flotsam blocks117 - unmount CD-ROM before burning (necessary for RH8/9)118 - fixed some stray assert()'s119 - fixed bug in grub-MR (Christian)120 - make user remove floppy/CD before restoring interactively from tape121 - fixed bug in am_I_in_disaster_recovery_mode()122 - added code to nuke_mode() to make sure NFS123 (backup) share is mounted in Nuke Mode124 - improved tape device detection code125 - better GRUB support126 - better logging of changed bigfiles at compare-time127 - better NTFS support, thanks to partimagehack-static128 - better logging129 - rewrote tape-handling code, breaking compatibility w/ previous versions130 - fixed ISO/CD biggiefile verification bug in mondoarchive131 - fixed bug which stopped boot/compare-time changelist from popping up132 - replaced mondo-makefilelist with C code - faster, cleaner133 - tweaked GUI - better feedback134 135 * Wed May 28 2003 Anonymous <root@rohan> 1.74136 137 - misc fixes (Michael Hanscho's friend)138 - added rudimentary support for SME139 - added better label support140 - fixed biggietime atime/ctime restoration bug 73141 - fixed 'default boot loader' detection bug (Joshua Oreman)142 - use single-threaded make_afioballs_and_images() if FreeBSD143 - 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 tweaks147 - fixed silly bug in load_filelist() which stopped148 funny German filenames from being handled properly149 - fixed various calls to popup_and_get_string()150 - fixed spec file151 - reject -E /152 - added partimagehack to the mix153 154 * Tue May 20 2003 Anonymous <root@rohan> 1.73155 156 - mark devices as bootable _after_ unmounting them157 - resolve boot device (-f) if softlink158 - post_param_configuration() --- store iso-dev and isodir159 - added post-nuke-sample.tgz to package160 - Nuke Mode now checks mountlist against hardware; offer user161 opportunity to edit mountlist if insane; if user declines, abort162 - added lots of assert()'s and other checks163 - ran code thru Valgrind to catch & fix some memory leaks164 - made mondo-restore.c smaller by moving some subroutines to165 common/libmondo-raid.c and mondorestore/mondo-rstr-compare.c166 - added '-Q' to let user test mondoarchive's ability to find167 their boot loader and type168 - improved which_boot_loader()169 - when burning or comparing to a CD, defeat autorun if it is170 running, to avoid confusing mondoarchive and the user171 - if original backup media no longer available at boot-time172 then offer user chance to choose another media source173 - when booting, type 'nuke noresize' to nuke w/o resizing174 mountlist to fill your drives175 - add 'textonly' when booting, to avoid using Newt gui176 - run nice(20) to prioritize mondoarchive at start177 - don't pause and wait for next blank CD at backup-time178 unless necessary (e.g. previous CD has not been removed)179 - get_phys_size_of_drive() --- better support of older drives180 - don't eject if "donteject" is in kernel's command line181 - cleaned up segfault-handling182 - added Conor's strip_path() to improve file list display183 - added Herman Kuster's multi-level bkp patch184 - better boot-time screen/message185 - added Joshua Oreman's FreeBSD patches x3186 - fixed interactive/textonly support187 - fixed support for subdir-within-NFS-mount188 - fixed "Can't backup if ramdisk not mounted" bug189 - try to work around eccentricities of multi-CD drive PCs190 - misc clean-ups (Steve Hindle)191 192 * Tue Apr 08 2003 Hugo Rabson <hugorabson@msn.com> 1.72193 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 makefile199 - if root is /dev/root then assume not a ramdisk200 - 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 bug203 - ask user speed of CDRW if writing to CD204 - find_cdrom_device() --- if nonexistent/not found then205 make sure to return '' as dev str and 1 as res206 - tweaked restore scripts tgz207 - cleaned up find_cdrom_device()208 - if user creates /usr/share/mondo/payload.tgz then untar209 payload to CD at backup-time210 - fixed insist_on_this_cd_number()211 - fixed am_i_in_disaster_recovery_mode()212 - misc clean-up (Tom Mortell)213 - made code more legible214 - fixed post-nuke support215 - added -e support216 - fixed nfs support217 - fixed iso support218 - at restore-time, only sort mountlist internally,219 in mount_all_devices() and unmount_all_devices()220 - fixed cosmetic bug in label-partitions-as-necessary221 - updated documentation222 - fixed fstab-hacking scripts223 224 * Wed Feb 12 2003 Hugo Rabson <hugorabson@msn.com> 1.71225 226 - log newt, slang, ncurses info227 - updated man page228 - handle % chars in issue.net properly (Heiko Schlittermann)229 - fixed serious NFS restore bug230 - cleaned up spec file; it should cause fewer problems now (Jesse Keating)231 - changed various strcpy() calls to strncpy() calls232 - added mondo-makefilelist to makefile (Mikael Hultgren)233 - mount_cdrom() better at handling multiple CD drives234 - exclude /media/cdrom,cdrecorder,floppy235 - sensibly_set_tmpdir_and_scratchdir() --- exclude smb and smbfs236 - better logging by eval_call_to_make_ISO()237 - accept -J <fname> to let user provide their own fs catalog238 instead of -I <paths> to backup239 - if dir excluded with -E or included with -I and dir is actually240 a softlink then exclude/include the dir pointed to, as well241 - better location for manpage242 - adjusted block size of tarball at start of tape, to help243 users w/ broken tape driver firmware244 - sort -u fstab after modifying it245 - if backup type is nfs then don't estimate noof media246 - fixed Makefile (Mikael Hultgren)247 - updated manpage248 249 * Sat Dec 07 2002 Hugo Rabson <hugo@firstlinux.net> 1.70250 251 - new devel branch opened252 253 * Mon Dec 02 2002 Hugo Rabson <hugo@firstlinux.net> 1.52254 255 - fixed bug in multithreading256 - use new grub-MR instead of grub-install257 - wipe only the partition table (not the MBR) when partitioning drives258 - ignore lilo.conf.anaconda when looking for lilo.conf file259 - accepts '-l RAW' to backup/restore original boot sector instead260 of running grub or lilo to init it after restoring261 - fixed&updated stabgrub-me script; software RAID + GRUB work now262 - mount/unmount /boot partition for Gentoo 1.2 users263 - re-enabled extra tape checksums264 - disabled spurious warnings265 - unmount/remount supermounts at start/end of live restore, if nec.266 - cleaned up mondo's tape block handling (now, TAPE_BLOCK_SIZE=128K267 and I've added INTERNAL_TAPE_BLK_SIZE=32K variable for buffering)268 - added Makefile269 - added -l RAW, to backup and restore original MBR270 - cleaned up iso_mode() and nfs restoring271 - create /mnt/RESTORING/mnt/.boot.d for Gentoo users272 - made mondorestore CD bootable for ArkLinux users273 - if user runs as 'su' not 'su -' then work around274 275 * Sun Nov 17 2002 Hugo Rabson <hugo@firstlinux.net> 1.51276 277 - pop-up list of changed files, at end of verification phase278 - better handling of changed.files list at restore-time279 - lots of CD-related fixes280 - added '-N' flag --- to let user exclude all NFS-related mounts&devices281 - better handling of 'kill'282 - restructuring of code to ease integration of mondo w/XMondo283 - fixed obscure bug in find_and_mount_actual_cd()284 - if / or /root has <50MB free then abort & complain285 - fixed install.sh286 - fixed .spec file287 - updated documentation288 - commented code289 - updated man page290 - added -v / --version flag291 - replace convoluted grep with wc (KP)292 - fixed bug affecting restoration of bigfiles from CD's created w/0 compression293 - fixed BurnProof-related bug294 - better at figuring out which is the best partition for temp/scratchdir295 - added do-not-compress-these (text file) to RPM296 - do not compress files of types listed in do-not-compress-these297 - dropped -U from call to afio - saves 20-30% runtime (Cosgrove)298 - added Cosgrove's do-not-compress-these list299 - included various patches from KP300 - chmod tmpdir, scratchdir to 700 before using301 - restore from specified backup device, even if its own cfg file disagrees302 - fixed multi-tape bug303 - fixed "Can't find first ISO when verifying nonbootable ISO" bug304 - multithreaded make_afioballs_and_images()305 - tmpdir and scratchdir are set sensibly whether mondoarchive is called with306 command-line parameters or not307 - fixed bug in strip_spaces() which stopped it from handling308 small strings correctly - affected mountlist editor309 - 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-makefilelist312 313 * Sun Sep 08 2002 Hugo Rabson <hugo@firstlinux.net> 1.50314 315 - if restoring, don't try to find SCSI node of CD-ROM drive; find /dev entry316 - during selective restore, skip filesets which don't contain relevant archives317 - set /dev/null's perms to 777, just in case devfs-enabled kernel mangles it318 - remove /var/run/*.pid after restoring319 - move spurious lockfiles from /home/* to /home/*/.disabled320 - ask user to confirm the tape/CD device name321 - lots of multitape-related fixes322 - added code to autodetect the hardware of the user, if possible323 - if isodir does not exist then abort324 - more sanity-checking for -d flag325 - doubled 'biggiefile' threshold... to 32MB326 - exclude /root/images/mindi327 - fixed multi-imagedev bug (Emmanuel Druon)328 - unmount/remount /mnt/floppy before/after backing up, if Mandrake329 - restructured the source files330 - fixed serious bug in line 1546 - should have been !=, not ==; stopped331 mondorestore from correctly restoring big files332 - added '#include <signal.h>' to my-stuff.h333 - exclude "incheckentry xwait()" from changed.files334 - fixed minor bug in find_cdrom_device()335 - fixed bug in friendly_sizestr...336 - insist on tape #1 when start verifying337 - added internal buffering, replacing the external 'buffer' exe338 - if differential backup then don't permit formatting or fdisking,339 whether Interactive or Nuke mode340 - if mondorestore is run on live filesystem (or from ramdisk) without341 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 there343 - if tape streamer is softlink then resolve it first344 - incorporate post-nuke tarball345 - if user doesn't specify tape size, proceed anyway; behave intelligently346 in the event of end-of-tape347 - prefix bkpinfo->restore_path to biggiefile fname before generating348 checksum & comparing to archived biggiefile349 - if /etc/lilo.conf not found not /etc/lilo.conf.anaconda found350 then create a softlink from the former to the latter, to work351 around RH7.3's b0rken LILO support352 - LFS support (mharris, michele, hugo)353 - fixed verify bug --- CD#1 was being verified again & again & ...354 - differential mode fixed; supported again355 - ask user for boot loader + device if not detectible356 - list up to 512 files in file selection window at once (was 128)357 - better handling of bigfiles' checksums, perms and owns358 - delete final filelist if <=2 bytes long359 - if kernel not found and mondo in graphics mode then popup and ask360 for kernel path+filename361 362 * Sun Jul 14 2002 Hugo Rabson <hugo@firstlinux.net> 1.45-1363 364 - 1.5x branch forked off from 1.4x branch365 -
branches/2.0.8/mondo/distributions/mandriva/spec.m4
r519 r576 2 2 dnl 3 3 dnl SSS is replaced by the source package format 4 define(`SSS', ` %{name}-%{version}.tar.bz2')dnl4 define(`SSS', `ftp://ftp.mondorescue.org/src/%{name}-%{version}-%{tag}.tar.bz2')dnl 5 5 dnl DDD is replaced by the list of dependencies specific to that distro 6 define(`DDD', `%{addreqb}')dnl6 define(`DDD', )dnl 7 7 dnl GRP is replaced by the RPM group of apps 8 8 define(`GRP', `Archiving/Backup')dnl 9 dnl OBS is replaced vywhat is being obsoleted9 dnl OBS is replaced with what is being obsoleted 10 10 define(`OBS', `Obsoletes: libmondo <= 2.04 11 11 Provides: libmondo')dnl -
branches/2.0.8/mondo/distributions/redhat/changelog
r535 r576 1 * Fri Feb 17 2006 Bruno Cornec <bruno@mondorescue.org> VVV1 * Fri Feb 17 2006 Bruno Cornec <bruno@mondorescue.org> 2.0.7-1 2 2 - Updated to 2.0.7 3 3 - RPM sepc files are now generated -
branches/2.0.8/mondo/distributions/redhat/spec.m4
r535 r576 2 2 dnl 3 3 dnl SSS is replaced by the source package format 4 define(`SSS', ftp://ftp.mondorescue.org/src/%{name}-%{version}.tgz)dnl4 define(`SSS', `ftp://ftp.mondorescue.org/src/%{name}-%{version}-%{tag}.tar.gz')dnl 5 5 dnl DDD is replaced by the list of dependencies specific to that distro 6 define(`DDD', %{addreqb})dnl6 define(`DDD', )dnl 7 7 dnl GRP is replaced by the RPM group of apps 8 define(`GRP', Applications/Archiving)dnl8 define(`GRP', `Applications/Archiving')dnl 9 9 dnl OBS is replaced vy what is being obsoleted 10 10 define(`OBS', )dnl -
branches/2.0.8/mondo/distributions/rpm/mondo.spec
r535 r576 3 3 # 4 4 5 %define name mondo6 %define version VVV7 5 %define mrel RRR 6 %define tag TTT 8 7 # if mandriva official build (rpm --with is_official) 9 8 %{?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 15 10 16 11 Summary: A program which a Linux user can utilize to create a rescue/restore CD/tape … … 19 14 Summary(sp): Un programa para los usuarios de Linux por crear una CD/cinta de restoracion/rescate 20 15 21 Name: %{name}22 Version: %{version}23 Release: %{ rel}16 Name: mondo 17 Version: VVV 18 Release: %{mrel} 24 19 License: GPL 25 Group: %{grp}20 Group: GRP 26 21 Url: http://www.mondorescue.org 27 Source: %{src}22 Source: SSS 28 23 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -u -n) 29 24 BuildRequires: newt-devel >= 0.50, slang-devel >= 1.4.1, gcc 30 Epoch: %(echo EEE | cut -d- -f1 | sed "s~M~~")31 25 OBS 32 26 %ifarch ia64 … … 65 59 66 60 %prep 67 %setup -q -n %name-%{version} 61 %setup -q -n %name-%{version}-%{tag} 68 62 69 63 %build … … 79 73 80 74 %files 81 %defattr(644,root,root,755)82 75 %doc ChangeLog svn.log 83 76 %doc INSTALL COPYING README TODO AUTHORS NEWS 84 77 %doc docs/en/mondorescue-howto.html docs/en/mondorescue-howto.pdf 85 78 79 <<<<<<< .working 86 80 %attr(755,root,root) %{_sbindir}/* 87 81 %attr(755,root,root) %{_datadir}/%{name}/restore-scripts/%{name}/* … … 89 83 %attr(755,root,root) %{_datadir}/%{name}/post-nuke.sample/usr/bin/post-nuke 90 84 %{_datadir}/%{name}/* 85 ======= 86 %{_sbindir}/* 87 %{_datadir}/%{name} 88 >>>>>>> .merge-right.r575 91 89 %{_mandir}/man8/* 92 90 -
branches/2.0.8/mondo/distributions/suse/spec.m4
r455 r576 2 2 dnl 3 3 dnl SSS is replaced by the source package format 4 define(`SSS', %{name}-%{version}.tgz)dnl4 define(`SSS', `ftp://ftp.mondorescue.org/src/%{name}-%{version}-%{tag}.tar.gz')dnl 5 5 dnl DDD is replaced by the list of dependencies specific to that distro 6 define(`DDD', %{addreqb}, buffer, cdrecord)dnl6 define(`DDD', `, buffer, cdrecord')dnl 7 7 dnl GRP is replaced by the RPM group of apps 8 define(`GRP', Productivity/Archiving/Backup)dnl8 define(`GRP', `Productivity/Archiving/Backup')dnl 9 9 dnl OBS is replaced vy what is being obsoleted 10 10 define(`OBS', )dnl -
branches/2.0.8/mondo/mondo/autorun
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/common/libmondo-raid-EXT.h
r128 r576 53 53 #endif 54 54 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); 55 extern int parse_mdstat(struct raidlist_itself *raidlist, char *device_prefix); 56 extern int create_raidtab_from_mdstat(char *raidtab_fname); -
branches/2.0.8/mondo/mondo/common/libmondo-raid.c
r273 r576 395 395 396 396 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) { 398 400 fprintf(fout, " raid-level linear\n"); 399 401 } else { … … 401 403 raidrec->raid_level); 402 404 } 403 fprintf(fout, " chunk-size %d\n", raidrec->chunk_size);404 405 fprintf(fout, " nr-raid-disks %d\n", 405 406 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 } 408 411 if (raidrec->parity_disks.entries > 0) { 409 412 fprintf(fout, " nr-parity-disks %d\n", 410 413 raidrec->parity_disks.entries); 411 414 } 412 413 415 fprintf(fout, " persistent-superblock %d\n", 414 416 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 } 415 439 save_additional_vars_to_file(&raidrec->additional_vars, fout); 416 440 fprintf(fout, "\n"); … … 713 737 714 738 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")) { 716 742 raidrec->raid_level = -1; 717 743 } else { … … 726 752 } else if (!strcmp(label, "chunk-size")) { 727 753 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 } 728 766 } else if (!strcmp(label, "device")) { 729 767 get_next_raidtab_line(fin, labelB, valueB); … … 972 1010 973 1011 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); 1012 int 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 1254 int 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); 990 1264 return (1); 991 1265 } 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 1118 1267 retval += save_raidlist_to_raidtab(raidlist, raidtab_fname); 1119 1268 return (retval); -
branches/2.0.8/mondo/mondo/common/libmondo-raid.h
r128 r576 43 43 #endif 44 44 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); 45 int create_raidtab_from_mdstat(char *raidtab_fname); 46 int parse_mdstat(struct raidlist_itself *raidlist, char *device_prefix); -
branches/2.0.8/mondo/mondo/common/libmondo-string-EXT.h
r128 r576 44 44 extern inline void turn_wildcard_chars_into_literal_chars(char *out, 45 45 char *in); 46 /* Valid external functions */ 47 extern 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$ */ 57 2 58 3 … … 1212 1157 } 1213 1158 1159 1160 /* New functions safe from a memory manageemnt point of view */ 1161 /* Developped by Andree Leidenfrost */ 1162 1163 char *mr_strtok(char *instr, const char *delims, int *lastpos) { 1164 1165 char *token = NULL; 1166 char *strptr = NULL; 1167 size_t pos1 = 0; 1168 size_t pos2 = 0; 1169 1170 if (strlen(instr) <= *lastpos) { 1171 *lastpos = 0; 1172 return token; 1173 } 1174 1175 strptr = instr + *lastpos; 1176 pos2 = strspn(strptr, delims); 1177 strptr += pos2; 1178 pos1 = strcspn(strptr, delims); 1179 token = malloc(sizeof(*token)*(pos1+1)); 1180 strncpy(token, strptr, pos1); 1181 *lastpos = *lastpos + pos1 + pos2 + 1; 1182 1183 return token; 1184 } 1214 1185 /* @} - end of stringGroup */ -
branches/2.0.8/mondo/mondo/common/libmondo-string.h
r128 r576 34 34 char *media_descriptor_string(t_bkptype); 35 35 inline void turn_wildcard_chars_into_literal_chars(char *out, char *in); 36 37 /* Valid external functions */ 38 char *mr_strtok(char *instr, const char *delims, int *lastpos); -
branches/2.0.8/mondo/mondo/common/libmondo-tools.c
r424 r576 442 442 assert(raidrec != NULL); 443 443 raidrec->raid_device[0] = '\0'; 444 raidrec->raid_level = 0; 445 raidrec->chunk_size = 4; 444 raidrec->raid_level = -9; 446 445 raidrec->persistent_superblock = 1; 446 raidrec->chunk_size = 64; 447 raidrec->parity = -1; 447 448 raidrec->data_disks.entries = 0; 448 449 raidrec->spare_disks.entries = 0; … … 1224 1225 log_to_screen 1225 1226 ("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"); 1227 1228 } 1228 1229 -
branches/2.0.8/mondo/mondo/common/mondostructures.h
r519 r576 150 150 */ 151 151 int index; 152 153 /** 154 * Type of disk. 155 */ 156 char type; // ' ' = data (default), S = spare, F = faulty 157 152 158 }; 153 159 … … 241 247 */ 242 248 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 243 254 244 255 /** … … 266 277 */ 267 278 struct additional_raid_variables additional_vars; 279 280 /** 281 * Resync progress for this device. 282 */ 283 int progress; 268 284 }; 269 285 … … 787 803 struct s_tapecat_entry el[MAX_TAPECATALOG_ENTRIES]; 788 804 }; 789 790 791 792 struct s_mdrec {793 int md; // /dev/mdN794 int raidlevel; // 0, 1, 5795 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 231 231 */ 232 232 #define MONDO_CFG_FILE_STUB "tmp/mondo-restore.cfg" 233 234 /** 235 * The RAID kernel proc file 236 */ 237 #define MDSTAT_FILE "/proc/mdstat" 233 238 234 239 /** -
branches/2.0.8/mondo/mondo/mondorestore/mondo-prep.c
r196 r576 695 695 696 696 /** 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 */ 704 int 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 /** 697 816 * Format @p device as a @p format filesystem. 698 817 * This will use the format command returned by which_format_command_do_i_need(). … … 704 823 * @return 0 for success, nonzero for failure. 705 824 */ 706 int format_device(char *device, char *format )825 int format_device(char *device, char *format, struct raidlist_itself *raidlist) 707 826 { 708 827 /** int **************************************************************/ … … 836 955 837 956 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 } 846 971 } 847 972 system("sync"); 848 973 sleep(2); 849 850 974 // log_to_screen("Starting %s", device); 851 975 // sprintf(program, "raidstart %s", device); … … 853 977 // log_msg(1, "%s returned %d", program, res); 854 978 // system("sync"); sleep(1); 855 if (g_fprep) {856 fprintf(g_fprep, "%s\n", program);857 }858 979 #endif 859 980 system("sync"); … … 923 1044 * @return The number of errors encountered (0 for success). 924 1045 */ 925 int format_everything(struct mountlist_itself *mountlist, 926 bool interactively)1046 int format_everything(struct mountlist_itself *mountlist, bool interactively, 1047 struct raidlist_itself *raidlist) 927 1048 { 928 1049 /** int **************************************************************/ … … 983 1104 if (do_it) { 984 1105 // 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); 986 1107 } 987 1108 g_current_progress += progress_step; … … 1000 1121 log_msg(1, "Creating LVMs"); 1001 1122 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); 1003 1124 log_to_screen("Configuring LVM"); 1004 1125 if (!g_text_mode) { … … 1076 1197 1077 1198 if (do_it) 1078 retval += format_device(me->device, me->format );1199 retval += format_device(me->device, me->format, raidlist); 1079 1200 } 1080 1201 … … 2247 2368 sprintf(program, "vinum stop -f %s", raid_device); 2248 2369 #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 } 2251 2376 #endif 2252 2377 log_msg(1, "program = %s", program); -
branches/2.0.8/mondo/mondo/mondorestore/mondo-restore.c
r519 r576 837 837 } 838 838 839 fmt_errs = format_everything(mountlist, FALSE );839 fmt_errs = format_everything(mountlist, FALSE, raidlist); 840 840 if (!fmt_errs) { 841 841 log_to_screen … … 855 855 if (ask_me_yes_or_no 856 856 ("Do you want to format your hard drives?")) { 857 fmt_errs = format_everything(mountlist, TRUE );857 fmt_errs = format_everything(mountlist, TRUE, raidlist); 858 858 if (!fmt_errs) { 859 859 done = TRUE; … … 1162 1162 system("sync"); 1163 1163 log_to_screen("Please wait. This may take a few minutes."); 1164 res += format_everything(mountlist, FALSE );1164 res += format_everything(mountlist, FALSE, raidlist); 1165 1165 } 1166 1166 paranoid_fclose(g_fprep); … … 3415 3415 } 3416 3416 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])); 3419 3419 } 3420 3420 … … 3515 3515 strcpy(g_mountlist_fname, "/tmp/mountlist.txt"); 3516 3516 load_mountlist(mountlist, g_mountlist_fname); 3517 res = format_everything(mountlist, FALSE );3517 res = format_everything(mountlist, FALSE, raidlist); 3518 3518 finish(res); 3519 3519 } -
branches/2.0.8/mondo/mondo/mondorestore/mondo-rstr-tools.c
r425 r576 2585 2585 int wait_for_percentage) 2586 2586 { 2587 struct s_mdstat *mdstat;2587 struct raidlist_itself *raidlist; 2588 2588 int unfinished_mdstat_devices = 9999, i; 2589 2589 char *screen_message; 2590 2590 2591 2591 malloc_string(screen_message); 2592 mdstat = malloc(sizeof(struct s_mdstat));2592 raidlist = malloc(sizeof(struct raidlist_itself)); 2593 2593 2594 2594 assert(wait_for_percentage <= 100); 2595 2595 iamhere("Help, my boat is sync'ing. (Get it? Urp! Urp!)"); 2596 2596 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); 2599 2601 return; 2600 2602 } 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) { 2603 2605 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); 2606 2609 open_evalcall_form(screen_message); 2607 if ( mdstat->el[i].progress == -1) // delayed while another partition inits2610 if (raidlist->el[i].progress == -1) // delayed while another partition inits 2608 2611 { 2609 2612 continue; 2610 2613 } 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); 2613 2617 sleep(2); 2614 if (read_mdstat(mdstat, mdstat_file)) { 2618 // FIXME: Prefix '/dev/' should really be dynamic! 2619 if (parse_mdstat(raidlist, "/dev/")) { 2615 2620 break; 2616 2621 } … … 2621 2626 } 2622 2627 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 58 58 int start_all_raid_devices(struct mountlist_itself *); 59 59 int stop_all_raid_devices(struct mountlist_itself *); 60 int format_everything(struct mountlist_itself *, bool );60 int format_everything(struct mountlist_itself *, bool, struct raidlist_itself *); 61 61 int partition_device(FILE *, const char *, int, int, const char *, 62 62 long long); … … 65 65 int partition_device_with_fdisk(FILE *, const char *, int, int, 66 66 const char *, long long); 67 int format_device(char *, char * );67 int format_device(char *, char *, struct raidlist_itself *); 68 68 int partition_drive(struct mountlist_itself *, char *); 69 69 int partition_everything(struct mountlist_itself *); -
branches/2.0.8/mondo/mondo/mondorestore/mr-externs.h
r128 r576 27 27 extern int edit_mountlist(char *mountlist_fname, struct mountlist_itself *, 28 28 struct raidlist_itself *); 29 extern int format_everything(struct mountlist_itself *, bool );30 extern int format_device(char *, char * );29 extern int format_everything(struct mountlist_itself *, bool, struct raidlist_itself *); 30 extern int format_device(char *, char *, struct raidlist_itself *); 31 31 extern void finish(int); 32 32 extern 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
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/etc
-
Property svn:unix-mode
set to
restore-scripts/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo
-
Property svn:unix-mode
set to
restore-scripts/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/ask-me-a-question
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/compare-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/compare-subroutine-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/edit-mountlist
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/grub-MR
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/grub-install.patched
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/hack-elilo
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/hack-fstab
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/hack-grub
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/hack-lilo
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/ide-opt
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/ide-opt-off
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/label-partitions-as-necessary
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/make-me-bootable
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/mount-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/mount-subroutine-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/raw-MR
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/restore-bigfiles-from-iso
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/stabelilo-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/stabgrub-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/stablilo-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/stabraw-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/unmount-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/unmount-subroutine-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/usr
-
Property svn:unix-mode
set to
restore-scripts/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/usr.bin
-
Property svn:unix-mode
set to
restore-scripts/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/usr/bin
-
Property svn:unix-mode
set to
restore-scripts/
-
Property svn:unix-mode
set to
-
branches/2.0.8/tools/common-env
r319 r576 1 1 #!/bin/bash 2 2 # 3 # Creates common environment from SVN repository3 # Creates common environment 4 4 # 5 5 # $Id$ … … 8 8 # Adapt to your needs 9 9 export BASE=${HOME}/mondo 10 11 # Should not be modified below 12 dname=`dirname $0` 13 export VER="branches/`cat $dname/../mondo/VERSION`" 14 export TMP=${BASE}/tmp 15 mkdir -p ${TMP} 16 17 export MINDI_VER=`cat ${BASE}/svn/${VER}/mindi/VERSION` 18 export MONDO_VER=`cat ${BASE}/svn/${VER}/mondo/VERSION` 19 20 # To be safe for SVN commands 21 cd $TOOLHOME/.. 22 export REVISION=`$TOOLHOME/mksvnversion` 10 export TOPDIR=${BASE}/build 11 mkdir -p ${TOPDIR} 12 export TMPDIR= 13 export TMP=`mktemp -d -p /tmp` -
branches/2.0.8/tools/livwww
r519 r576 47 47 48 48 . $TOOLHOME/common-env 49 . $TOOLHOME/svn-env 49 50 50 51 cd ${BASE}/svn … … 55 56 fi 56 57 57 svn export $optsvn ${ VER}/website $LOCALDIR58 svn export $optsvn ${SVNBRANCH}/website $LOCALDIR 58 59 59 60 if [ $force -eq 1 ]; then … … 62 63 fi 63 64 64 svn export $optsvn ${ VER}/documentation$LOCALDOC65 svn export $optsvn ${SVNBRANCH}/mondo-doc $LOCALDOC 65 66 66 67 # -
branches/2.0.8/tools/mkdeliv
r535 r576 20 20 fi 21 21 22 . $TOOLHOME/common-env 23 . $TOOLHOME/svn-env 22 24 . $TOOLHOME/rpm-env 23 25 -
branches/2.0.8/tools/mkqemu
r535 r576 3 3 # $Id$ 4 4 # 5 # Script allowing mondo packages production on various distributionswith qemu5 # Call virtual machine with qemu 6 6 # 7 7 8 8 if [ _"$1" == _"" ]; then 9 echo "Syntax: mkqemu [mondo version] ([vm].. )"9 echo "Syntax: qemu vm" 10 10 exit -1 11 else 12 m=$1 11 13 fi 12 14 13 if [ _"$2" == _"" ]; then 14 export SVN_VM="mdk101 mdk102 mdv2006 rh73 rh9 fc4 fc5 rhel3 rhel4 suse10 sles9 debian31 slackware102 gentoo" 15 else 16 export SVN_VM="$2" 17 fi 15 ipvm=10.0.2.15 18 16 19 cat > /tmp/mkmondo << EOF 20 #!/bin/bash 21 22 export SVN_HOME=\$HOME/mondo/svn/branches 23 export SVN_SSH="ssh -l bcornec" 24 export SVN_EDITOR=vim 25 export LANG="C" 26 export LANGUAGE="C" 27 export LC_ALL="C" 28 29 if [ -d \$SVN_HOME/$1 ]; then 30 cd \$SVN_HOME/$1 31 svn up 32 if [ \$? != 0 ]; then 33 echo "Verify SVN installation" 34 exit -1 35 fi 36 else 37 mkdir -p \$SVN_HOME 38 cd \$SVN_HOME 39 svn co svn+ssh://bcornec@svn.berlios.de/svnroot/repos/mondorescue/branches/$1 $1 40 if [ \$? != 0 ]; then 41 echo "Verify SVN installation" 42 exit -1 43 fi 44 fi 45 echo \$SVN_VM | grep -q "debian" 46 if [ \$? -eq 0 ]; then 47 \$SVN_HOME/$1/tools/mkdeb < /dev/null 48 else 49 echo \$SVN_VM | grep -q "slack" 50 if [ \$? -eq 0 ]; then 51 \$SVN_HOME/$1/tools/mkslack < /dev/null 52 else 53 echo \$SVN_VM | grep -q "gentoo" 54 if [ \$? -eq 0 ]; then 55 \$SVN_HOME/$1/tools/mkemerge < /dev/null 56 else 57 \$SVN_HOME/$1/tools/mkrpm < /dev/null 58 fi 59 fi 60 fi 61 \$SVN_HOME/$1/tools/mkdeliv 62 EOF 63 64 ipvm=10.0.2.15 65 sp=2222 66 67 for m in $SVN_VM; do 68 vmp=0 69 if [ ! -f /users/vmplayer/$m.qemu ]; then 70 echo "VM unaccessible. Verify NFS mount" 71 exit -1 72 fi 73 ps auxww | grep qemu | grep -v grep | grep -q /users/vmplayer/$m.qemu 74 if [ $? -ne 0 ]; then 75 # Virtual machine alreday started 76 vmp=1 77 qemu -m 256 $QEMUOPT -redir tcp:${sp}:${ipvm}:22 /users/vmplayer/$m.qemu & 78 sleep 300 79 fi 80 scp -P $sp /tmp/mkmondo bruno@localhost: 81 ssh -p $sp bruno@localhost "chmod 755 ./mkmondo ; ./mkmondo" | tee /tmp/mkvm.log 82 if [ $vmp -eq 1 ]; then 83 ssh -p $sp root@localhost "halt -p" 84 sleep 300 85 proces=`ps auxww | grep qemu | grep -v grep | grep -q /users/vmplayer/$m.qemu | awk '{print $2}'` 86 if [ "$proces" != "" ]; then 87 kill $proces 88 fi 89 fi 90 done 17 qemu -m 256 $QEMUOPT -redir tcp:${sp}:${ipvm}:22 /users/qemu/$m.qemu -
branches/2.0.8/tools/qemu-vm.txt
r535 r576 44 44 45 45 su - bruno 46 mkdir -p mondo/tmp RPMS/BUILD RPMS/RPMS/i386 RPMS/RPMS/noarch RPMS/SOURCES RPMS/SPECS RPMS/SRPMS RPMS/tmp SRPMS tmp46 mkdir -p mondo/tmp build 47 47 cat > ~bruno/.rpmmacros << EOF 48 %_topdir /home/bruno/ RPMS48 %_topdir /home/bruno/build 49 49 %_tmppath %{_topdir}/tmp 50 %packager Bruno Cornec <bruno@ HyPer-Linux.org>50 %packager Bruno Cornec <bruno@mondorescue.org> 51 51 EOF 52 52 cat > ~bruno/.rpmrc << EOF … … 66 66 svn.berlios.de,195.37.77.137 ssh-dss AAAAB3NzaC1kc3MAAACBAKouB77l1f4FgdP6DjLOgq5RKuGYm3zMJlM4WHcKzWnPuErZW4Omxk1CO0JojDNj/bjxz/95blWbdonEcAo0v71GcZbECFDsJdgVbZM+yxLHKOF4S5uHkiJ+LMawFcRoCGAochowoP9jUfLVAzyT1q3dbvmL43YO3FDvD+mCKTbZAAAAFQCWs/2nOqvitE/CyOCa81sadnzsPQAAAIBrgWRs2VN6jAtX1eUxPwtkJWX886DkiBwdEgtUwDW8RJJCFU6+zjNwFZ8VcjeA7OCFKmZqoD8ABojMMtB53VoXXRzp5PtWgJEMpCLOhHbAA6nLR+Zu9zV8rFHsrjvR17ZgmA8q1dZRqqvZSyzsoP4KdW7f9nD2SjFEVhjHfIsQmwAAAIEAoDlEoGO/lc8XkvNW7G8/rybzETG0cepONVKThYufP5Z2FdGj9a1TYc2Gaw2DygM20Ohwj1RW8aeRE/jYbEm4unM6IFYeLvCbDeeCCHCiCJmw/Pj2ityB5uPTat4Yn28FCd4eP5LyQq2EHz6bPA0LzpNJKwto4naIMsDpET1GNH0= 67 67 EOF 68 cat >> ~/.bash_profile << EOF69 export SVN_SSH="ssh -l bcornec"70 export SVN_M=svn+ssh://bcornec@svn.berlios.de/svnroot/repos/mondorescue/71 export SVN_EDITOR=vim72 EOF73 source ~/.bash_profile74 68 75 69 rebuild paquets necessaires mondo: … … 85 79 root: 86 80 rpm -ivh ~bruno/RPMS/RPMS/i386/afio-[0-9]* ~bruno/RPMS/RPMS/i386/buffer-[0-9]* 81 82 pour gentoo 83 chown bruno /etc/make.conf 84 bruno in portage group -
branches/2.0.8/website/download.shtml
r423 r576 3 3 burn it to a CD, and boot from it. It lets you test your RAM (with 4 4 memtest86) and your CPU (with cpuburn and lucifer). Feedback is welcome.</P> 5 <P ALIGN=JUSTIFY>6 <B>Debian users</B> - click to download <A HREF="http://packages.debian.org/cgi-bin/search_packages2.pl?keywords=mondo&searchon=names&version=all&release=all">Mondo</A>7 and <A HREF="http://packages.debian.org/cgi-bin/search_packages2.pl?keywords=mindi&searchon=names&version=all&release=all">Mindi</A>...8 and <A HREF="other/mindi-kernel-1.0.tgz">mindi-kernel</A> if your9 kernel blows. Much <A HREF="http://www.dictionary.com/search?q=kudos">kudos</A>10 is due to Héctor García Álvarez for rolling the11 DEBs. I am trying to create my own snapshot DEBs but I have not yet12 succeeded. Please be gentle with your criticism. :) My thanks go to13 Steve Hindle and Dagfinn Bakken for helping me with Debian.</P>14 <A HREF="daily/unstable/changes">Monitas</A> (alpha-quality)</TD>15 <TD WIDTH="25%" VALIGN=CENTER>16 <P ALIGN=CENTER>17 August/September</TD>18 <TD WIDTH="15%" VALIGN=CENTER>19 <P ALIGN=CENTER>20 <A HREF="monitas/stefan/html/monitasconcepts.html">HTML docs</A></TD>21 <TD WIDTH="15%" VALIGN=CENTER>22 <P ALIGN=CENTER>23 <A HREF="monitas/monitas.html">Download</A></TD>24 <TD WIDTH="15%" VALIGN=CENTER>25 <P ALIGN=CENTER>26 <A HREF="monitas/stefan/monitasconcepts.pdf">PDF docs</A></TD>27 </TR>28 </TABLE></P>29 </CENTER> -
branches/2.0.8/website/downloads.shtml
r519 r576 22 22 </div> 23 23 <p>We are interested in up to date mirrors for both the Web and FTP sites. Please contact us on the <a href="/support.shtml">mailing list</a>. 24 <ul> 25 <li><b>Europe</b>: 26 <ul> 27 <li><i>France</i>:</li> 28 <ul> 29 <li>HP/Intel Solution Center : 30 <a href="http://www.mondorescue.org">Web site</a>, 31 <a href="ftp://ftp.mondorescue.org">Ftp site</a> 32 </li> 33 </ul> 34 <li><i>Germany</i>:</li> 35 <ul> 36 <li>Linjection.org : 37 <a href="http://mondorescue.linjection.org">Web site</a>, 38 <a href="http://mondorescue.linjection.org/ftp">Ftp site (http)</a> 39 </li> 40 </ul> 41 </ul> 42 </ul> 24 43 25 44 <div class="h2-3"> -
branches/2.0.8/website/news.shtml
r519 r576 62 62 Release :-) 63 63 </p><p> 64 Now available at ftp://ftp. berlios.de/pub/mondorescue:<br>64 Now available at ftp://ftp.mondorescue.org :<br> 65 65 <br> 66 66 mandrake/10.1/mindi-1.06-266.10.1mdk.i386.rpm<br> … … 171 171 version numbers of mondo and mindi to avoid confusion. 172 172 </p><p> 173 So I can now annou ce the availability of the latest mondo and mindi173 So I can now announce the availability of the latest mondo and mindi 174 174 which can be downloadable from http://mondorescue.berlios.de 175 175 </p><p>
Note:
See TracChangeset
for help on using the changeset viewer.