Good to Know Database

Shell Skript: Ubuntu 14.04 Mirror Script


Das folgende Shell Skript erstellt einen lokalen Mirror für Ubuntu 14.04 (Trusty Tahr). Durch anpassen oder erweitern der Variable DIST kann dieses Skript auch für ältere und zukünftige Ubuntu Versionen verwendet werden.

Hinweis: Dieses Skript ist für CentOS 6.x ausgelegt und benötigt debmirror (siehe CentOS 6: debmirror installieren).

###########################################################################
##                                                                       ##
##                         Ubuntu Mirror Script                          ##
##                                                                       ##
## Creation:    06.07.2008                                               ##
## Last Update: 23.02.2014                                               ##
##                                                                       ##
## Copyright (c) 2008-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

# Ubuntu mirror server and mirror directory
SOURCE_SRV=de.archive.ubuntu.com
SOURCE_DIR=/ubuntu

# Distribution, section and architecture list
DIST=trusty,trusty-security,trusty-updates,trusty-backports,trusty-proposed
SECTION=main,main/debian-installer,restricted,restricted/debian-installer,universe,universe/debian-installer,multiverse,multiverse/debian-installer
ARCH=i386,amd64

# Local mirror directory
MIRRORDIR=/var/ftp/pub/linux/ubuntu/

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

# Debug file (if you do not want to debug the download process set this option to "/dev/null")
DEBUGFILE=/var/log/ubuntu_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 Ubuntu 14.04 mirror"

# Lock file
LOCKFILE=/var/tmp/ubuntu_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 "DEBMIRROR: Connection closed."
      ;;
    2)
      error "DEBMIRROR: Error while moving temp file."
      ;;
    5)
      error "DEBMIRROR: Input/output error."
      ;;
    12)
      error "DEBMIRROR: Transfer truncated."
      ;;
    25)
      error "DEBMIRROR: Read timeout."
      ;;
    111)
      error "DEBMIRROR: Connection refused."
      ;;
    255)
      error "DEBMIRROR: Download failed."
      ;;
    *)
      error "DEBMIRROR: 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 ${MIRRORDIR} ] ; then
  log "Creating local mirror directory."
  mkdir -p ${MIRRORDIR}
fi

log "Starting Ubuntu download process."
echo ">>>>>" `date +%d.%m.%Y%t%H:%M:%S` "<<<<<" >>${DEBUGFILE}
debmirror -v -e http -h ${SOURCE_SRV} -r ${SOURCE_DIR} --dist=${DIST} --section=${SECTION} --arch=${ARCH} --ignore-release-gpg --no-check-gpg ${MIRRORDIR} >>${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/ubuntu_mirror.

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

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

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

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

Weiterführende Tutorials

CentOS 6: Ubuntu GPG-Schlüssel hinterlegen


Dieser Eintrag wurde am 28.02.2014 erstellt und zuletzt am 24.01.2016 bearbeitet.

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

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer