blog · git · desktop · images · contact & privacy · gopher


BatchMode von sftp für den Arch Paketcache

Ich habe hier ja nicht nur einen Rechner mit Arch drauf. Wenn ich nun Updates einspiele, müsste ich das eigentlich mehrfach runterladen. Das wäre natürlich besonders dann störend, wenn die Updates sehr groß sind, was ja durchaus mal vorkommt. Bisher habe ich also immer von Hand die Pakete vom Cache des einen Rechners in den des anderen kopiert.

Man könnte das zwar auch anders machen, indem man den fremden Cache einfach drübermountet, aber das würde voraussetzen, dass ich irgendwo einen Cache haben müsste, der alle Pakete enthält. Ich habe aber nich immer überall dasselbe installiert, also fehlt vielleicht was. Eigentlich reicht es mir auch, wenn ich einfach nur das Kopieren automatisieren könnte.

SSH läuft sowieso überall, also bietet sich sftp an. Das Schöne an dem kleinen Programm ist nun, dass man ihm Befehle zupipen kann. Man sucht sich also erst raus, welche Pakete aktualisiert werden würden, und schaut dann nach, ob die drüben im anderen Cache vorhanden sind. Wenn ja, besorgen, wenn nicht, Pech gehabt.

Sähe im Skript dann so aus:

#!/bin/bash

LDIR=~/tmp/pkg/
CACHE="/var/cache/pacman/pkg/"

cd "$LDIR" || exit 1

echo "Versuche, Updates vom Gegenüber zu beziehen. Best effort."
echo "Lokales Zielverzeichnis: $LDIR"
echo ""
read -p "Zielhost: " HOST

pacman -Sup \
| (
    read DUMMY
    read DUMMY
    while read LINE
    do
        echo "GET ${CACHE}${LINE##*/}"
    done
) \
| sftp $HOST

Anmerkungen:

Das Ergebnis ist also, dass man gefragt wird, von welchem Rechner man gerne Pakete haben würde, und dass diese dann -- sofern vorhanden -- von dort geholt werden. Die Passphrase für den SSH-Key wird nur einmal für die ganze Session abgefragt. Danach muss man sie noch manuell in den lokalen Cache kopieren, was jetzt nicht mit im Skript drin ist.