Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:repository_spiegeln_centos_6

Repository spiegeln CentOS 6

RPM (Package Manager) ist ein freies (GPL) Software-Paketverwaltungssystem, welches ursprünglich von ein prominenten Nord-Amerikanischen Linux-Distributor Red Hat entwickelt worden ist. Eine Sammlung von vielen RPM-Paketen stellt das sogenannte Repository dar, welches unter Zuhilfenahme eines Paket-Management Programms, wie z.B. YUM (Yellow Dog Updater) zur Aktualisierung von z.B. CentOS verwendet werden kann.

Ab hier werden zur Ausführung nachfolgender Befehle root-Rechte benötigt. Um der Benutzer root zu werden, melden Sie sich bitte als root-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root:

$ su -
Password:

Vorbereitungen

Nachfolgend soll beschrieben werden, wie ein Spiegel eines öffentlichen Repositories, erstellt werden kann und aktuell gehalten werden kann. In diesem Fall sollen das

  • CentOS-Repository ab der Version 6.0 in der Architektur 64-bit

auf eine lokale Festplatte gespiegelt werden.

Der Datentransfer soll von einem öffentlichen Spiegel des CentOS-Repository täglich aktualisiert werden. Eine Auswahl an öffentlichen CentOS-Repository-Spiegeln kann unter nachfolgenden Links ermittelt und deren Status eingesehen werden:

Im konkreten Fall hier, sollen die Daten von nachfolgendem Server der Hochschule Esslingen transferiert werden:

Ziel Verzeichnisstruktur erstellen

Bevor mit den Spiegeln eines CentOS-Repository von einem öffentlichen Spiegel begonnen werden kann, sollte zuerst die Verzeichnisstruktur erstellt werden, in die der Inhalt des CentOS-Repository auf der lokalen Festplatte gespeichert werden soll, was mit nachfolgenden Befehlen durchgeführt werden kann:

# cd /
# mkdir -p /data/repository/pub/Mirrors/centos/6.0

:!: HINWEIS - Die Option -p beim Befehl mkdir legt alle Unterverzeichnisse ebenfalls an, wenn diese nicht bereits bestehen!

Um später bei den Änderungen der Definition in z.B. der Konfigurationsdatei

  • /etc/yum.repos.d/CentOS-Base.repo

keine Probleme mit der Auflösung des Suchpfades für die RPM-Pakete zu haben, sollte nachfolgender symbolische Links mit nachfolgendem Befehl angelegt werden:

# ln -fs /data/repository/pub/Mirrors/centos/6.0 /data/repository/pub/Mirrors/centos/6

Die Ausgabe der Verzeichnisse im Verzeichniss /data/repository/pub/Mirrors/centos mit nachfolgendem Befehl, sollte eine Ausgabe in etwa wie nachfolgend dargestellt ergeben:

# ls -l /data/repository/pub/Mirrors/centos
total 4
lrwxrwxrwx 1 root root   39 Oct 12 12:45 6 -> /data/repository/pub/Mirrors/centos/6.0
drwxrwxr-x 2  406   75 4096 Oct 11 17:58 6.0

Installation

Zur Synchronisation eines CentOS-Repository von einem öffentlichen Spiegel, soll der Befehl

  • rsync

zum Einsatz kommen.

Falls der oben genannte Befehl noch nicht Bestandteil des installierten Betriebssystems ist, was z.B. bei der Installation von CentOS in der Version 6.0 - mit der Vorgabe minimal - Installation der Fall ist, wird nachfolgendes Paket benötigt:

  • rsync - ist im base-Repository von CentOS

Mit nachfolgendem Befehl, wird das Pakete rsync installiert:

# yum install rsync
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.softaculous.com
 * extras: mirror.softaculous.com
 * updates: mirror.softaculous.com
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package rsync.x86_64 0:3.0.6-5.el6_0.1 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package        Arch            Version                  Repository        Size
================================================================================
Installing:
 rsync          x86_64          3.0.6-5.el6_0.1          updates          335 k

