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>] |
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. |
| 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 ...

