diff --git a/.gitignore b/.gitignore index 5e580f34..42082e46 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,11 @@ !bin #!bin/** +!bin/alpine.sh +!bin/arch.sh +!bin/artix.s!bin/alpine.sh +!bin/arch.sh +!bin/artix.sh !bin/eagle.sh !bin/forksync.sh !bin/gnucash.sh diff --git a/bin/alpine.sh b/bin/alpine.sh new file mode 100755 index 00000000..3bbd0ddb --- /dev/null +++ b/bin/alpine.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env sh + +# make sure we never run 2 rsync at the same time +lockfile="/tmp/alpine-mirror.lock" +if [ -z "$flock" ] ; then + exec env flock=1 flock -n $lockfile "$0" "$@" +fi + +src=rsync://rsync.alpinelinux.org/alpine/ +dest=/data/alpine/ + +# uncomment this to exclude old v2.x branches +exclude="--exclude v2.* --exclude v3.0 --exclude v3.1 --exclude v3.2 --exclude v3.2 --exclude v3.3 --exclude v3.4 --exclude v3.5 --exclude v3.6 --exclude v3.7 --exclude aarch64/ --exclude armhf/ --exclude armv7/ --exclude ppc64le/ --exclude s390x/ --exclude x86/" + +mkdir -p "$dest" +/usr/bin/rsync \ + --archive \ + --update \ + --hard-links \ + --delete \ + --delete-after \ + --delay-updates \ + --timeout=600 \ + --delete-excluded \ + --verbose \ + $exclude \ + "$src" "$dest" + diff --git a/bin/arch.sh b/bin/arch.sh new file mode 100755 index 00000000..65232ead --- /dev/null +++ b/bin/arch.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash + +# This is a simple mirroring script. To save bandwidth it first checks a +# timestamp via HTTP and only runs rsync when the timestamp differs from the +# local copy. As of 2016, a single rsync run without changes transfers roughly +# 6MiB of data which adds up to roughly 250GiB of traffic per month when rsync +# is run every minute. Performing a simple check via HTTP first can thus save a +# lot of traffic. + +# Directory where the repo is stored locally. Example: /srv/repo +target="/data/arch" + +# Directory where files are downloaded to before being moved in place. +# This should be on the same filesystem as $target, but not a subdirectory of $target. +# Example: /srv/tmp +tmp="/data/tmp" + +# Lockfile path +lock="/tmp/syncrepo.lck" + +# If you want to limit the bandwidth used by rsync set this. +# Use 0 to disable the limit. +# The default unit is KiB (see man rsync /--bwlimit for more) +bwlimit=0 + +# The source URL of the mirror you want to sync from. +# If you are a tier 1 mirror use rsync.archlinux.org, for example like this: +# rsync://rsync.archlinux.org/ftp_tier1 +# Otherwise chose a tier 1 mirror from this list and use its rsync URL: +# https://www.archlinux.org/mirrors/ +source_url='rsync://mirror.23media.de/archlinux/' + +# An HTTP(S) URL pointing to the 'lastupdate' file on your chosen mirror. +# If you are a tier 1 mirror use: http://rsync.archlinux.org/lastupdate +# Otherwise use the HTTP(S) URL from your chosen mirror. +lastupdate_url='http://mirror.23media.de/archlinux/lastupdate' + +#### END CONFIG + +[ ! -d "${target}" ] && mkdir -p "${target}" +[ ! -d "${tmp}" ] && mkdir -p "${tmp}" + +exec 9>"${lock}" +flock -n 9 || exit + +rsync_cmd() { + local -a cmd=(rsync -rtlH --safe-links --delete-after ${VERBOSE} "--timeout=600" "--contimeout=60" -p \ + --delay-updates --no-motd "--temp-dir=${tmp}") + + if stty &>/dev/null; then + cmd+=(-h -v --progress) + else + cmd+=(--quiet) + fi + + if ((bwlimit>0)); then + cmd+=("--bwlimit=$bwlimit") + fi + + "${cmd[@]}" "$@" +} + + +# if we are called without a tty (cronjob) only run when there are changes +if ! tty -s && [[ -f "$target/lastupdate" ]] && diff -b <(curl -Ls "$lastupdate_url") "$target/lastupdate" >/dev/null; then + # keep lastsync file in sync for statistics generated by the Arch Linux website + rsync_cmd "$source_url/lastsync" "$target/lastsync" + exit 0 +fi + +rsync_cmd \ + --exclude='*.links.tar.gz*' \ + --exclude='/other' \ + --exclude='/sources' \ + "${source_url}" \ + "${target}" + diff --git a/bin/artix.sh b/bin/artix.sh new file mode 100755 index 00000000..d82f4ece --- /dev/null +++ b/bin/artix.sh @@ -0,0 +1,6 @@ +#!/bin/bash + + +rsync -auvPH --delete-after "rsync://mirror1.artixlinux.org/artix-linux/*" /data/artix/repos/ +rsync -auvPH --delete-after "rsync://download.artixlinux.org/iso/*" /data/artix/iso/ +