Transaction Summary
================================================================================
Install       1 Package(s)
Upgrade       0 Package(s)

Total download size: 335 k
Installed size: 683 k
Is this ok [y/N]: y
Downloading Packages:
rsync-3.0.6-5.el6_0.1.x86_64.rpm                         | 335 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : rsync-3.0.6-5.el6_0.1.x86_64                             1/1 

Installed:
  rsync.x86_64 0:3.0.6-5.el6_0.1                                                

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket openldap-clients installiert wurden.

# rpm -qil rsync
[root@vml000040 ~]# rpm -qil rsync
Name        : rsync                        Relocations: (not relocatable)
Version     : 3.0.6                             Vendor: CentOS
Release     : 5.el6_0.1                     Build Date: Sat 25 Jun 2011 12:58:57 PM CEST
Install Date: Tue 11 Oct 2011 05:14:05 PM CEST      Build Host: c6b6.bsys.dev.centos.org
Group       : Applications/Internet         Source RPM: rsync-3.0.6-5.el6_0.1.src.rpm
Size        : 699126                           License: GPLv3+
Signature   : RSA/8, Wed 06 Jul 2011 03:45:52 AM CEST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://rsync.samba.org/
Summary     : A program for synchronizing files over a network
Description :
Rsync uses a reliable algorithm to bring remote and host files into
sync very quickly. Rsync is fast because it just sends the differences
in the files over the network instead of sending the complete
files. Rsync is often used as a very powerful mirroring process or
just as a more capable replacement for the rcp command. A technical
report which describes the rsync algorithm is included in this
package.
/etc/xinetd.d/rsync
/usr/bin/rsync
/usr/share/doc/rsync-3.0.6
/usr/share/doc/rsync-3.0.6/COPYING
/usr/share/doc/rsync-3.0.6/NEWS
/usr/share/doc/rsync-3.0.6/OLDNEWS
/usr/share/doc/rsync-3.0.6/README
/usr/share/doc/rsync-3.0.6/support
/usr/share/doc/rsync-3.0.6/support/Makefile
/usr/share/doc/rsync-3.0.6/support/atomic-rsync
/usr/share/doc/rsync-3.0.6/support/cvs2includes
/usr/share/doc/rsync-3.0.6/support/deny-rsync
/usr/share/doc/rsync-3.0.6/support/file-attr-restore
/usr/share/doc/rsync-3.0.6/support/files-to-excludes
/usr/share/doc/rsync-3.0.6/support/git-set-file-times
/usr/share/doc/rsync-3.0.6/support/logfilter
/usr/share/doc/rsync-3.0.6/support/lsh
/usr/share/doc/rsync-3.0.6/support/mnt-excl
/usr/share/doc/rsync-3.0.6/support/munge-symlinks
/usr/share/doc/rsync-3.0.6/support/rrsync
/usr/share/doc/rsync-3.0.6/support/rsyncstats
/usr/share/doc/rsync-3.0.6/support/savetransfer.c
/usr/share/doc/rsync-3.0.6/tech_report.tex
/usr/share/man/man1/rsync.1.gz
/usr/share/man/man5/rsyncd.conf.5.gz

Befehl: rsync

Mit nachfolgendem Befehl, könnte nun ein komplettes CentOS-Repository von einem öffentlichen Spiegel transferiert und synchronisiert werden:

:!: HINWEIS - Bitte NICHT oder nur mit Bedacht ausführen, da hier, je nach eigener Anbindung ans Internet, eine sehr lange Datentransferzeit zu erwarten ist !!!

# /usr/bin/rsync -varlHt --progress --delete-after --delay-updates --timeout=300 --exclude SRPMS/ ftp-stud.fht-esslingen.de::pub/Mirrors/centos/6.0/ /data/repository/pub/Mirrors/centos/6.0/

