[LUG.ro] Re: [LUG.ro] YaST será Open Source!

Alberto Cushnir (HotMail) lugro@lugro.org.ar
Fri, 19 Mar 2004 14:35:17 -0300


Aqui les mando el script si les sirve.

----------------------------------------------------------------------------
---------------------


#!/bin/sh

#
#
#

# Change according to your needs
VER=8.2
DIR="/srv/ftp/pub/suse/i386/$VER"
ISODIR="/srv/ftp/pub/cdlibrary/iso"
ISO="SuSE-${VER}-ftp.iso"
TMPDIR="/tmp"
MD5SUM_ER_FILE="md5sumerror"
LS_FILE="ls_for_dir"

# Programs and paths
WGETBIN=/usr/bin/wget
PINGBIN=/bin/ping
GREPBIN=/usr/bin/grep
RMBIN=/bin/rm
TOUCHBIN=/usr/bin/touch
FINDBIN=/usr/bin/find
PSBIN=/bin/ps
PWDBIN=/bin/pwd
MD5SUMBIN=/usr/bin/md5sum
MKISOFSBIN=/usr/local/bin/mkisofs
CUTBIN=/usr/bin/cut
SLEEPBIN=/bin/sleep
DOS2UNIXBIN=/usr/bin/dos2unix
LSBIN=/bin/ls
WCBIN=/usr/bin/wc


# You shouldn't need to change anything below this
SOURCE="$DIR/suse/src"
OPTS="-r -J -l -D -L -V  -P  -p  -abstract  -biblio -copyright"
BOOTDIR="boot/loader"
BOOT="isolinux.bin"
CAT="boot.cat"
BOPTS="-no-emul-boot -boot-load-size 4 -boot-info-table"
GRAFT="-graft-points /=$DIR"

declare -i PING
declare -i LOWPING
declare -a LS_FILE_ARRAY
declare -a LS_LEN_ARRAY


#### FUNCTIONS ####

# Choose Mirror
PING_MIRRORS () {
 echo "Looking for closest mirror"
 echo ""
 LIST="ftp-linux.cc.gatech.edu mirror.mcs.anl.gov ftp.gwdg.de
chuck.ucs.indiana.edu distro.ibiblio.org mirrors.usc.edu"
 let LOWPING=20000
 for HOST in $LIST ; do
  PING=`eval $PINGBIN -q -c 10 $HOST | $GREPBIN rtt | $CUTBIN -d "/" -f 5 |
$CUTBIN -d"." -f 1`
  echo "$HOST is $PING ms away"
  echo ""
  if [ "$PING" -lt  "$LOWPING" ] && [ "$PING" != "0" ] ; then
   LOWPING=$PING
   PINGTEST=$HOST
  fi
 done

 case $PINGTEST in
  mirrors.usc.edu)
    MIRROR="mirrors.usc.edu"
    MIRRORPATH="pub/linux/distributions/suse/i386/$VER"
    ;;
  distro.ibiblio.org)
    MIRROR="distro.ibiblio.org"
    MIRRORPATH="pub/Linux/distributions/suse/suse/i386/$VER"
    ;;
  ftp-linux.cc.gatech.edu)
    MIRROR="ftp-linux.cc.gatech.edu"
    MIRRORPATH="pub/suse/suse/i386/$VER"
    ;;
  mirror.mcs.anl.gov)
    MIRROR="mirror.mcs.anl.gov"
    MIRRORPATH="pub/suse/i386/$VER"
    ;;
  ftp.gwdg.de)
    MIRROR="ftp.gwdg.de"
    MIRRORPATH="pub/linux/suse/ftp.suse.com/suse/i386/$VER"
    ;;
  chuck.ucs.indiana.edu)
    MIRROR="chuck.ucs.indiana.edu"
    MIRRORPATH="linux/suse/suse/i386/$VER"
    ;;
 esac

 # Don't get source rpms as they won't fit on the DVD anyway
 EXCLUDESRC="$MIRRORPATH/suse/src"

 # Cut the directories in MIRRORPATH for the ftp mirror of MIRROR
 DIRCUT=`echo ${MIRRORPATH//[A-Za-z0-9\_\.\:\\\,\-]} | wc -c`
 echo ""
}

# Test to see if the SuSE version is available
TEST_DIR () {
 echo "Testing for $VER on $MIRROR"
 echo ""
 eval $WGETBIN -q  -O - ftp://$MIRROR/$MIRRORPATH/ >/dev/null
 NEWTEST=$?
}

# Exit if the SuSE version wanted isn't available

