• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

zentrales Update für verschiedene PCs mit smart

pospiech

Hacker
Es gibt ja schon ein howto für aptfür ein zentrales Update von einem PC aus. Ich wollte mal anfragen ob es sich lohnt das ganze für smart einzurichten anstatt apt zu nutzen und wie man dann vorgehen muss.

Ich benutzte bislang nur suse 9.3 und apt auf allen Rechnern einzeln, d.h. ohne zentralen Updateserver.
Demnächst sollen alle Rechner auf 10.1 umgestellt werden.
Dann könnte ich a) smart nutzen und b) möchte in jedem Fall nur noch auf einem Rechner Updates herunterladen müssen, benötige aber noch ein entsprechendes Howto.

Zudem würde ich gerne auch die sonstigen FTP Dateien, die ich zum Installieren nutze, spiegeln damit auch in diesem Fall nicht alle Rechner die gleichen Dateien merhfach herunterladen. Auch hierfür suche ich ein Howto.

Matthias
 

oc2pus

Ultimate Guru
das geht analog.

smart sucht seinen Pakete-cache per default im Verzeichnis /var/lib/smart.
Wenn man das Verzeichnis /var/lib/smart verschiebt, z.Bsp nach /local/smart und einen symbolischen link von /var/lib/smart nach /local/smart legt
Code:
ln -s /local/smart /var/lib/smart

und das Verzeichnis /local/smart per NFS exportiert, können verschiedene PCs mit diesem cache arbeiten.

einen evtl vorhandenen apt-Cache kann man ebenfalls ganz einfach durch eine eigene Channel-Definition einbinden.

Wer seine lokalen apt-Repositories via eigenem Webserver exportiert kann diese Repositories ebenfalls in smart integrieren.
Beispiel: abspeichern als local.channel in /etc/smart/channel
Code:
[oc2pus-local]
type = apt-rpm
name = local SuSE Linux 10.1 APT suser-oc2pus repository
baseurl = http://192.168.42.11/apt/SuSE/10.1-i386
components = SuSE101
wird dann beim nächsten smart Aufruf aktiviert oder mit dem Befehl
Code:
smart channel --add local.channel

Um aus einem lokalen Verzeichnis mit RPM's einen smartchannel zu erstellen, muss man mit dem Programm createrepo die Metainformationen erstellen und kann dann dieses repomd Repository ebenfalls in sein smart integrieren.
Wichtig: bei jeder Änderung am RPM-Verzeichnis muss anschliessend createrepo aufgerufen werden. Das Programm createrepo wird über das gleichnamige Pakete installiert.

Beispiel:
im Verzeichnis /local/meinePakete liegen einige RPMs, dann erstellt
Code:
createrepo /local/meinePakete
eine Verzeichnis /local/meinePakete/repodata.
Dieses Verzeichnis dann via Webserver freigeben.

Die zugehörige channel-Definition sieht dann so aus:
Code:
[oc2pus-local]
type = rpm-md
name = local SuSE Linux 10.1 APT suser-oc2pus repository
baseurl = http://192.168.42.11/apt/SuSE/10.1-i386/RPMS
 
OP
P

pospiech

Hacker
Danke für die Antwort. Ich verstehe zwar erstmal gar nichts von dem, was aber vielleicht auch daran liegt, dass ich mit smart noch nicht gearbeitet habe.

Kann man auch per samba statt nfs erxportieren ? nfs ist mein Haßliebling, weil es dazu führt das mein Rechner abschmiert, wenn der Client bzw Host ausgeschaltet wird. Konkret schmiert der RPC Deamon ab und verhindert das Lesen des Verzeichnisses in dem die mounts liegen. Lässt sich auch nur durch einen Reboot beheben.

Ansonsten versuche ich mich an deinen Beispielen in den nächsten Tagen und melde mich wenn ich Fragen habe (was vermutlich der Fall sein wird)

Matthias
 