Agenda der verwendeten Optionen

  • -v - –verbose - Ausgabe von Laufzeitinformationen
  • -a - –archive - Archiv-Modus
  • -r - –recursive - Die Verzeichnisse rückwärts durchsuchen
  • -l - –links - Kopiere symbolische Links als symbolische Links
  • -H - –hard-links - Erhalte „hard“ Links
  • -t - –times - Erhalte ursprüngliche Zeitangaben
  • –progress - Fortschrittsanzeige anzeigen
  • –delete-after - Führe Löschungen erst nach den Änderungen durch, nicht vorher
  • –delay-updates - Führe alle Änderungen erst am Ende des Datentransfers durch (Zwischenspeicherung in .~tmp~ )
  • –timeout=300 - Zeitablauf für Operationen in Sekunden
  • –exclude SRPMS/ - Nachfolgende Angabe SRPMS/ nicht mit einbeziehen

:!: HINWEIS - Zum Test der Verbindung, kann nachfolgender Befehl verwendet werden, welcher nur den Inhalt des Verzeichnisses:

transferieren würde!

# /usr/bin/rsync -varlHt --progress --delete-after --delay-updates --timeout=300 --exclude SRPMS/ ftp-stud.fht-esslingen.de::centos/6.0/os/x86_64/repodata/ /data/repository/pub/Mirrors/centos/6.0
Welcome to the ftp-stud.hs-esslingen.de archives.

If have any unusual problems, please report them via e-mail to
rsync@ftp-stud.hs-esslingen.de.

  All transfers are logged.
  If you don't like this policy, then disconnect now.
  This server does not support --checksum (-c)
  This server does not support --compress (-z)


