113 lines
3.6 KiB
Bash
Executable File
113 lines
3.6 KiB
Bash
Executable File
#! /bin/bash
|
|
|
|
set -e
|
|
set -u
|
|
|
|
# psuhpdo script for Debian
|
|
#
|
|
# Copyright (C) 2008 Joerg Jaspert <joerg@debian.org>
|
|
#
|
|
# 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; version 2.
|
|
#
|
|
# This program is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
# In case the admin somehow wants to have this script located someplace else,
|
|
# he can set BASEDIR, and we will take that. If it is unset we take ${HOME}
|
|
BASEDIR=${BASEDIR:-"${HOME}"}
|
|
|
|
NAME="`basename $0`"
|
|
|
|
|
|
# Read our config file
|
|
. "${BASEDIR}/etc/${NAME}.conf"
|
|
|
|
# Source our common functions
|
|
. "${BASEDIR}/etc/common"
|
|
|
|
# Set sane defaults if the configfile didn't do that for us.
|
|
# The directory for our logfiles
|
|
LOGDIR=${LOGDIR:-"${BASEDIR}/log"}
|
|
# Our own logfile
|
|
LOG=${LOG:-"${LOGDIR}/${NAME}.log"}
|
|
# How many logfiles to keep
|
|
LOGROTATE=${LOGROTATE:-14}
|
|
# Our mirrorfile
|
|
MIRRORS=${MIRRORS:-"${BASEDIR}/etc/${NAME}.mirror"}
|
|
# used by log()
|
|
PROGRAM=${PROGRAM:-"${NAME}-$(hostname -s)"}
|
|
# extra ssh options we might want hostwide
|
|
SSH_OPTS=${SSH_OPTS:-""}
|
|
# Which ssh key to use?
|
|
KEYFILE=${KEYFILE:-".ssh/pushpackages"}
|
|
# which path to "mirror"
|
|
MIRRORPATH=${MIRRORPATH:-"/org/packages.debian.org/mirror/"}
|
|
# where to send mails to
|
|
if [ "x$(hostname -s)x" != "x${MIRRORNAME%%.debian.org}x" ]; then
|
|
# We are not on a debian.org host
|
|
MAILTO=${MAILTO:-"root"}
|
|
else
|
|
# Yay, on a .debian.org host
|
|
MAILTO=${MAILTO:-"mirrorlogs@debian.org"}
|
|
fi
|
|
|
|
if ! [ -f "${BASEDIR}/${KEYFILE}" ]; then
|
|
error "SSH Key ${BASEDIR}/${KEYFILE} does not exist" >> ${LOG}
|
|
exit 5
|
|
fi
|
|
|
|
# Some sane defaults
|
|
cd ${BASEDIR}
|
|
umask 022
|
|
|
|
# Make sure we have our log and lock directories
|
|
mkdir -p "${LOGDIR}"
|
|
|
|
trap 'log "Pdopush done" >> ${LOG}; savelog "${LOG}" > /dev/null' EXIT
|
|
|
|
log "Pushing pdo mirrors" >> ${LOG}
|
|
|
|
# From here on we do *NOT* want to exit on errors. We don't want to
|
|
# stop pushing mirrors just because we can't reach one of them.
|
|
set +e
|
|
|
|
|
|
# Now read our mirrorfile and push the mirrors defined in there.
|
|
# We use grep to easily sort out all lines having a # in front of them or are empty.
|
|
egrep -v '^[[:space:]]*(#|$)' "${MIRRORS}" |
|
|
while read MLNAME MHOSTNAME MUSER MPROTO MKEYFILE; do
|
|
# Process the two options that can be left blank in the config
|
|
if [ -z ${MPROTO} ]; then
|
|
MPROTO=2
|
|
fi
|
|
if [ -z ${MKEYFILE} ]; then
|
|
MKEYFILE="${BASEDIR}/${KEYFILE}"
|
|
fi
|
|
# Now, people can do stupid things and leave out the protocol, but
|
|
# define a keyfile...
|
|
if [ ${MPROTO} -ne 1 ] && [ ${MPROTO} -ne 2 ]; then
|
|
error "Need a correct ssh protocol version for ${MLNAME}, skipping" >> ${LOG}
|
|
continue
|
|
fi
|
|
|
|
# And finally, push the mirror
|
|
log "Pushing ${MLNAME}" >> ${LOG}
|
|
# This needs a limited ssh key on the other side, something like
|
|
# no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="rsync --server -vlogDtpr . /srv/mirrors/packages.debian.org/",from="87.106.64.223,2001:8d8:80:11::35d,powell.debian.org" ssh-rsa.....
|
|
rsync -e "ssh -i ${MKEYFILE} -${MPROTO} ${SSH_OPTS}" -av --stats "${MIRRORPATH}" ${MUSER}@${MHOSTNAME}:/does/not/matter >"${LOGDIR}/${MLNAME}.log"
|
|
log "Pushing ${MLNAME} done" >> ${LOG}
|
|
savelog ${LOGDIR}${MLNAME}.log
|
|
|
|
set +e
|
|
done
|
|
|
|
exit 0
|