oc2pus

Ultimate Guru
es muss nicht NFS sein, ich habe auch skizziert wie es mit einem lokalen Webserver geht ...

ad Samba:
das kann funktionieren, aber ist meines Erachtens ein overhead. Aber ich bin kein Windows/Samba Geek :mrgreen:
 
OP
P

pospiech

Hacker
Gut, da ich sowieso eine Webserver am laufen habe würde ich den dafür nehmen. Für den Dateiexport bin ich aber so oder so auf samba angewiesen, wenn ich nfs nicht nutzen möchte, da mir andere Alternativen nicht bekannt sind.

Matthias
 

oc2pus

Ultimate Guru
pospiech schrieb:
Gut, da ich sowieso eine Webserver am laufen habe würde ich den dafür nehmen. Für den Dateiexport bin ich aber so oder so auf samba angewiesen, wenn ich nfs nicht nutzen möchte, da mir andere Alternativen nicht bekannt sind.

dann nimm den Webserver und du brauchst keine Dateifreigaben für deine RPM-Pakete....
 
OP
P

pospiech

Hacker
Inzwischen habe ich Suse 10.1 mit smart am laufen und verstehe etwas mehr von deiner Beschreibung.

oc2pus schrieb:
das geht analog.
smart sucht seinen Pakete-cache per default im Verzeichnis /var/lib/smart.
Wenn man das Verzeichnis /var/lib/smart verschiebt, z.Bsp nach /local/smart und einen symbolischen link von /var/lib/smart nach /local/smart legt
Code:
ln -s /local/smart /var/lib/smart

und das Verzeichnis /local/smart per NFS exportiert, können verschiedene PCs mit diesem cache arbeiten.
Damit erreiche ich, dass Updates über dioe Verfügbarkeit von Paketen entfernter Rechner von allen Rechner gleichermaßen durchgeführt werden.
Aber Pakete sind in diesem Verzeichnis bei mir nicht enthalten.

oc2pus schrieb:
Wer seine lokalen apt-Repositories via eigenem Webserver exportiert kann diese Repositories ebenfalls in smart integrieren.
Will ich den eigene Reposetries haben ? Ich habe keine und plane auch nicht welche aufzumachen. Schließlich will ich keine Pakete erstellen. Oder worum geht es hier ?

oc2pus schrieb:
Um aus einem lokalen Verzeichnis mit RPM's einen smartchannel zu erstellen, muss man mit dem Programm createrepo die Metainformationen erstellen und kann dann dieses repomd Repository ebenfalls in sein smart integrieren.
Wichtig: bei jeder Änderung am RPM-Verzeichnis muss anschliessend createrepo aufgerufen werden. Das Programm createrepo wird über das gleichnamige Pakete installiert.
Das würde aber nur Sinn machen wenn ich die Dateien aus einem Channel wieder als exakt demselben Channel lokal verfügbar machen wollte - das erscheint mir aber sehr umständlich, denn dann müsste ja über ein Skript abgefragt werden ob neuere RPMS angekommen sind. Wobei man noch einrichten müsste, dass überhaupt rpms auf dem Rechner landen.

Geht es nicht einfacher?

Was mich irritiert - was passiert mit den Updates die ich lokal schon geladen habe ? Werden diese gelöscht ? Das dürfte natürlich nicht passieren, sonst können die anderen Rechner es nicht mehr nutzen.

Wenn ich schon neue channels lokal erschaffen muss - wäre es dann nicht einfacher den Server einfach zu spiegelen ?

Was mir auch noch fehlt: Bei synaptic gibt es die Option Updates herunterzuladen, aber nicht zu installieren. Gibt es das auch für smart ? Ich habe keine deratige Option gesehen.

Matthias
 

oc2pus

Ultimate Guru
smart config --set remove-packages=false
damit wird nichts im cache gelöscht