receiving file list ... 
10 files to consider
./
0616ab64cf1d108977abdd8ebff9cf8ac73cf215671fdc25005534ba1c526d9b-filelists.xml.gz
     5214585 100%    1.16MB/s    0:00:04 (xfer#1, to-check=8/10)
265ef017ca113fd1d2d17e161666da3470802c741e71fa1a3d349b9152938d12-primary.sqlite.bz2
     4402551 100%    1.12MB/s    0:00:03 (xfer#2, to-check=7/10)
2a7e0c1da38a40e2961c0cec6acca8b8446d974b1fc055216ebde88bb4a19eb9-c6-x86_64-comps.xml
     1210055 100%  693.89kB/s    0:00:01 (xfer#3, to-check=6/10)
4ca3fe24be9a737f78adcf4971c895556f79a025d92c4d9aec1d5a3775ccea5f-filelists.sqlite.bz2
     5873017 100%    1.05MB/s    0:00:05 (xfer#4, to-check=5/10)
80c918e87188ac5bba893df689108bb3f43ba2d2a7d36eb3094acdc851025ef7-primary.xml.gz
     2483042 100%    1.06MB/s    0:00:02 (xfer#5, to-check=4/10)
c195c276191c3d9fb5d6b3fcafaab74a02315673a2bc539f188d41ef93bd55da-other.sqlite.bz2
     2449590 100%    1.10MB/s    0:00:02 (xfer#6, to-check=3/10)
e601759c6eed524aa4d8c5267f087f6c72491e3d811b3c937438e7a9b0747130-c6-x86_64-comps.xml.gz
      212402 100%  759.79kB/s    0:00:00 (xfer#7, to-check=2/10)
eed14f8f3d6042d45e7168586925e717a880ae91e7b9adbeadcb26ef4a2976e5-other.xml.gz
     2658094 100%    1.08MB/s    0:00:02 (xfer#8, to-check=1/10)
repomd.xml
        3825 100%   10.76kB/s    0:00:00 (xfer#9, to-check=0/10)
                    
sent 228 bytes  received 24511650 bytes  1195701.37 bytes/sec
total size is 24507161  speedup is 1.00

Mit nachfolgendem Befehl, kann der so eben transferierte Inhalt, angezeigt werden:

# ls -la /data/repository/pub/Mirrors/centos/6.0
total 23956
drwxrwxr-x 2  406   75    4096 Jul  9 18:19 .
drwxr-xr-x 3 root root    4096 Oct 12 12:45 ..
-rw-rw-r-- 1  406   75 5214585 Jul  9 18:18 0616ab64cf1d108977abdd8ebff9cf8ac73cf215671fdc25005534ba1c526d9b-filelists.xml.gz
-rw-rw-r-- 1  406   75 4402551 Jul  9 18:19 265ef017ca113fd1d2d17e161666da3470802c741e71fa1a3d349b9152938d12-primary.sqlite.bz2
-rw-rw-r-- 1  406   75 1210055 Jul  9 18:19 2a7e0c1da38a40e2961c0cec6acca8b8446d974b1fc055216ebde88bb4a19eb9-c6-x86_64-comps.xml
-rw-rw-r-- 1  406   75 5873017 Jul  9 18:19 4ca3fe24be9a737f78adcf4971c895556f79a025d92c4d9aec1d5a3775ccea5f-filelists.sqlite.bz2
-rw-rw-r-- 1  406   75 2483042 Jul  9 18:18 80c918e87188ac5bba893df689108bb3f43ba2d2a7d36eb3094acdc851025ef7-primary.xml.gz
-rw-rw-r-- 1  406   75 2449590 Jul  9 18:18 c195c276191c3d9fb5d6b3fcafaab74a02315673a2bc539f188d41ef93bd55da-other.sqlite.bz2
-rw-rw-r-- 1  406   75  212402 Jul  9 18:19 e601759c6eed524aa4d8c5267f087f6c72491e3d811b3c937438e7a9b0747130-c6-x86_64-comps.xml.gz
-rw-rw-r-- 1  406   75 2658094 Jul  9 18:18 eed14f8f3d6042d45e7168586925e717a880ae91e7b9adbeadcb26ef4a2976e5-other.xml.gz
-rw-rw-r-- 1  406   75    3825 Jul  9 18:19 repomd.xml

:!: HINWEIS - Mit nachfolgendem Befehl sollte der so eben transferierte Inhalt, wieder gelöscht werden, da dies NUR ein Test sein sollte, und sich die Daten im FALSCHEN Verzeichnis befinden !!!:

# rm /data/repository/pub/Mirrors/centos/6.0/* -f

Script: rsync_centos60.sh

Mit nachfolgendem Script, kann nun z.B. Zeitgesteuert durch einen cron-Job die Synchronisation durchgeführt werden.

:!: HINWEIS - Bitte bei der ERSTEN Ausführung bedenken, dass je nach eigener Anbindung ans Internet, eine sehr lange Datentransferzeit zu erwarten ist !!!

:!: WICHTIG - Bei einer eignen Internetanbindung mit hoher Bandbreite sollte noch der rsync-Parameter (RSYNC_CMDOPTS)

  • --bwlimit=900

    = Max. Datentransfer Geschwindigkeit 900 KB

hinzugefügt werden, um in diesem Beispiel die CentOS Mirror - Hochschule Esslingen nicht zu sehr mit dem Datentransfer zu belasten!!!

Der Inhalt des Scripts, sieht wie folgt aus:

#!/bin/bash
 
##############################################################################
# Script-Name : rsync_centos60.sh                                            #
# Description : Script to sync via rsync command repositorys from official   #
#               mirror servers. On successful execution only a LOG file will #
#               be written. On error while execution, a LOG file and a error #
#               message will be send by e-mail.                              #
#                                                                            #
# Last update : 11.10.2011                                                   #
# Version     : 1.00                                                         #
#                                                                            #
# Author      : Klaus Tachtler, <klaus@tachtler.net>                         #
# DokuWiki    : http://www.dokuwiki.tachtler.net                             #
# Homepage    : http://www.tachtler.net                                      #
#                                                                            #
# Base script : centos6.0_mirror.sh, Copyright (c) 2004-2011                 #
# created by  : Georg Kainzbauer, <georgkainzbauer@gmx.net>                  #
# Homepage    : 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.                                  |  #
#  +----------------------------------------------------------------------+  #
#                                                                            #
# Copyright (c) 2011 by Klaus Tachtler.                                      #
#                                                                            #
##############################################################################
 
##############################################################################
#                                H I S T O R Y                               #
##############################################################################
# Version     : x.xx                                                         #
# Description : <Description>                                                #
# -------------------------------------------------------------------------- #
# Version     : x.xx                                                         #
# Description : <Description>                                                #
# -------------------------------------------------------------------------- #
##############################################################################
 
##############################################################################
# >>> Please edit following lines for personal command and/or repositorys. ! #
##############################################################################
 
# CUSTOM - Script-Name.
SCRIPT_NAME='rsync_centos60'
 
# CUSTOM - Command-Line.
RSYNC_CMDOPTS='-varlHt --progress --delete-after --delay-updates --timeout=300'
RSYNC_EXCLUDE='--exclude */SRPMS/ --exclude isos/'
 
# CUSTOM - Repository-Mirrors.
REPO_SOURCE='ftp-stud.fht-esslingen.de::centos/6.0/'
REPO_TARGET='/data/repository/private/Mirrors/centos/6.0/'
LINK_TARGET='/data/repository/private/Mirrors/centos/6'
 
# CUSTOM - Mail-Recipient.
MAIL_RECIPIENT='root@tachtler.net'
 
# CUSTOM - Status-Mail [Y|N].
MAIL_STATUS='Y'
 
##############################################################################
# >>> Normaly there is no need to change anything below this comment line. ! #
##############################################################################
 
# Variables.
RSYNC_COMMAND=`command -v rsync`
TOUCH_COMMAND=`command -v touch`
RM_COMMAND=`command -v rm`
PROG_SENDMAIL=`command -v sendmail`
CAT_COMMAND=`command -v cat`
DATE_COMMAND=`command -v date`
MKDIR_COMMAND=`command -v mkdir`
LN_COMMAND=`command -v ln`
FILE_LOCK='/tmp/'$SCRIPT_NAME'.lock'
FILE_LOG='/var/log/'$SCRIPT_NAME'.log'
FILE_LAST_LOG='/tmp/'$SCRIPT_NAME'.log'
FILE_MAIL='/tmp/'$SCRIPT_NAME'.mail'
VAR_HOSTNAME=`uname -n`
VAR_SENDER='root@'$VAR_HOSTNAME
VAR_EMAILDATE=`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%Z)'`
 
# Functions.
function log() {
        echo $1
        echo `$DATE_COMMAND '+%Y/%m/%d %H:%M:%S'` " INFO:" $1 >>${FILE_LAST_LOG}
}
 
function retval() {
if [ "$?" != "0" ]; then
        case "$?" in
        1)
                log "ERROR: Syntax or usage error"
        ;;
        2)
                log "ERROR: Protocol incompatibility"
        ;;
        3)
                log "ERROR: Errors selecting input/output files, dirs"
        ;;
        4)
                log "ERROR: 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)
                log "ERROR: Error starting client-server protocol"
        ;;
        6)
                log "ERROR: Daemon unable to append to log-file"
        ;;
        10)
                log "ERROR: Error in socket I/O"
        ;;
        11)
                log "ERROR: Error in file I/O"
        ;;
        12)
                log "ERROR: Error in rsync protocol data stream"
        ;;
        13)
                log "ERROR: Errors with program diagnostics"
        ;;
        14)
                log "ERROR: Error in IPC code"
        ;;
        20)
                log "ERROR: Received SIGUSR1 or SIGINT"
        ;;
        21)
                log "ERROR: Some error returned by waitpid()"
        ;;
        22)
                log "ERROR: Error allocating core memory buffers"
        ;;
        23)
                log "ERROR: Partial transfer due to error"
        ;;
        24)
                log "ERROR: Partial transfer due to vanished source files"
        ;;
        25)
                log "ERROR: The --max-delete limit stopped deletions"
        ;;
        30)
                log "ERROR: Timeout in data send/receive"
        ;;
        *)
                log "ERROR: Unknown error $?"
        ;;
        esac
