Good to Know Database

Shell Skript: CentOS 7 Mirror Script


Das folgende Shell Skript erstellt einen lokalen Mirror für CentOS 7.x. Durch die Variable CENTOS7_SERVER können Sie den Mirror Server angeben, von welchem die Installationspakete heruntergeladen werden. Den lokalen Pfad unter welchem die Installationspakete gespeichert werden sollen, kann mit der Variablen CENTOS7_MIRROR festgelegt werden.

Hinweis: Dieses Skript ist für CentOS 6.x ausgelegt.

###########################################################################
##                                                                       ##
##                        CentOS 7 Mirror Script                         ##
##                                                                       ##
## Creation:    26.11.2004                                               ##
## Last Update: 23.11.2014                                               ##
##                                                                       ##
## Copyright (c) 2004-2014 by Georg Kainzbauer <http://www.gtkdb.de>     ##
##                                                                       ##
## This program is free software; you can redistribute it and/or modify  ##
## it under the terms of the GNU General Public License as published by  ##
## the Free Software Foundation; either version 2 of the License, or     ##
## (at your option) any later version.                                   ##
##                                                                       ##
###########################################################################
#!/bin/bash

# CentOS 7 mirror server and local mirror directory
CENTOS7_SERVER=rsync.hrz.tu-chemnitz.de::ftp/pub/linux/centos/7/
CENTOS7_MIRROR=/var/ftp/pub/linux/centos/7/

# Log file
LOGFILE=/var/log/centos7_mirror.log

# Debug file (if you do not want to debug the download process set this option to "/dev/null")
DEBUGFILE=/var/log/centos7_mirror.debug

# Who will be informed in case if anything goes wrong (if you do not want to be informed via mail, set this option to "")
MAILNOTIFY="root@localhost"

# Subject of the notification mail
MAILSUBJECT="ERROR while synchronizing CentOS 7 mirror"

# Lock file
LOCKFILE=/var/tmp/centos7_mirror.lock

###################################################################
# NORMALLY THERE IS NO NEED TO CHANGE ANYTHING BELOW THIS COMMENT #
###################################################################

function log()
{
  echo `date +%d.%m.%Y%t%H:%M:%S` "    LOG:" $1 | tee -a ${LOGFILE}
}

function error()
{
  echo `date +%d.%m.%Y%t%H:%M:%S` "    ERROR:" $1 | tee -a ${LOGFILE}
  if [ -n "${MAILNOTIFY}" ] ; then
    echo `date +%d.%m.%Y%t%H:%M:%S` "    ERROR:" $1 | mail -s "${MAILSUBJECT}" ${MAILNOTIFY}
  fi
}

function status()
{
  case "$1" in
    0)
      log "Synchronization completed."
      ;;
    1)
      error "RSYNC: Syntax or usage error."
      ;;
    2)
      error "RSYNC: Protocol incompatibility."
      ;;
    3)
      error "RSYNC: Errors selecting input/output files, dirs."
      ;;
    4)
      error "RSYNC: Requested action not supported: an attempt was made to manipulate 64-bit files on a platform that cannot support them; or an option was specified that is supported by the client and not by the server."
      ;;
    5)
      error "RSYNC: Error starting client-server protocol."
      ;;
    6)
      error "RSYNC: Daemon unable to append to log-file."
      ;;
    10)
      error "RSYNC: Error in socket I/O."
      ;;
    11)
      error "RSYNC: Error in file I/O."
      ;;
    12)
      error "RSYNC: Error in rsync protocol data stream."
      ;;
    13)
      error "RSYNC: Errors with program diagnostics."
      ;;
    14)
      error "RSYNC: Error in IPC code."
      ;;
    20)
      error "RSYNC: Received SIGUSR1 or SIGINT."
      ;;
    21)
      error "RSYNC: Some error returned by waitpid()."
      ;;
    22)
      error "RSYNC: Error allocating core memory buffers."
      ;;
    23)
      error "RSYNC: Partial transfer due to error."
      ;;
    24)
      error "RSYNC: Partial transfer due to vanished source files."
      ;;
    25)
      error "RSYNC: The --max-delete limit stopped deletions."
      ;;
    30)
      error "RSYNC: Timeout in data send/receive."
      ;;
    *)
      error "RSYNC: Unknown error $1."
      ;;
  esac
}

if [ -f ${LOCKFILE} ] ; then
  kill -0 $(cat ${LOCKFILE}) >/dev/null 2>&1
  if [ $? -eq 0 ] ; then
    error "Previous process still running."
    exit 1
  else
    log "Deprecated lock file found. Remove lock file."
    rm -f ${LOCKFILE}
  fi
fi

echo $$ >${LOCKFILE}

# Create local mirror directory if not exists
if [ ! -d ${CENTOS7_MIRROR} ] ; then
  log "Creating local CentOS 7 mirror directory."
  mkdir -p ${CENTOS7_MIRROR}
fi

log "Starting CentOS 7 download process."
echo ">>>>>" `date +%d.%m.%Y%t%H:%M:%S` "<<<<<" >>${DEBUGFILE}
rsync -avzH --delete --progress --delay-updates --timeout=300 --exclude "isos" ${CENTOS7_SERVER} ${CENTOS7_MIRROR} >>${DEBUGFILE} 2>&1
status $?

rm -f ${LOCKFILE}

exit 0

Damit die Logdateien nicht zu groß werden, sollten Sie Logrotate anweisen die Logdateien regelmäßig zu archivieren und nach einer gewissen Zeit zu löschen. Dazu erstellen Sie einfach die Datei /etc/logrotate.d/centos7_mirror.

[root@centos6 ~]# vi /etc/logrotate.d/centos7_mirror

Fügen Sie in diese Datei die folgenden Zeilen ein. Dadurch wird die Logdatei /var/log/centos7_mirror.log monatlich und die Logdatei /var/log/centos7_mirror.debug wöchentlich archiviert. Von beiden Logdateien werden nur die letzten drei Archivdateien vorgehalten. Ältere Archive werden automatisch gelöscht.

/var/log/centos7_mirror.log {
    monthly
    rotate 3
    compress
    delaycompress
    missingok
    notifempty
}

/var/log/centos7_mirror.debug {
    weekly
    rotate 3
    compress
    delaycompress
    missingok
    notifempty
}


Dieser Eintrag wurde am 09.07.2014 erstellt und zuletzt am 05.04.2015 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_33_2591.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer