Paketverwaltung/Paketdepots/YaST/media

aus openSUSE, der freien Wissensdatenbank

Dieser Artikel ist ziemlich kurz. Wenn Sie ihn erweitern möchten, dann freuen wir uns über ihre Hilfe. Lesen Sie bitte auch den OpenSUSE Stilleitfaden.

Wenn Sie ein wenig Beschäftigung suchen, schauen Sie sich doch einfach mal die anderen Erweiterungskandidaten an.

Inhaltsverzeichnis

YaST/Zypp Medienbeschreibung

Voraussetzungen

  • Mehrere Produkte je Medium
    Ein Medium kann verschiedene Produkte enthalten, bspw. kombinierte Patch-Medien.
  • Mehrere Architekturen je Produkt
    Ein Medium kann Produkte für mehrere Architekturen enthalten.
  • Bi-Arch-Unterstützung
    Eine Architektur kann bi-arch sein, wo also das Vermischen kompatibler Architekturen erlaubt ist.
  • Mehrere Sprachen je Produkt
    Ein Medium kann Produkte für mehrere Sprachen enthalten.
  • Mediensätze
    a) Der Inhalt kann sich auf mehrere Medien verteilen - welche dann einen Mediensatz bilden.
    b) Es muss möglich sein, einen Mediensatz in einem einzelnen Verzeichnis zu vereinen.
    c) Medien könnten doppellseitig sein (bspw. DVD-ROM).
  • Ein Medium muss vom System einfach wiedererkennbar sein
    Dies wird bspw. benötigt, wenn ein CD-ROM-Medium zur weiteren Paketinstallation wieder eingelegt wird. Das System muss überprüfen können, ob das korrekte Medium eingelegt ist und zur Paketinstallation verwendet werden kann.
  • Produktname
  • Produktversion
  • Basisdistribution
    Gibt die Distribution an, auf welcher das Produkt basiert.
  • Version der Basisdistribution
  • Produkthersteller
  • Nutzerlesbare Inhaltsbeschreibung
    Dies wird benötigt, um dem Nutzer Medieninformationen noch vor der Installation zu präsentieren, damit dieser auf Grund der Informationen entscheiden kann, ob er den Prozess fortsetzen möchte, oder nicht.
  • Paketpfad
    Oberster Pfad zu den Paketen (bspw. "suse/" auf SUSE-Medien, "unitedlinux/" auf UL-Medien, usw.)
  • Standardsprache
    Standardsprache, falls keine Sprache feststellbar ist.
  • Initialserver für das Online Update
  • Keine Suche nach Dateien mit Hilfe von Platzhaltern
    Eine Suche mit Hilfe von Platzhaltern auf einem lokalen Medium durchzuführen ist billig, jedoch fast unmöglich vie HTTP, weshalb allgemein davon abgesehen werden sollte.

Implementierung

Die Medien- und Produktbeschreibung ist in einen Satz aus Dateien aufgeteilt, welche die Daten zur Medienaufbereitung von denen des Inhalts (Produkt) trennen und es ermöglichen, verschiedene Produkte auf einem einzigen Medium vorzuhalten.
Auf der obersten Ebene des Mediums sollte ein Verzeichnis namens

       /media.1/

existieren.

Die numerische Erweiterung hängt von der Mediennummer im Fall eines Mediensatzes ab. Das erste Medium hat .1, dass zweite .2, und so weiter.
Dies erlaubt es, alle Medien eines Satzes in einem einzigen Verzeichnis zu vereinen. YaST weiß immer, welches Medium zu erwarten ist und kann auf Grund dessen direkt auf den korrekten Medienordner zugreifen.

Dateien innerhalb von media.N/

Innerhalb des media.N/-Ordners müssen die Dateien media und products existieren.
Optional kann auch eine Datei namens patches existieren, welche mein Medium mit Patches kennzeichnet (bspw. für YaST Online Update).

Die media-Datei enthält die Medienidentifikation, welche benötigt wird, die Korrektheit bei entfernbaren Medien festzustellen.
Bei einem Satz von Medien muss diese auf jedem Medium vorhanden sein.

Die products-Datein enthält Ordnerspezifikationen für jedes Produkt.
Bei einem Satz von Medien muss diese auf dem ersten Medium vorhanden sein.

Die patches-Datei enthält eine einzelne Ordnerspezifikation für das Wurzelverzeichnis des Ordner mit den Patches und optional eine exklusive Liste von Produkten, welche die Patches betreffen.
Bei einem Satz von Medien muss diese auf dem ersten Medium vorhanden sein.

Die Datei /media.N/media

Sie sollte eine Identifikation enthalten, mit der schnell feststellbar ist, zu welchem Satz das Medium gehört. Diese Identifikation ist für den nutzer nicht sichtbar, sollte aber zum Suchen von Fehlern von Menschen lesbare Daten enthalten.

Normalerweise wird ein Zeitstempel, bspw. 20061129031301, zur Identifikation eines Mediums verwendet.

Datei: media
Ort /media.N/-Verzeichnis auf dem Medium
Inhalt Zwei oder mehr Zeilen ASCII wie folgt
<vendor>
<YYYYMMDDHHMMSS>

[<media count>]
[<media flags>]
[<media names>]


Die Identifikationsdaten sind absichtlich in der Datei gespeichert. Sie können auch im Dateinamen kodiert werden (ältere SuSE-Medien machen es so), was aber ein Abfragen der Verzeichnisinformationen erfordert und deshalb unterlassen werden sollte.

Indem der Herstellername in der Datei gespeichert wird, kann der Zeitstempel Herstellerspezifisch gehalten werden. (Es ist der Name des Ersteller des Midiums, welcher sich vom Hersteller des Produkts unterscheiden kann! Er wird einfach als zusätzliche Medienidentifikation benjutzt.)

Alle Medien eines Satzes müssen einen identischen Hersteller (vendor) und eine identische Identifikationsinformation in der media-Datei enthalten.

Die Datei /media.1/media

Die /media.1/media-Datei kann zusätzliche Informationen enthalten.
Die verbleibenden media-Dateien eines Satzes können diese Informationen wiederholen, sie werden jedoch nicht erneut verarbeitet.

<media count> wird benötigt, wenn die Installationsdaten über mehrere (identische) Medien verteilt sind.
Die Medienanzahl (media count) ist ein numerischer Wert (alle Zeichen sind Ziffern) und ist standardmäßig 1.

<media flags> können das Medium weitergehend beschreiben.
Um die flags von der count-Zeile zu unterscheiden beginnen die Werte mit Buchstaben.

Gegenwärtig definierte flags:

Flag Bedeutung
doublesided Das Medium ist doppelseitig, YaST wird bei ungerade gezählten Medien nach der Frontseite fragen und bei gerade gezählten Medien nach der Rückseite.
Der Standard ist ein einseitiges Medium.

<media names> kann eine alternative Zeichenkette definieren, welche benutzt wird, wenn nach einem bestimmten Medium gefragt wird.
Sie werden als Paare aus <key><whitespace><value> definiert, getrennt durch \n.

Schlüssel Wert
MEDIA<N> Mit UTF-8 kodierte Zeichenkette; benutzt wenn nach Medium <N> gefragt wird.
MEDIA<N>.<lang> Mit UTF-8 kodierte Übersetzung von MEDIA<N> welche nach dem ISO-<language>

oder <language>_<country>-Kode definiert werden kann.

Beispiel


linux# mount /dev/cdrom /mnt
linux# ls /mnt/media.1
media
products
linux# cat /mnt/media.1/media
SuSE Linux AG
20020921153042
3
MEDIA1 SUSE Linux 9.1 DVD 1
MEDIA2 SUSE Linux 9.1 DVD 2
MEDIA3 SUSE Linux 9.1 DVD 3
linux#

Die Datei products

Diese Datei enthält den Verzeichnisnamen von jedem auf dem Mediuem enthaltenen Produkt.