fi
}
 
function movelog() {
        $CAT_COMMAND $FILE_LAST_LOG >> $FILE_LOG
        $RM_COMMAND -f $FILE_LAST_LOG
        $RM_COMMAND -f $FILE_LOCK
}
 
function sendmail() {
        case "$1" in
        'STATUS')
                MAIL_SUBJECT='Status execution '$SCRIPT_NAME' script.'
        ;;
        *)
                MAIL_SUBJECT='ERROR while execution '$SCRIPT_NAME' script !!!'
        ;;
        esac
 
$CAT_COMMAND <<MAIL >$FILE_MAIL
Subject: $MAIL_SUBJECT
Date: $VAR_EMAILDATE
From: $VAR_SENDER
To: $MAIL_RECIPIENT
 
MAIL
 
$CAT_COMMAND $FILE_LAST_LOG >> $FILE_MAIL
 
$PROG_SENDMAIL -f $VAR_SENDER -t $MAIL_RECIPIENT < $FILE_MAIL
 
$RM_COMMAND -f $FILE_MAIL
 
}
 
# Main.
log ""
log "+-----------------------------------------------------------------+"
log "| Start synchronisation from official repository server (mirror). |"
log "+-----------------------------------------------------------------+"
log ""
log "Run script with following parameter:"
log ""
log "SCRIPT_NAME...: $SCRIPT_NAME"
log ""
log "RSYNC_CMDOPTS.: $RSYNC_CMDOPTS"
log "RSYNC_EXCLUDE.: $RSYNC_EXCLUDE"
log ""
log "REPO_SOURCE...: $REPO_SOURCE"
log "REPO_TARGET...: $REPO_TARGET"
log "LINK_TARGET...: $LINK_TARGET"
log ""
log "MAIL_RECIPIENT: $MAIL_RECIPIENT"
log "MAIL_STATUS...: $MAIL_STATUS"
log ""
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$RSYNC_COMMAND" ]; then
        log "Check if command '$RSYNC_COMMAND' was found................[FAILED]"
        sendmail ERROR
        movelog
        exit 10
