Old Mirror

From CSLabsWiki
Revision as of 22:00, 30 December 2007 by Petermcv (talk | contribs) (Mirrored Software)
Hostname: mirror.clarkson.edu
Status: Running


Mirror is an open source projects mirror that mirrors different Linux distributions (see below) and the Linux kernel itself. It can be accessed through a web interface or by anonymous FTP.

Mirrored Software

  • ArchLinux
  • Fedora (7,8, x86, no SRPMS)
  • Kernel.org
  • Ubuntu
  • Debian (i386, ia64, amd64)

Scripts

Mirror is maintained by many small scripts, this page documents them all. The following are located in the directory: /etc/mirrorscripts

rsyncVars

This scriptlet defines all the variables used in the scripts that actually do the mirroring.

<source lang="bash">## Master Include File for the Mirror Rsync Scripts

    1. DISTRO MUST BE DEFINED BEFORE SOURCING THIS FILE!
    1. Define program paths

TOUCH=/usr/bin/touch DATE=/bin/date RSYNC=/usr/bin/rsync CHGRP=/bin/chgrp RM=/bin/rm

    1. Define File Paths

LOGFILE=/var/log/mirrorlogs/${DISTRO}-$(${DATE} +%m-%d-%y) LOCKFILE=/var/lock/${DISTRO}.lck DEST=/aoedisk/${DISTRO}

    1. Rsync Options

RSYNCOPTS='-avrH --partial --stats --delay-updates --delete --delete-after' </source>

template

This is the master template for all the new mirror scripts (meaning that Archlinux's and Kernel.org's don't follow this exactly). Just plugin URL and DISTRO and you are good to go.

<source lang="bash">#!/bin/bash -

    1. Template Mirror Script for mirror.clarkson.edu
    2. Copyright 2007 Chris Peterman <petermcv@clarkson.edu>
    3. Licensed under the GPLv2
    1. Define which distro we are mirroring here

DISTRO=

    1. Define the URL which we rsync from

URL=

    1. Load all the variable from the master include file

source /etc/mirrorscripts/rsyncVars

    1. Make sure another instance of this script isn't running right now

if [ ! -e ${LOCKFILE} ] then

       ## No one else is running, put down a lockfile so no one interupts us
       ${TOUCH} ${LOCKFILE}
       ## Begin the Rsync, send all output to the logfiles
       ${RSYNC} ${RSYNCOPTS} ${URL} ${DEST} > ${LOGFILE}
       ## Change the group ownership of the log files to Mirrorlogs
       ${CHGRP} mirrorlogs ${LOGFILE}
       ## Remove the lockfile, we are done
       ${RM} ${LOCKFILE}
       ## Send a good exit code
       exit 0

else

       ## Someone else was running. Not really an error so we exit with a successful error code
       exit 0

fi </source>

archlinux

This is Archlinux's rsync script. It was created before the prototype, and is a little different than others.

<source lang="bash">#!/bin/bash -

    1. Define which distro we are mirroring

DISTRO=archlinux

    1. Load all the variables from the master include file

source /etc/mirrorscripts/rsyncVars

    1. Make sure another instance of this script isn't running right now

if [ ! -e ${LOCKFILE} ] then ## No one else is running, put down a lockfile to make sure no one interrupts us ${TOUCH} ${LOCKFILE} ## Begin the Rsync, send all output to the logfiles ${RSYNC} ${RSYNCOPTS} distro.ibiblio.org::distros/archlinux/ ${DEST} > ${LOGFILE} ## Change the group ownership of the log files to Mirrorlogs ${CHGRP} mirrorlogs ${LOGFILE} ## Remove the lockfile, we are done ${RM} ${LOCKFILE} ## Send a good exit code exit 0 else ## Someone else was running. Not really an error so we exit with a successful error code exit 0 fi </source>

linux

This is the script for Kernel.org. It is notable because we actually rsync two different modules at once.

<source lang="bash">#!/bin/bash -

    1. Define which distro we are mirroring

DISTRO=linux

    1. Load all the variables from the master include file

source /etc/mirrorscripts/rsyncVars

    1. Make sure another instance of this script isn't running right now

if [ ! -e ${LOCKFILE} ] then ## No one else is running, put down a lockfile to make sure no one interrupts us ${TOUCH} ${LOCKFILE}

## Begin the Rsync, send all output to the logfiles ${RSYNC} ${RSYNCOPTS} ftp.uofo.lkams.kernel.org::ftp/pub/linux/ ${DEST} > ${LOGFILE} ${RSYNC} ${RSYNCOPTS} ftp.uofo.lkams.kernel.org::ftp/pub/software/ /aoedisk/software >> ${LOGFILE}

## Change the group ownership of the logs to Mirrorlogs ${CHGRP} mirrorlogs ${LOGFILE}

## We are done, remove the lockfile ${RM} ${LOCKFILE}

## Send a clean exit code exit 0 else ## Another copy of the script was running, not really an error on our part, so send a successful error code exit 0 fi </source>

mirrorLogRotate

This is located in /etc/cron.monthly and rotates the logs in /var/log/mirrorlogs

<source lang="bash">

  1. !/bin/bash -
    1. Log Rotation Script for mirror.clarkson.edu's rsync logs
    2. Copyright 2007 Chris Peterman <petermcv@clarkson.edu>
    3. Licensed under the GPLv2
    1. Set month number to LAST month

(( month = $(/bin/date +%m) - 1 ))

    1. Account for January being 1 and December being 12. There is no month
    2. 0, at least as returned by /bin/date

if [ ${month} -eq 0 ] then month=12 fi

    1. Set the year

year=$(/bin/date +%y)

    1. Set the mirror log directory

logDir=/var/log/mirrorlogs

for distro in archlinux fedora ubuntu centos gentoo debian do ## Archive the logs from last month, then delete them (NOT the Archive) /bin/tar -czvf /tmp/${distro}-${month}-${year}.tgz ${logDir}/${distro}-${month}-*-${year} && /bin/rm -v ${logDir}/${distro}-${month}-*-${year}

## Move the log Tarball back to the logdir /bin/mv /tmp/${distro}-${month}-${year}.tgz ${logDir} done

exit 0 </source>