Falls diese Datei nicht vorhanden ist, wird davon ausgegangen, dass das Medium ein einzelnes Produkt enthält.



Es handelt sich dabei um eine ASCII-Datei mit einer Zeile pro Produkt.

Jede Zeile startet mit einem Verzeichnisnamen (relative zum Wurzelverzeichnis des Mediums !), gefolgt von Leerzeichen (Leerzeichen oder Tabulator), sowie dem Produktnamen und der Version.
Ein Schrägstrich am Anfang des Verzeichnisnamens wird nur benötigt um das Wurzelverzeichnis des Mediums anzugeben.

Datei: products
Ort /media.1/-Verzeichnis
Inhalt Eine oder mehrere Zeilen ASCII-Kode wie folgt
<Verzeichnis> <Leerraum> <Produkt>

<Leerraum> <Version>


Beispiel


linux# mount /dev/cdrom /mnt
linux# cat /mnt/media.1/products
/      SuSE Linux Personal 8.1-0
sles-8 SuSE Linux Enterprise Server 8-0
openlinux      Caldera OpenLinux 4.0-0
linux# ls -a /mnt
...
media.1/
...
sles-8/
openlinux/
...

Im obigen Beispiel verwendet "SuSE Linux Personal" die oberste Ordnerebene, während die anderen Produkte ihre eigenen Unterverzeichnisse haben.

Die Datei content

Diese Datei befindet sich im Produktverzeichnis, welches in der products-Datei auf dem Medium angegeben ist. Sie enthält alle produktspezifischen Daten, um den Inhalt des Produkts zu identifizieren und zu beschreiben.

Wenn keine products-Datei vorhanden ist, zeigt das Produktverzeichnis standardmäßig auf das Wurzelverzeichnis des Mediums.

Die content-Datei kann fehlen, wenn das Medium kein Produkt enthält (sondern lediglich einen Satz von Paketen).
In diesem Fall muss der Nutzer das Medium 'blind' akzeptieren.


Vorschlag:

Datei: content
Ort Produkteverzeichnis wie in der /media.1/products-Datei definiert
Inhalt UTF-8 kodierte Paare aus <Schlüssel><Leerraum><Wert>, getrennt durch \n
Erlaubte Schlüssel finden Sie in der nächsten Tabelle.

Obligatorische Schlüssel

Prio Schlüssel Erlaubte Werte
z PRODUCT Produktname
Z VERSION Produktversion und Ausgabe wie in RPMs
<major>.<minor>-<release>
Z DISTPRODUCT Distributions-ID (Herstellerspezifisch)
Z DISTVERSION Distributionsversion (Herstellerspezifisch)
O BASEPRODUCT Name des Basisprodukts, falls sich dieser von PRODUCT unterscheidet
O BASEVERSION Version von BASEPRODUCT, obligatorisch, wenn BASEPRODUCT definiert ist
<major>.<minor>-<release>
Z VENDOR Herstellername (frei wählbar)
Z ARCH.<Basis> Durch Leerzeichen getrennte Liste der erlaubten Architekturen für <Basis>
(siehe weiter unten für Erklärungen)
Z DEFAULTBASE Minimale Architekturbasis die von diesem Produkt unterstützt wird.
Standardmäßig <Basis>-Architektur wenn keine passende ARCH.<Basis> gefunden wird.
Z REQUIRES Abhängigkeiten die auf dem System installiert sein müssen, um die Bedingungen dieses Produktes zu erfüllen.

Dies ist eine durch Leerzeichen getrennte List von Namen oder Art:Name-Paaren, optional gefolgt von Versionen die vorhanden sein müssen.
Ein Name bezeichnet eine Abhängigkeit zu einem Paket, bspw. sles-release oder suse-release == 10.1.
Art kann 'package', 'pattern' oder 'product' sein, bspw. pattern:sles-base == 10.0

O LINGUAS ISO-<Sprache>- oder <Sprache>_<Land>-Kode
O LABEL UTF-8 kodiertes Etikett.
Standardetikett wenn LINGUAS fehlt oder die keine Standardsprache festgestellt werden kann.
O LABEL.<Sprache> UTF-8 kodiertes Etikett.
<Sprache> hat die selbe Syntax wie der Wert von LINGUAS.