else
        log "Check if command '$RSYNC_COMMAND' was found................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$TOUCH_COMMAND" ]; then
        log "Check if command '$TOUCH_COMMAND' was found....................[FAILED]"
        sendmail ERROR
        movelog
        exit 11
else
        log "Check if command '$TOUCH_COMMAND' was found....................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$RM_COMMAND" ]; then
        log "Check if command '$RM_COMMAND' was found.......................[FAILED]"
        sendmail ERROR
        movelog
        exit 12
else
        log "Check if command '$RM_COMMAND' was found.......................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$CAT_COMMAND" ]; then
        log "Check if command '$CAT_COMMAND' was found......................[FAILED]"
        sendmail ERROR
        movelog
        exit 13
else
        log "Check if command '$CAT_COMMAND' was found......................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$DATE_COMMAND" ]; then
        log "Check if command '$DATE_COMMAND' was found.....................[FAILED]"
        sendmail ERROR
        movelog
        exit 14
else
        log "Check if command '$DATE_COMMAND' was found.....................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$MKDIR_COMMAND" ]; then
        log "Check if command '$MKDIR_COMMAND' was found....................[FAILED]"
        sendmail ERROR
        movelog
        exit 15
else
        log "Check if command '$MKDIR_COMMAND' was found....................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$LN_COMMAND" ]; then
        log "Check if command '$LN_COMMAND' was found.......................[FAILED]"
        sendmail ERROR
        movelog
        exit 16
else
        log "Check if command '$LN_COMMAND' was found.......................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$PROG_SENDMAIL" ]; then
        log "Check if command '$PROG_SENDMAIL' was found............[FAILED]"
        sendmail ERROR
        movelog
        exit 17
else
        log "Check if command '$PROG_SENDMAIL' was found............[  OK  ]"
fi
 
