[gelöscht]
Hallo,
ich grübele seit ein paar Tagen über folgender Problemstellung:
In meinem Netzwerk gibt es mehrere Rechner, auf denen Arch läuft. Jeder der Rechner hat seiner Aufgabe entsprechend andere Software installiert. Zusätzlich habe ich noch ein kleines NAS im LAN.
Da ich hier nur DSL light habe, will ich vermeiden, dass ich von jedem Rechner ein Update laufen lassen muss, da so gerade große Pakete (Kernel, OO, Xorg etc.) mehrfach über die Leitung gezogen werden.
Meine momentane Lösung sieht so aus:
Auf dem NAS habe ich eine Freigabe eingerichtet, in der alle heruntergeladenen Pakete der einzelnen Rechner abliegen. Dazu habe ich eine bash-Funktion gebastelt, die im Anschluss eines Syu auf einem Rechner alle neuen Pakete auf die Freigabe per smb gemountete Freigabe schiebt. Synce ich dann auf einem anderen Rechner, weise ich pacman mit dem Parameter --cachedir an, die Freigabe als Paketcache zu benutzen. Das funktioniert so weit auch ganz gut, gefällt mir aber noch nicht richtig weil u.U. immer noch Pakete doppelt über die Leitung gezogen werden.
Mein Wunschtraum:
Ein Server, der quasi eine Liste aller auf den verschiedenen Rechnern installierten Pakete bekommt und z.B. per Cronjob einmal täglich nach Updates aller Pakete sucht und wenn nötig herunterlädt. Die Clients würden dann nur noch den Cache des Servers nach Updates untersuchen.
Ungelöste Probleme:
Wie ich die Paketlisten aller Rechner auf den Server bekomme ist klar. Aber wie bekomme ich pacman dazu, diese Listen mit in einem Verzeichnis liegenden Paketen zu vergleichen, mit den Updateservern zu syncen und neuere herunterzuladen?
GerBra
Ohne Detail:
Warum mountest du nicht (vom NAS per NFS) das Paket-Verzeichniss auf die anderen
Rechner. Habe ich hier auch. Ich habe allerdings einen Symlink von
/var/cache/pacman/pkg auf das Verzeichniss wo der eigentlich Mount eingehängt
ist.
Also am Server habe ich: /data/setupts/archlinux/pkg
/data gebe ich per NFS frei, die Clients hängen das jeweils nach /mnt/data.
Am Server selbst habe ich jetzt einen Symlink:
/var/cache/pacman/pkg -> /data/setupts/archlinux/pkg
auf den Clients:
/var/cache/pacman/pkg -> /mnt/setupts/archlinux/pkg
So sind bei mir die meisten Pakete schon vorhanden wenn ich einen Rechner update,
bzw. ich muß gemeinsame nicht doppelt downloaden.
Trotzdem ist jeder Client eigenständig bzg. seiner lokalen Gegebenheiten.
Klar: ich muß an jedem Client ein pacman -Sy(u) machen, aber das Erneuern der
Paketdatenbank (-y) ist ja wohl auch bei DSL-Light nicht tragisch.
[gelöscht]
Hallo GerBra,
im Prinzip mache ich das ja ganz ähnlich, nur benutze ich den Parameter --cachedir, mit dem ich auf die gemountete Freigabe verweise, was auf das gleiche herauskommt. Der Sync der Paketdatenbank ist wie Du schon gesagt hast auch nicht wirklich das Problem.
Ich hätte eben gerne einen gebündelten Download aller auf den Rechnern installierten Pakete (am besten nachts), damit die Leitung außerhalb der Zeit für andere frei ist und auch nur ein Rechner statt allen für die updates laufen muss (auch wegen Stromverbrauch).
Edit: nicht relevantes Beispiel entfernt...
Ich will es so hinbiegen, das ein Rechner (oder das NAS) zu einem definierten Zeitpunkt alle fälligen Pakete herunterlädt und dann für die anderen Rechner per Freigabe im Paketcache bereitstellt.
GerBra
Du könntest evtl. mit vollen eigenen Repositorien arbeiten z.B. auf dem NAS, also
my-core, my-extra...
Allerdings würde ich versuchen, die Rechner so eigenständig wie möglich zu lassen
und wirklich nur das pkg-Verzeichiss gemeinsam zu nutzen.
a) Alle Rechner machen irgendwann ein:
pacman -Syup > /nas/pacman-work/$HOSTNAME.lst
bzw. damit du ggf. kontrollieren/Fragen beantworten kannst:
pacman -Syu
Du kontrollierst ob das so ok wäre und erstellst erst dann die Download-Liste
pacman -Sup > /nas/pacman-work/$HOSTNAME.lst
Somit liegt für jeden Rechner eine Liste der Downlaods für das jeweils notwendige
Update (-Su) vor.
b) Am Server/NAS läuft nun irgendwann nachts ein cronjob, der folgendes macht:
Alle Listen der Rechner zusammenfassen und aufbereiten, dann downloaden mit
wget in dein gemeinsames pkg-Verzeichniss.
cat *.lst | grep ^ftp | sort | uniq > dl.urls
(Hier wären es nur ftp-Server, bei HTTP entsprechend ändern bzw. auf beides greppen)
Das erstellt dir eine reine Liste mit URLs für den Download ohne Dupletten.
Diese kannst du dann mit wget runterladen.
c) Nächsten Tag wäre dann für die Clients nur zu tun:
pacman -Su
So könnte das IMHO funktionieren.
[gelöscht]
Hallo GerBra,
dankeschön, der von Dir beschriebene Weg klappt schon ziemlich gut. Ich werde das mal so laufen lassen und testen.
Ich sehe schon, ich muss mich unbedingt mal wieder mehr mit den GNU-Tools beschäftigen.