Für jede Sprache in LINGUAS wird ein passendes LABEL.<Sprache> erwartet.

Z DESCRDIR Verzeichnis mit den Paketbeschreibungen
(relativ zum Produktverzeichnis)
Z DATADIR Verzeichnis mit den Paketdaten
(relativ zum Produktverzeichnis)
O LANGUAGE Standardsprachkode
O TIMEZONE Standardzeitzone
O RELNOTESURL URL der Anmerkungen zur Ausgabe (release notes), siehe unten
O FLAGS Produktspezifische Fähigkeiten, siehe unten
O YOUURL URL zu einer Textdatei die eine Liste von Server für das YaST Online Update enthält
O YOUTYPE Kommaseparierte Liste von YOU-Flags. business für SuSE-Firmenkundenprodukte, noyou für Produkte die von YOU ignoriert werden sollen
O YOUPATH Serverpfad zu den Patches
(veranlasst YOU auf dem Wartungsserver nach Aktualisierungen zu suchen)

Prio 'Z' == zwingend, 'O' == optional
EntwederLABEL oder LABEL<Sprache> müssen vorhanden sein.

Die ARCH.<base>-Zeile bedarf einer ausführlicheren Erklärung:
Die Unterstützung für bi-arch-Architekturen und optimierte Pakete erfordert das mehrfache (architekturoptmierte) Vorhandensein eines Pakets (unter dem selben Namen und Version).
Um festzustellen, welches die 'richtige' Architekturversion des Pakets ist, benötigt YaST eine Rückfallstrategie (eine Suchreihenfolge).

Die <base>-Marke wird als Startpunkt verwendet und legt 'die' Architektur des Systems fest. Diese wird durch das Ausführen von uname -m (und Nachschauen in /proc/cpuinfo) festgestellt.
Für diese <Basis> muss ein passendes ARCH.<Basis> existieren. Wenn es nicht gefunden wird, erhält <Basis> den Wert von DEFAULTBASE für welches ein passendes ARCH.<Basis> garantiert ist.

Der Wert der ARCH.<Basis>-Zeile ist die Suchreihenfolge für die Pakete. Das erste zur Architektur passende Paket wird als bevorzugter Kandidat verwendet.
Pakete mit nicht in der Liste vorhandenen Architekturen werden verworfen und erscheinen zur Auswahl. Pakete mit 'niedrigeren' Architekturen stehen weiterhin zur Auswahl bereit, so dass der Nutzer manuell solch ein Paket wählen kann.

Die RELNOTESURL-Zeile wird genutzt, um den Ort des RPMs mit den Anmerkungen zur Veröffentlichung zu definieren. Zur Zeit wird lediglich HTTP unterstützt. Das RPM wir mit rpm -U --replacepkgs 'Basisname der URL' installiert.

Die FLAGS-Zeile wird genutzt um die (Installations-) Fähigkeiten des Produktes zu beschreiben. Sein Wert ist eine durch Leerzeichen getrennte Liste von Schlüsselwörtern.
Zur Zeit sind die folgenden Schlüsselwörter definiert:

update Bietet einen Knopf zum Aktualisieren in YaST
usercwd Fügt '.' (aktuelles Arbeitsverzeichnis) zur PATH-Umgebung hinzu.
Normalerweise ist das ein Risiko, aber manche Nutzer können nicht ohne es leben.
no_you Kein Online Update während der Installation anbieten
SP Diese Quelle ist ein Service Pack
cache Versuche, die Pakete auf der Festplatte zwischenzuspeichern (um CD-Wechseln zu reduzieren)
Einzig die erste Quelle (sortiert nach Priorität) wird wirklich zwischengespeichert.


Der Ort eines Pakets auf dem Installationsmedium wird durch die Zeile =Loc: in der Datei [package-descr.html packages] festgelegt.

Beispiel