# Check if LOCK file NOT exist.
if [ ! -e "$FILE_LOCK" ]; then
        log "Check if script is NOT already runnig .....................[  OK  ]"
 
        $TOUCH_COMMAND $FILE_LOCK
else
        log "Check if script is NOT already runnig .....................[FAILED]"
        log ""
        log "ERROR: The script was already running, or LOCK file already exists!"
        log ""
        sendmail ERROR
        movelog
        exit 20
fi
 
# Check if REPO_TARGET Directory NOT exists.
if [ ! -d "$REPO_TARGET" ]; then
        log "Check if REPO_TARGET exists................................[FAILED]"
        log ""
        log " INFO: Creating REPO_TARGET!"
        log " INFO: --> "$REPO_TARGET
        log ""
 
        $MKDIR_COMMAND -p $REPO_TARGET
else
        log "Check if REPO_TARGET exists................................[  OK  ]"
fi
 
# Check if LINK_TARGET symbolic Link NOT exists.
if [ ! -L "$LINK_TARGET" ]; then
        log "Check if LINK_TARGET exists................................[FAILED]"
        log ""
        log " INFO: Creating LINK_TARGET!"
        log " INFO: --> "$LINK_TARGET
        log ""
 
        $LN_COMMAND -fs $REPO_TARGET $LINK_TARGET
else
        log "Check if LINK_TARGET exists................................[  OK  ]"
fi
 
# Start syncing.
log ""
log "+-----------------------------------------------------------------+"
log "| Run synchronizing $SCRIPT_NAME repository.................... |"
log "+-----------------------------------------------------------------+"
log ""
 
log "$RSYNC_COMMAND $RSYNC_CMDOPTS $RSYNC_EXCLUDE $REPO_SOURCE $REPO_TARGET"
 
$RSYNC_COMMAND $RSYNC_CMDOPTS --log-file=$FILE_LAST_LOG $RSYNC_EXCLUDE $REPO_SOURCE $REPO_TARGET
 
if [ "$?" != 0 ]; then
        retval $?
        log ""
        $RM_COMMAND -f $FILE_LOCK
        sendmail ERROR
        movelog
        exit 99
else
        log ""
        log "+-----------------------------------------------------------------+"
        log "| End synchronizing $SCRIPT_NAME repository.................... |"
        log "+-----------------------------------------------------------------+"
        log ""
fi
 
# Finish syncing.
log "+-----------------------------------------------------------------+"
log "| Finish......................................................... |"
log "+-----------------------------------------------------------------+"
log ""
 
# Status e-mail.
if [ $MAIL_STATUS = 'Y' ]; then
        sendmail STATUS
fi
# Move temporary log to permanent log
movelog
 
exit 0

Das Script hat folgende WICHTIGE Merkmale:

  • Konfigurierbare Parameter
  • Überprüfung ob alle Befehle zur erfolgreichen Ausführung verfügbar sind (Evtl. wichtig für Portierungen)
  • Ausführungsschutz, kein doppelte, gleichzeitige Ausführen des Scripts
  • Ausgabe von Laufzeitinformationen
    • auf dem Bildschirm zur Laufzeit
    • als LOG-Datei
    • als e-Mail
  • e-Mail Benachrichtigung im Fehlerfall
  • optional e-Mail Benachrichtigung bei erfolgreicher Ausführung

Einbindung als cron-job

Nachfolgend soll das oben genannte Script als cron-Job mit täglicher (nächtlicher) Ausführung eingerichtet werden.

Dazu sollte als erstes nachfolgendes Verzeichnis

  • /root/bin

mit nachfolgendem Befehl erstellt werden:

# mkdir /root/bin/

Anschließend sollte das Script, in dem mit obigem Befehl erstellte Verzeichnis hinterlegt werden. Das Verzeichnis sollte wie folgt aussehen, was mit nachfolgendem Befehl überprüft werden kann:

# ls -la /root/bin/
total 24
drwxr-xr-x  2 root root  4096 Oct 13 18:23 .
dr-xr-x---. 4 root root  4096 Oct 13 18:20 ..
-rwxr-xr-x  1 root root 15491 Oct 13 18:28 rsync_centos60.sh

