#!/bin/ksh93 BASEDIR=/data/debian # falls das debmirror package noch nicht installiert ist, brauchen wir root # Rechte, um selbiges zu installieren - und nur dann. SUDO='+' # -- no further customization needed -- FPROG=${.sh.file} PROG=${FPROG##*/} function showUsage { getopts -a ${PROG} "${ print ${USAGE} ; }" OPT --man } function updateKeyrings { #KDIR=pool/main/d/debian-archive-keyring # http://ftp.debian.org/debian/${KDIR} # dpkg -i ${BASEDIR}/${KDIR}/debian-archive-keyring_2014.3_all.deb # dpkg -i ${BASEDIR}/${KDIR}/debian-archive-keyring_2014.3~deb7u1_all.deb typeset PKG='debian-archive-keyring' MYRING='./trustedkeys.gpg' X [[ -f ${KEYDIR}/${MYRING} ]] && (( ! (TODO & 1) )) && return 0 if [[ -d ${KEYDIR}/tmp ]]; then ${DRY} rm -rf ${KEYDIR}/tmp/* else ${DRY} mkdir -p ${KEYDIR}/tmp || return 1 fi ${DRY} cd ${KEYDIR}/tmp ${DRY} apt-get download ${PKG} ${DRY} dpkg-deb -R ${PKG}* . ${DRY} mv usr/share/keyrings/*.gpg etc/apt/trusted.gpg.d/*.gpg .. ${DRY} rm -rf ${KEYDIR}/tmp/* # die motherfucker sagen zwar, daß der folgende key mit im obigen package # ist, isser aber nich, wird aber zum Mirrorn gebraucht! for X in archive-key-8.asc archive-key-8-security.asc ; do ${DRY} wget --no-verbose https://ftp-master.debian.org/keys/$X ${DRY} mv $X .. done PKG='deb-multimedia-keyring_2014.2_all.deb' ${DRY} wget --no-verbose \ http://www.deb-multimedia.org/pool/main/d/deb-multimedia-keyring/${PKG} ${DRY} dpkg-deb -R ${PKG}* . ${DRY} mv etc/apt/trusted.gpg.d/*.gpg .. ${DRY} rm -rf ${KEYDIR}/tmp/* ${DRY} cd ${KEYDIR} # when dry it is better than .. ${DRY} rmdir ${KEYDIR}/tmp typeset GPG='gpg --no-default-keyring --keyring' ${DRY} ${GPG} ${MYRING} --list-key for X in *.asc ; do ${DRY} ${GPG} ${MYRING} --import $X done for X in debian-archive-keyring deb-multimedia-keyring ; do if [[ -n ${DRY} ]]; then ${DRY} "${GPG} ${X}.gpg -a --export | ${GPG} ${MYRING} --import -" else ${GPG} ${X}.gpg -a --export | ${GPG} ${MYRING} --import - fi done ${DRY} ${GPG} ${MYRING} --list-key } function mirror { typeset KEY=$1 LOG="${BASEDIR}/tmp/${KEY}.log" CMD shift CMD="debmirror $@ ${BASEDIR}/${KEY}/" if [[ -n ${DRY} ]]; then ${DRY} "${CMD} > ${LOG} 2>&1" else print "Starting to mirror ${KEY} - see ${LOG} ..." ${CMD} > ${LOG} 2>&1 fi } function doMirror { (( TODO & 2#1110 )) || return 0 # just in case [[ -d ${BASEDIR}/tmp ]] || { mkdir -p ${BASEDIR}/tmp || return 1 ; } typeset CARGS='--nosource --md5sums --method=http --ignore-small-errors' CARGS+=' --arch=amd64' # die sind beide scheiße, aber damit man wenigsten ein feedback hat: #CARGS+=' --progress' CARGS+=' --verbose' typeset X=${ dpkg -l debmirror 2>/dev/null ; } if [[ -z $X ]]; then # braucht libwww-perl und rsync aka 'nen ganzen Arsch voll pkgs ... ${DRY} ${SUDO} apt-get install --no-install-recommends debmirror fi ${DRY} cd ${BASEDIR}/tmp if (( TODO & 2 )); then mirror base --host=ftp.debian.org --root=debian \ --dist=jessie --section=main,contrib,non-free ${CARGS} fi if (( TODO & 4 )); then mirror security --host=security.debian.org --root=debian-security \ --dist=jessie/updates --section=main,contrib,non-free ${CARGS} fi if (( TODO & 8 )); then mirror multimedia --host=www.deb-multimedia.org --root='.' \ --dist=stable --section=main,non-free ${CARGS} fi } DRY='' integer TODO=2#1110 USAGE='[-? 1.0] [-copyright?Copyright (c) 2015 Jens Elkner. All rights reserved.] [-license?CDDL 1.0] [+NAME?'"${PROG}"' - debian bloat spiegeln für dummies] [+DESCRIPTION?Spiegelt abgefuckte debian Kacke auf die eigene Kiste.] [h:help?Diese Hilfe ausgeben und Scriptlauf beenden.] [F:functions?Liste aller bekannten Funktionen des scripts ausgeben.] [T:trace]:[functionList?Eine durch Komma separierte Namensliste von Funktionen, für die während des Scriptlaufs debug-Ausgaben generiert werden sollen (Troubleshooting).] [+?] [d:dest]:[path?Verzeichnis, in das der ganze bloat reingespiegelt werden soll. \bACHTUNG\b: Alles was darunter liegt, gehört diesem Script und wird bei Bedarf gelöscht!!! DEFAULT: \b'"${BASEDIR}"'\b] [n:dry?dry run - nur zeigen, was getan werden würde, aber nicht wirklich tuten tun.] [k:keys?Trusted keys aktualisieren, auch wenn diese schon vorhanden sind.] [b:base?Basis dist Zeux \bnicht\b spiegeln/aktualisieren.] [m:multimedia?Multimedia Zeux \bnicht\b spiegeln/aktualisieren.] [s:security?Security Zeux \bnicht\b spiegeln/aktualisieren.] ' X="${ print ${USAGE} ; }" while getopts "${X}" OPT ; do case ${OPT} in h) showUsage ; exit 0 ;; T) if [[ ${OPTARG} == 'ALL' ]]; then typeset -ft ${ typeset +f ; } else typeset -ft ${OPTARG//,/ } fi ;; F) typeset +f && exit 0 ;; d) BASEDIR="${OPTARG}" ;; n) DRY='print --' ;; k) (( TODO|=1 )) ;; b) (( TODO&=2#1101 )) ;; s) (( TODO&=2#1011 )) ;; m) (( TODO&=2#0111 )) ;; esac done # Wir wollen doch nich unseren eigenen keyring versauen ... KEYDIR=${BASEDIR}/keyrings export GNUPGHOME=${KEYDIR} updateKeyrings doMirror