linux# mount /dev/cdrom /mnt
linux# cat /mnt/sles/content
PRODUCT SuSE Linux Enterprise Sever
VERSION 8.0-0
BASEPRODUCT UnitedLinux
BASEVERSION 1.0-0
VENDOR SuSE Linux AG
ARCH.x86_64 x86-64 i686 i586 i486 i386 noarch
ARCH.i686 i686 i586 i486 i386 noarch
ARCH.i586 i586 i486 i386 noarch
DEFAULTBASE i386
LINGUAS en de_DE
LABEL.en SuSE Linux Enterprise Sever based on UnitedLinux
LABEL.de_DE SuSE Linux Enterprise Sever basierend auf UnitedLinux
DESCRDIR suse/setup/descr
DATADIR suse
REQUIRES foo pattern:bar
LANGUAGE de_DE
TIMEZONE Europe/Berlin
RELNOTESURL http://www.suse.com/relnotes/sl_82/release-notes.rpm
FLAGS update
YOUURL http://www.suse.de/cgi-bin/suseservers.cgi
YOUTYPE business
YOUPATH i386/update/SuSE-SLES/8
linux#


Die Datei patches

Diese Datei enthält einen einzelnen Verzeichnisnamen, welcher die Wurzel des Verzeichnis mit den auf dem Medium enthaltenen Patches angibt, und eine optionale Liste von Produkten auf die die Patches zutreffen.
Wenn diese Datei nicht vorhanden ist, wird das Wurzelverzeichnis des Mediums verwendet und es werden keine Einschränkungen bei den Produkten gemacht.

Die erste Zeile der Datei startet mit dem Verzeichnisnamen (relativ zum Wurzelverzeichnis des Mediums!), gefolgt von Leerraum (Leerzeichen oder Tabulator), sowie einem optionalen Kommentar mit der Beschreibung/Patchlevel des Patches.
Ein Schrägstrich zu Beginn des Verzeichnisnamens wird nur benötigt, um das Wurzelverzeichnis des Mediums anzugeben.

Zusätzliche Zeilen werden verwendet, um exklusive Produkte anzugeben. Wenn keine zusätzlichen Zeilen vorhanden sind, werden keine exklusiven Produkte angenommen. Falls exklusive Produkte angegeben sind, ignorieren sowohl das Online als auch das Patch CD Update alle auf dem System installierten Produkte, die nicht in der Liste der exklusiven Produkte eingetragen sind. Wenn keine exklusiven Produkte angegeben sind, werden alle auf dem System installierten System vorhandenen Produkte zur Aktualisierung verwendet.

Die exklusiven Produkte werden als ein Produkt pro Zeile in der Form von Produktname und Produktversion, getrennt durch einen Gedankenstrich, aufgelistet.

Vorschlag:

Datei: patches
Ort /media.1/-Verzeichnis
Inhalt Eine Zeile ASCII wie folgt
<Verzeichnis> <Leerraum> <Optionaler Kommentar>

Keine oder mehrere Zeilen die exklusive Produkte angeben: <Produktname>-<Produktversion> '


Beispiel

linux# cat /mnt/media.1/patches
/ Patch-CD SuSE-SLES 7 (i386) Patchlevel 4
linux# cat /mnt2/media.1/patches
patches Patch-CD SuSE-SLOX 4 (i386) Patchlevel 1
SUSE CORE-9


Das Paketbeschreibungsverzeichnis

Jedes dieser Verzeichnisse enthält eine Datei, die die Selektionen (selections) auflistet und eine Datei die die Pakete (packages) auflistet.

Beispiel


linux# grep Enterprise /mnt/media.1/products
sles   SuSE Linux Enterprise Server
linux# grep DESCRDIR /mnt/sles/content
DESCRDIR suse/setup/descr
linux# ls -R /mnt/sles/suse/setup/descr
...
packages
selections
...
linux#

Die Datei packages

Dies ist grundsätzliche eine Pufferdatei für die Paketdaten, welche zur Paketauswahl und Aufläsung von Abhängigkeiten dient.
See current [package-descr.html hier] für die Syntax.