Evtl. sollten noch die Dateirechte mit nachfolgendem Befehl, wie folgt angepasst werden:

# chmod 750 /root/bin/rsync_centos60.sh

Eine erneute Abfrage des Verzeichnisses mit nachfolgendem Befehl sollte dann eine Ausgabe in etwa wie folgende ergeben:

# ls -la
total 24
drwxr-xr-x  2 root root  4096 Oct 13 18:23 .
dr-xr-x---. 4 root root  4096 Oct 13 18:20 ..
-rwxr-x---  1 root root 15491 Oct 13 18:28 rsync_centos60.sh

1. Möglichkeit

Einbindung des Scripts zur Ausführung als cron-job in die Konfigurationsdatei

  • /etc/crontab

welches in diesem Fall eine Ausführung des Scripts täglich um 04:02 Uhr (nachts) veranlassen würde.

Was durch hinzufügen von nachfolgender Zeile zur Konfigurationsdatei /etc/crontab erfolgen kann (nur relevanter Ausschnitt):

...
02 04 * * * root /root/bin/rsync_centos60.sh
...

2. Möglichkeit

Einbindung eines Links auf das Scripts, zur Ausführung als cron-job in das Verzeichnis

  • /etc/cron.daily

welches in diesem Fall eine Ausführung des Scripts täglich je nach Konfiguration in der Konfigurationsdatei

  • /etc/anacrontab

hier als Standard zwischen 03:00-22:00 Uhr, mit einer addierten Zufälligkeit von 45 Minuten und einer zufälligen Abweichung von 5 Minuten veranlassen würde.

Dies kann durch Ausführen des nachfolgenden Befehls erfolgen:

# ln -fs /root/bin/rsync_centos60.sh /etc/cron.daily/rsync_centos60.sh

Zu Überprüfung, ob der Link korrekt erstellt wurde, kann nachfolgender Befehl ausgeführt werden:

# ls -l /etc/cron.daily
total 8
-rwxr-xr-x. 1 root root 196 Jun 25 13:18 logrotate
-rwxr-xr-x. 1 root root 905 Nov 11  2010 makewhatis.cron
lrwxrwxrwx  1 root root  27 Oct 18 14:13 rsync_centos60.sh -> /root/bin/rsync_centos60.sh

Logrotate

Das Script /root/bin/rsync_centos60.sh erzeugt eine LOG-Datei mit nachfolgender Bezeichnung und folgendem Speicherort:

  • /var/log/rsync_centos60.sh

Um das stetige Anwachsen und die Größe dieser LOG-Datei nicht ins unendliche zu treiben, wäre es sinnvoll die LOG-Datei mit Linux-Bordmitteln in regelmäßigen Abständen zu rotieren.

Dies kann durch die Anlage eines neuen, nachstehend gezeigten Scripts, erfolgen. Der Speicherort muss hier:

  • /etc/logrotate.d

sein und das Script kann folgenden Namen tragen:

  • rsync_centos60

Der Inhalt des Scripts /etc/logrotate.d/rsync_centos60 sieht folgendermaßen aus:

/var/log/rsync_centos60.log {
    weekly
    rotate 4
    compress
    delaycompress
    missingok
    notifempty
}

Demnach wird die LOG-Datei nach nachfolgenden Regeln rotiert:

  • weekly - wöchentlich
  • rotate 4 - die letzten 4 LOG-Dateien sollen jeweils erhalten bleiben
  • compress - Alte Versionen der LOG-Datei werden komprimiert
  • delaycompress - Verschiebt die Kompression des letzten LOG-Datei auf den nächsten Rotationszyklus
  • missingok - Das nicht vorhanden sein der LOG-Datei soll zu keinem Fehler führen
  • notifempty - Nicht rotieren, wenn die LOG-Datei leer ist
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/repository_spiegeln_centos_6.txt · Zuletzt geändert: 2012/06/11 12:50 von klaus