bei NFS-Freigabe des caches:
die Idee ist den smart-cache nur EINMAL zu haben.
d.h. alle PCs schreiben/lesen aus dem gleichen cache.

bei Webserver-Freigabe:
alle lesen aus dem gleichen cache, aber irgendein Rechner muss dafür sorgen das der cache gefüllt/gespiegelt wird.

Ich nutze die NFS-Freigabe, weil das am einfachsten zu relaisieren ist.

Und eigene Repositories braucht man z.Bsp um Treiber RPMs oder sonstige RPMs zentral zur Verfügung zu stellen.
 
OP
P

pospiech

Hacker
oc2pus schrieb:
smart config --set remove-packages=false
damit wird nichts im cache gelöscht
Danke, auf setwas hatte ich gehofft.
Bleibt nur die Frage wie ich schon installierte Pakete wieder in den Cache bekomme, sowie Pakete die online verfügbar sind bei meinem Rechner aber nicht installiert werden sollen ebenfalls in den Cache bekomme.

Matthias
 

oc2pus

Ultimate Guru
tja um alles in den cache zu packen was installiert ist:

Code:
myRPMS=`rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" `
mirror="http://ftp.gwdg.de......"
cd /var/lib/smart/packages
for i in $myRPMS; do
    wget -c <mirror>/$i.rpm
done

das sollte alle installierten Pakete holen.

und zur zweiten Frage: rsync verwenden um die Pakete runterzuladen.
Dazu gibt es schon ein script hier im Forum.
 
OP
P

pospiech

Hacker
Vielen Danke für das Skript, allerdings führt die Anweisung
rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARRCH}\n"

bei mir nur zu dem Fehler
error: incorrect format: empty tag name

Leider weiß ich mit dem Fehler nichts anzufangen.

Matthias
 

oc2pus

Ultimate Guru
Code:
rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARRCH}\n"

sorry typo von mir ;)

muss heissen:
Code:
rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n"
 
OP
P

pospiech

Hacker
Jetzt läuft das Skript prinzipiell durch. Aber die Liste in myRPMS enthält nur die Dateien, und keinen Pfad.
Die Dateien sind jedoch nicht alle auf dem gleichen Pfad eines Servers zu finden. Daher weiß ich nicht welchen Mirror/Pfad ich angeben soll.
Mit einem mirror="ftp://ftp.gwdg.de/pub/linux/suse/" wird in jedem Fall nichts gefunden.

EDIT: Stimmt nicht. ganz Eine Anpassung des Skriptes nach
wget -c $mirror$i.rpm
führt dazu, dass das Skript überhaupt erst versucht die Dateien runterzuuladen.

Das jedoch scheitert daran, dass sie wie vermutet nicht gefunden werde
Code:
--09:46:51--  ftp://ftp.gwdg.de/pub/linux/suse/kdebase3-SuSE-10.1-58.3.i586.rpm
           => `kdebase3-SuSE-10.1-58.3.i586.rpm'
Auflösen des Hostnamen »ftp.gwdg.de«.... 134.76.11.100
Verbindungsaufbau zu ftp.gwdg.de|134.76.11.100|:21... verbunden.
Anmelden als anonymous ... Angemeldet!
==> SYST ... fertig.    ==> PWD ... fertig.
==> TYPE I ... fertig.  ==> CWD /pub/linux/suse ... fertig.
==> PASV ... fertig.    ==> RETR kdebase3-SuSE-10.1-58.3.i586.rpm ...
Die Datei »kdebase3-SuSE-10.1-58.3.i586.rpm« gibt es nicht.

Matthias
 

oc2pus

Ultimate Guru
naja, ein paar "Hausaufgaben" musst du schon selber machen ..

zunächst musst du die Pakete trennen nach noarch, i386, i586, i686 und daraus ergeben sich bestimmte Verzeichnisse auf dem Server

und aus der Liste der RPMs musst du die gpg-pubkey-* skippen, das sind keine Pakete.
 
Oben