Die Datei packages muss existieren um das Medium zu aktivieren.



Die Paketdatei enthält reine Paket/RPM-Daten und keine nutzerlesbaren Zeichenketten (bspw. Übersetzunge).

Die Datei packages.SPRACHE

Für jede in content:LINGUAS definierte Sprache existiert eine packages.SPRACHE-Datei im content:DESCRDIR-Verzeichnis.
Diese Datei enthält übersetzte Zeichenketten (bspw. Paketzusammenfassung, Beschreibung, usw.), welche vom Nutzer angesehen werden können.


Die packages.SPRACHE-Datei kann ausgelassen werden. Die Paketzusammenfassung weißt in diesem Fall auf name-version-ausgabe.architektur.



Siehe [lang-descr.html hier] für eine Formatdefinition solch einer Datei.

Die Datei packages.DU

Diese Datei enthält Informationen über den Platzbedarf für jede Datei und jedes Verzeichnis eines Pakets.
Sie wird genutzt, um den wahrscheinlichen Platzbedarf im Dateisystem zu berechnen, vor allem, wenn mehrere Partitionen (bspw. für /usr, /var, /opt, ...) genutzt werden.
Exakte Nutzungsinformationen können von YaST nicht berechnet werden, da dies sehr stark von harten oder symbolischen Verknüpfungen (sowohl im Paket als auch im Dateisystem) und dem verwendeten Dateisystem (bspw. ext2 vs. reiserfs) abhängt.

Lesen Sie [du-descr.html hier] für eine Formatdefinition dieser Datei.

(Nebenbei: Die .DU-Endung kollidiert nicht mit der .SPRACHE-Endung, da letzere mit kleinen Buchstaben beginnt.)


Die Datei packages.DU kann ausgelassen werden. In diesem Fall können keine Größeneinschätzungen gegeben werden.


Beispiel


linux# grep Enterprise /mnt/media.1/products
sles   SuSE Linux Enterprise Server
linux# grep DATADIR /mnt/sles/content
DATADIR suse
linux# grep ^ARCH /mnt/sles/content
ARCH.x86_64 x86-64 i686 i586 i486 noarch
ARCH.i586 i586 i486 noarch
linux# ls -R /mnt/sles/suse
...
x86-64/
i686/
i586/
i486/
noarch/
...
linux#

Die Datei selections

Diese Datei enthält eine Liste von Selektionsdateinamen (einen pro Zeile, wobei auch ein Verzeichnispfad möglich ist, relativ zum DESCRDIR-Verzeichnis).
Die aktuelle *.sel -Syntax. (Muss noch definiert werden).


Die selections-Datei kann ausgelassen werden. YaST versucht in diesem Fall auf die *.sel-Dateien im DESCRDIR-Verzeichnis zuzugreifen.


Beispiel


linux# cat /mnt/suse/setup/descr/selections
Games.sel
Gnome.sel
Kde-Desktop.sel
Kde.sel
LAMP.sel
Linux-Devel.sel
Minimal.sel
Multimedia.sel
Network.sel
Office.sel
Standard.sel
SuSE-Documentation.sel
X11.sel
default.sel
linux#

Verzeichnisse lesen

Wenn YaST versucht ein Verzeichnis zu lesen, indem es erst dessen Inhalt auflistet, schaut es nach einer directory.yast-Datei und nutzt deren Inhalt als Verzeichnisauflistung, falls sie existiert. Wenn sie nicht existiert, versucht es, das Verzeichnis mit Hilfe des media backend aufzulisten. Das Auflisten von Verzeichnissen wird nicht von allen backends unterstützt, so unterstützt das HTTP backend bspw. keine Verzeichnisauflistung. Aus diesem Grund müssen Verzeichnisse, die von YaST auf allen Medien aufgelistet werden sollen, die directory.yast-Datei enthalten.

Die Dateien können mit ls >directory.yast erstellt werden. YaST ignoriert die Einträge directory.yast, . und ...