MIRROR () {
 if [ "$NEWTEST" = 0 ] ; then
  echo "OK"
  echo ""
  echo "Mirroring $MIRROR"
  eval $WGETBIN -cmq -nH --passive -X /$EXCLUDESRC -P
$DIR --cut-dirs=${DIRCUT// } ftp://${MIRROR}/${MIRRORPATH} &
  PID=$!
         while true ; do
                 RUNNING=`eval $PSBIN h -o pid  -p $PID`
                 if [ "${RUNNING}" ] ; then
                         echo -en "#"
                         eval $SLEEPBIN 5
                 else
    echo "#"
    echo "Download complete"
    echo ""
    break
   fi
         done
 else
  echo "$VER isn't avialable"
  exit 1
 fi
}

#Verify file sizes
LIST () {
 for DOTLIST in `eval $FINDBIN $DIR -name "\.listing"` ; do
  echo ""
  echo "Looking at ${DOTLIST%.*}"
  eval $DOS2UNIXBIN -q $DOTLIST
  eval $LSBIN -l ${DOTLIST%.*} | $GREPBIN -v total > $TMPDIR/$LS_FILE
  cd ${DOTLIST%.*}
  NAME=${DOTLIST%.*}
  PATH=${NAME//$DIR}
  let x=0
  while read x1 x2 x3 x4 LEN x5 x6 x7 FILE ; do
   if [ ! -d "$FILE" ] ; then
    LS_FILE_ARRAY["$x"]="$FILE"
    LS_LEN_ARRAY["$x"]="$LEN"
    let x++
   fi
  done < $TMPDIR/$LS_FILE
  COUNT=${#LS_FILE_ARRAY[@]}
  while read x1 x2 x3 x4 LEN x5 x6 x7 FILE ; do
   if [ ! -d $FILE ] ; then
    if [ -e $FILE ] ; then
     let z=0
     while [ $z -lt $COUNT ] ; do
      if [ "${FILE}" = "${LS_FILE_ARRAY["$z"]}" ] ; then
       echo -en "#"
       if [ "${LEN}" != "${LS_LEN_ARRAY["$z"]}" ] ; then
        echo "${LEN} ${LS_LEN_ARRAY["$z"]}"
        echo "#"
        echo "Getting $FILE again"
        eval $RMBIN $FILE
        while true ; do
         eval $WGETBIN -q ftp://$MIRROR/$MIRRORPATH/$PATH/$FILE &
         WGETTEST=$?
         PID=$!
                while true ; do
                        RUNNING=`eval $PSBIN h -o pid  -p $PID`
                        if [ "${RUNNING}" ] ; then
                                echo -en "#"
                                eval $SLEEPBIN 5
                        else
                                echo "#"
           echo ""
                                break
                        fi
                done
         if [ "$WGETTEST" = 0 ] ; then
          echo "Continuing file check"
          break
         fi
        done
       fi
      fi
      let z++
     done
    else
     echo "Getting $FILE again"
     while true ; do
      eval $WGETBIN -q ftp://$MIRROR/$MIRRORPATH/$PATH/$FILE &
      WGETTEST=$?
      PID=$!
             while true ; do
                     RUNNING=`eval $PSBIN h -o pid  -p $PID`
                     if [ "${RUNNING}" ] ; then
                             echo -en "#"
                             eval $SLEEPBIN 5
                     else
                             echo "#"
        echo ""
                             break
                     fi
             done
      if [ "$WGETTEST" = 0 ] ; then
       echo "Continuing file check"
       echo ""
       break
      fi
     done
    fi
   fi
  done < $DOTLIST
  eval $RMBIN $DOTLIST
  cd -
 done
}

# Check MD5SUMS for rpms
TEST_MD5SUMS () {
 if [ -e $TMPDIR/$MD5SUM_ER_FILE ] ; then
  eval $RMBIN $TMPDIR/$MD5SUM_ER_FILE
  eval $TOUCHBIN $TMPDIR/$MD5SUM_ER_FILE
 fi
 cd $DIR
 echo ""
 for MD in `eval $FINDBIN $DIR -name MD5SUMS` ; do
  cd ${MD%/*}
  echo "Checking sums in ${MD%/*}"
  echo ${MD%/*} >> $TMPDIR/$MD5SUM_ER_FILE
  eval $MD5SUMBIN -c $MD 2>/dev/null | $GREPBIN FAILED  >>
$TMPDIR/$MD5SUM_ER_FILE &
  PID=$!
         while true ; do
                 RUNNING=`eval $PSBIN h -o pid  -p $PID`
                 if [ "${RUNNING}" ] ; then
                         echo -en "#"
                         eval $SLEEPBIN 5
                 else
                         echo "#"
    echo "Done checking md5sums in ${MD%/*}"
    echo ""
                         break
                 fi
         done
 done
 cd -
}

# Fix md5sum errors
FIX () {
 CURRENT_DIR=`eval $PWDBIN`
 while read NAME STAT ; do
  if [ -d ${NAME} ] ; then
   cd $NAME
   PATH=${NAME//$DIR}
  elif [ "$STAT" = "FAILED" ] ; then
   echo ""
   echo "Getting ${NAME//:} again"
   eval $RMBIN ${NAME//:}
   while true ; do
     eval $WGETBIN -q ftp://$MIRROR/$MIRRORPATH/$PATH/${NAME//:} &
    WGETTEST=$?
    PID=$!
           while true ; do
                   RUNNING=`eval $PSBIN h -o pid  -p $PID`
                   if [ "${RUNNING}" ] ; then
                           echo -en "#"
                           eval $SLEEPBIN 5
                   else
                           echo "#"
      echo ""
                           break
                   fi
           done
    if [ "$WGETTEST" = 0 ] ; then
     break
    fi
   done
  fi
 done < $TMPDIR/$MD5SUM_ER_FILE
 cd $CURRENT_DIR
}

# Make the DVD iso or exit if it already exist
ISO () {
 if [ ! -e  ${ISODIR}/${ISO} ] ; then
  eval $MKISOFSBIN $OPTS  \
  -x $SOURCE  \
  -o ${ISODIR}/${ISO}    \
  -b ${BOOTDIR}/${BOOT} \
  -c ${BOOTDIR}/${CAT} \
  $BOPTS          \
  $GRAFT
 else
  echo  ${ISODIR}/${ISO} exists
 fi
}


#### MAIN ####

clear
PING_MIRRORS
TEST_DIR
MIRROR
LIST
eval $RMBIN $TMPDIR/$LS_FILE
while true ; do
 TEST_MD5SUMS
 MD5SUMTEST=`$GREPBIN "FAILED" $TMPDIR/$MD5SUM_ER_FILE`
 if [ ${#MD5SUMTEST} -gt 0 ] ; then
  echo "There were problems with the md5sums. Some files will be downloaded
again."
  FIX
  echo ""
  echo "Testing md5sums again"
  echo ""
 else
  eval $RMBIN $TMPDIR/$MD5SUM_ER_FILE
  break
 fi
done
ISO


----------------------------------------------------------------------------
--------------------------------------------------------------------

----- Original Message -----
From: "Martin C" <forolinux@yahoo.com>
To: <lugro@lugro.org.ar>
Sent: Friday, March 19, 2004 1:09 PM
Subject: Re: [LUG.ro] YaST será Open Source!


> > El Viernes 19 Marzo 2004 11:51, Martin C escribió:
> > > Justo ayer estaba leyendo en /. que Novell había
> > > sacado el Suse 9.1, y muchos se preguntaban por
> > qué no
> > > liberaban el YaST, la herramienta de
> > configuración.
> > > En realidad mucho no me gusta Suse, más que nada
> > > porque no me dan las ISOs, pero realmente es una
> > buena
> > > noticia.
> > >
> > >
> >
>
http://slashdot.org/articles/04/03/19/0052214.shtml?tid=117&tid=143&tid=187
> > >&tid=99
> >
> >
> >
> > La gente de Suse se ha tomado de esto como el
> > principal motivo para no dejar
> > copiar las ISO. si se logra esto (y un par de
> > programas mas) tendriamos una
> > excelente distro como lo es Suse (Alejandro puede
> > dar mas detalle por que
> > creo que es quien mas la ha visto en produccion de
> > la lista) a disposicion de
> > todos.
>
> Cierto. Puede ser que la licencia de YaST decía que se
> podía ser incluído en una ISO pero q esa ISO debía ser
> distribuída sin costo alguno? Leí eso hoy...
> Otra cosa es que por FTP podés bajar todos los
> paquetes para instalar SuSE. Alguien hizo un script
> para bajar todos los paquetes y hacer una ISO
> grandoota. Acá está el link.
> El script está encriptado, ni idea cómo se hace para
> desencriptarlo... pero alguien que sepa de esas cosas
> seguro lo podrá hacer...
>
> http://www.taclug.org/pipermail/taclug-general/2003-May/006745.html
>
>
>
> __________________________________
> Do you Yahoo!?
> Yahoo! Mail - More reliable, more storage, less spam
> http://mail.yahoo.com
> _______________________________________________
> Lugro mailing list
> Lugro@lugro.org.ar
> http://www.lugro.org.ar/mailman/listinfo/lugro
>