Smart FAQ Uebersetzung

aus HaBo WiKi, der freien Wissensdatenbank von http://www.hackerboard.de
Wechseln zu: Navigation, Suche

Dies ist eine temporäre Seite zur Übersetzung der FAQ von Smart: http://labix.org/smart/faq?action=raw


Inhaltsverzeichnis

Allgemein

Was ist Smart?

Smart ist ein Meta-Paketmanager im Sinne von APT, YUM, URPMI und Anderen. Smart kann mit RPM, DEB und Slackware Paketen umgehen und bietet eine saubere Architektur, um neue Paket- und Repository-Formate (bei Smart channels genannt) zu installieren.

Was Smart überragend macht, ist ein sehr guter Abhängigkeits-Lösungs-Algorithmus, der viele andere Paketmanager übertrifft, eine saubere Architektur, eine umfassende Unterstützung vieler Paket- und Repository-Formate sowie ein großartiges Management von Mirror-Servern. Weitere Informationen sind auf der Features-Seite zu finden.

Die offizielle Homepage ist http://smartpm.org/.

Smart ist unter der GNU GPL veröffentlicht.

Welche Paketsysteme unterstützt Smart? Kann ich .rpm Pakete auf meinem Debian oder .deb Pakete auf meinem RPM-basierten System installieren?

Kurze Antwort: Nein

Lange Antwort: Nein, außer es ist das nicht-native Paketsystem auf der selben Maschine installiert. Und selbst wenn, bedeutet das nicht, dass es eine gute Idee wäre.

Smart ist kein universeller Wrapper für verschiedene Paketformate. Es unterstützt RPM, DEB und Slackware Pakete auf einem System, aber erlaubt keine Beziehungen zwischen verschiedenen Paketmanagern. Obwohl die Abhängigkeiten gegensetzlicher Paketsysteme einfach ermöglicht werden könnten, existieren die Paket-Policies zur Zeit einfach nicht.

Dies unterscheidet sich keinesfalls von dem, was man bereits tun kann. Tatsächlich liefert Debian den RPM Paketmanager schon seit einigen Jahren. "Möglich" heißt aber nicht gleich "gute Idee", und jeder sollte bei seinem nativen Paketformat bleiben.

Welche Repository Formate unterstützt Smart?

Smart unterstützt die folgenden Repository Formate als Quelle:

* RPM Repositories
 * RPM System Datenbank (lokal installierte Pakete)
 * APT Repositories für .rpm
 * RPM-MD (genutzt von YUM)
 * Red Carpet (genutzt von Ximian/Novell)
 * RPM Header List (genutzt von RedHat und Conectiva Installation CDs, vermutlich Anderen)
 * RPM Directory (ein Verzeichnis mit einem Haufen RPMs drinnen, kein indexing notwendig)
 * URPMI (genutzt von Mandriva)
* DEB Repositories
 * DEB System Database (lokal installierte Pakete)
 * APT Repositories für .deb
 * DEB Directory (ein Verzeichnis mit einem Haufen DEBs drinnen, kein indexing notwendig)
* Slackware
 * Slackware installierte Paketdatenbank
 * Slackware Repositories
* Mirrors
 * up2date (genutzt von RedHat/Fedora)
 * Conectiva-style Mirror Beschreibungs Formate

Warum wird es Smart genannt?

Auszug aus dem The Free On-line Dictionary of Computing:

 smart
   1. <programming> Said of a program that does the {Right Thing}
   in a wide variety of complicated circumstances. (...)

Siehe nächste Frage.

Warum ist Smart besser als APT/YUM/URPMI/etc?

Smart unterstützt verschiedene Repository Formate, inklusive der von APT, YUM und URPMI genutzten.

Smart hat eine leicht erweiterbare, saubere Architektur. Es wurde in Python mit ein wenig C Code in performance-kritischen Bereichen geschrieben.

Smart hat den elegantesten Algorithmus aller Paketmanager. Es kommt mit inkonsistenten Zuständen zurecht, kann Pakete wenn nötig downgraden und verfügt über eine bessere Überprüfung der Abhängigkeiten.

Wie stabil ist Smart?

Smart macht seine Arbeit ziemlich gut - es wurde bereits in Test- und Produktionsumgebungen mehrerer Mandriva, Debian, Fedora Core und Slackware-Systeme eingesetzt. Auch wenn es meistens gut läuft, einige Features wurden mehr als andere getestet; und somit ist es möglich, dass nicht zu vernachlässigende Bugs immer noch im Code vorhanden sind.

Verwendung

Kann ich Smart mit APT/YUM/URPMI/etc verwenden?

Ja, Smart ist ein Meta-Paket-Manager wie APT, YUM und URPMI, d.h es läuft über RPM, DPKG oder pkgtool. Smart kann parallel neben anderen Meta-Paket-Managern benutzt werden. Smart wird sich jedoch als sehr sicher erweisen.

Welche Interfaces werden unterstützt?

Smart unterstützt ein Kommandozeilen-Interfaces ähnlich zu APT, die GUI (benutzt GTK) und eine interaktive Shell. Diese Interfaces können auch gemixt werden. Das Beispiel erzeugt eine grafische Rückmeldung zu einer Kommandozeileneingabe:

# smart --gui install kdegames

Wie alles in Smart sind die Interfaces modular, es ist also sehr einfach, ein eigenes einzufügen.

Ich verwende YUM und möchte mit Smart meine Repositories verwalten, aber Smart scheint die "YUM"-Channel-Formate nicht richtig zu erkennen . Was kann ich tun?

YUM benutzt ein Repository-Format, welches als RPM-MetaData (rpm-md) bekannt ist. Smart erwartet die gleiche Base-URL, wie sie in den baseurl-settings in der `/etc/yum.conf` oder `/etc/yum.conf.d/*` angegeben ist. Wenn der genutzte baseurl-Eintrag Makros wie $basearch oder $releasever nutzt, müssen stattdessen sinnvolle Werte für das entsprechende System gewählt werden, wie in etwa "i386" und "3".

Alte Stile der YUM-Repositories werden von Smart nicht unterstützt, lediglich die neueren XML-basierten RPM-MD-Formate.

Ich möchte ein neues Kernelpaket installieren, aber Smart sagt, es werde meinen alten Kernel "upgraden". Ich möchte allerdings die alten Pakete nicht entfernen. Was kann ich tun?

Diese Frage ist irrelevant, sofern nicht RPM genutzt wird. DPKG und pkgtool unterstützten keine unterschiedlichen Versionen eines Pakets, das auf einem einzelnen System installiert ist. Wird Smart auf einer der unterstützten Distributionen installiert, sollte "kernel" eines der Pakete sein, das als "multi-version" markiert ist. Dies lässt sich folgendermaßen überprüfen:

$ smart flag --show multi-version

   multi-version
   kernel
   kernel-doc
   kernel-smp

Alternativ kannst Du dies in der GUI mittels "Bearbeiten->Flags" testen, dort kann auch ein eigenes Multi-Versions-Paket hinzugefügt werden. (ist auch über die Kommandozeile mittels smart flag --set multi-version <package> möglich)

Wenn Du einen neuen Kernel installierst, kann es vorkommen, dass Smart einen Dialog einblendet, der über das "Upgraden" der alten Pakete durch neuere informiert, es sein denn, dass diese Pakete nicht entfernt werden können. Das Installieren eines neuen Multi-Versions-Paketes beinhaltet nämlich nicht, dass das alte entfernt wird, auch wenn dies für ein "Upgrade" notwendig sein sollte.

Was bedeutet der kleine gelbe Stern?

Der gelbe Stern bedeutet, dass das Paket seit dem letzten Update des Channels geändert wurde. Man kann `View->Hide old` nutzen, um nur die Änderungen seit dem letzten Update anzuzeigen.

Wie füge ich Mirrors hinzu? Wie entscheidet Smart welcher Mirror verwendet wird?

In der GUI, auf `Edit->Mirrors`, "New" klicken, um ihre Original und Mirror URL anzugeben. Sie können so viele Mirrorserver wie Sie möchten hinzufügen. Smart filtert automatisch langsame und veraltete Mirrors aus und vermeidet diese.

Smart unterstützt es auch Mirrors von Conectiva und up2date herunterzulanden. In diesem Fall müsssen Sie wie folgt einen Mirror Channel hinzufügen: Auf `Edit->Channels` "New" "Provide channel information" und dann zwischen"Mirror information" für Conectiva-style Mirror URLs oder "Mirror information (up2date format)" für up2date-style Mirror URLs.

up2date-mirror-URLs kann man aus /etc/sysconfig/rhn/sources auslesen. Die Einträge "yum-mirror" zeigen auf up2date Mirror Dateien. Mit Fedora haben sie möglicherweise bereits einen Mirror Channel konfiguriert.

Die Mirror Channels sind in der GUI unter `Edit->Mirrors` nicht sichtbar, sondern nur in `Edit->Channels`.

Einige Quellen bieten ein gleichnamiges Paket an. Welches Paket wird von Smart verwendet? Wie kann ich das ändern?

Alle Channels werden nach der Erstellung gleich gewichtet. Smart versucht per default die Pakete auf den aktuellsten Stand zu bringen. Falls sie diese Funktion nicht verwenden möchten, können Sie den einzelnen Channels eine höhere Priorität zuweisen. Diese Einstellungen finden sie unter `Edit->Channels`. Unter den "Properties" eines Channels ist der Wert "Priority" nach belieben einzustellen. Auf der Kommandozeilenebene:

{{{

  1. smart channel --set <mychannel> priority=10

}}}

Je höher der Wert ist, desto höher ist die Priorität.

Eine noch präzisere Einstellmöglichkeit finden sie, indem sie die einzelnen Pakete mit einer Priorität versehen. Per Rechtsklick auf das jeweilige Paket was gleichzeitig die Werte des Channels überschreibt.Auf der Kommandozeilenebene:

{{{

  1. smart priority --set <packagename> <mychannel> 10
  2. smart priority --set <otherpackage> <otherchannel> -- -20

}}}

Wie Sie sehen, können auch negative Werte verwendet werden. Diese müssen Sie mit '--' übergeben um richtig erkannt zu werden.

Da Prioritäten machtvoll sind, sind sie gleichzeitig gefährlich. Ein Channel mit einer höheren Priorität wird immer die anderen Channels mit niedrigerer Priorität "überschreiben", dies beinhalten ihre lokale Paketdatenbank. Es kann schnell passieren, dass Sie in eine Situtation geraten, in der das System Pakete downgraded, da ein hoch priorisierter Channel veraltet ist. Sie sollten die Pakete des Distributors vor denen der Drittanbieter bevorzugen, wenn Sie ein sichereres und stabileres Linux bevorzugen. Es wird deshalb empfohlen, Packete von Drittanbietern mit einer negativen Priorität zu markieren.

(Hintergrund: Prioritäten werden sehr kompliziert verwaltet. Smart kann auch Pakete mit niedrigerer Priorität den Vorzug geben. Die unterschiede der Priorisiertung z.B. von -1, -5 oder -100 wird ebenfalls Beachtung beigemessen. Die genaue Funktionsweise ist 'noch' nicht öffentlich einsehbar.

Kann ich ein Paket sperren, damit es von Smart nicht angerührt wird?

Natürlich. Einfach einen Rechts-Klick in der GUI auf das Paket und "Lock this version" oder "Lock all versions" auswählen. Alternativ kannst Du auch smart flag --set lock <package> benutzen. Aber beachte bitte, dass Du auch Pakete sperren kannst, die momentan nicht installiert sind. In diesem Fall würde Smart das gesperrte Paket nie installieren.

Wo speichert Smart seine Einstellungen?

Smart speichert die Einstellungen nicht wie üblich in einer Konfigurationsdatei. Trotzdem kann man Smart komplett per Kommandozeile konfigurieren.

Ich habe bereits ein Paket heruntergeladen. Kann ich Smart verwenden um es zu installieren?

Ja:

{{{

  1. smart install foo-1.1-1.i386.rpm

}}}

Smart wird komfortabelerweise auch die nötigen Abhängigkeiten herunterladen.

Der Dateiname muss mit einer bekannten Dateiendung enden.

(Bis jetzt gibt es noch keine Dokumentierte Situation betreffend der Zusammenarbeit mit Slackwarepaketen)

Ich habe eine bestimmte URL für ein Paket. Kann ich Smart verwenden um es zu installieren?

Na klar, zum Beispiel so:

{{{

  1. smart install http://some.url/some/path/foo-1.1-1.i386.rpm

}}}

Wie erzeuge ich eine chroot Umgebung mit Smart?

Du kannst einfach -o rpm-root=/path/to/chroot benutzen und die grundlegenden Pakete installieren die chroot braucht um zu funktionieren.

{{{

  1. smart -o rpm-root=/path/to/chroot install <packages> smart

}}}

Es ist ratsam beim ersten Lauf Smart selbst zu installieren, so dass andere Pakete von der chroot Umgebung heraus installiert werden können.

Die grundlegenden Pakete können von einer Distribution zur Anderen variieren. Hier einige Beispiele:

* Suse 10.0 - coreutils (installs bash, libattr, bzip, libgcc, coreutils, libselinux, cracklib, libstdc++, db, libzio, filesystem, ncurses, glibc, pam, info, readline, libacl, zlib)

Wie kann ich das Löschen der bereits heruntergeladenen Dateien nach der Installation verhindern?

Das kannst Du folgendermaßen machen:
smart -o remove-packages=false <insall|upgrade>

Alternativ kannst Du eine permanente Option setzen:
smart config --set remove-packages=false

Die notwendigen Files findest Du unter:
/var/lib/smart/packages

Probleme

Warum lädt/updatet/speichert Smart den Cache die ganze Zeit? Was ist der Cache überhaupt?

Der Paket Cache wird genutzt, um die Beziehungen und Darstellung der Pakete im Speicher zu beschleunigen.

Immer wenn Smart eine Änderung erkennt, muss der Cache neu erstellt werden. Dafür liest es die nun schon heruntergeladenen Ablageinformationen (zu finden in /var/lib/smart/channels) und die lokale Paket-Datenbank (das heißt rpm oder deb) aus, erfasst erforderliche Informationen, ordnet diese einfach abrufbar und speichert sie in einer neuen /var/lib/smar/cache Datei. Während dieser Operation wird nichts heruntergeladen, nur verfügbare Informationen gelesen.

Dies kann mit {{{smart -o disk-cache=no}}} deaktiviert werden, jedoch wird dann mehr Festplattenaktivität beansprucht um zu berechnen, was getan werden muss.

Als Alternative kann Smart auch im Shellmodus mit {{{smart --shell}}} betrieben werden, wobei der Cache nur einmal geladen und geschrieben wird (Start/Ende), jedoch muss trotzdem der Cache nach jeder Paketoperation teilweise aktualisiert werden

Warum ist Smart auf meinem PC so langsam, aber auf dem meines Freundes viel schneller?

Das ist ein Problem das vor allem auf PCs mit langsamer CPU und wenig Arbeitsspeicher auftritt.

Zuerst einmal benötigt der Cache für die Pakete sehr viel Arbeitsspeicher, vor allem wenn sie bereits sehr viele Pakete installiert haben, oder ihr Channel zu viele Informationen bereitstellt. Die Verwendung von wenigeren Channels und Spiegelservern wird wahrscheinlich ihr System in Verbindung mit Smart beschleunigen.

Zweitens wurde man für Smart Psyco JIT für Python verwenden, dies sollte die Anwendung beschleunigen was interne Benchmarks bestätigen. Aber hier gibt es ein Problem: "Psyco braucht aktuell sehr viel RAM". In einigen besonderen Fällen kann dies Aufgrund der Auslagerungen auf die Festplatte das System ausbremsen. Zum Testen der Einstellungen können Sie temporär {{{ smart -o psyco=0 }}}, oder dauerhaft {{{ smart config --set psyco=0 }}} verwenden.

Ich kann Smart mit STRG+C nicht beenden. Warum?

Es gibt einen weiteren bekannten Fehler mit Psyco: Der kompilierte Maschinencode schließt keine regulären Umfragen von Python ein, d.h., dass eine Tastaturstörung nicht entdeckt werden kann, bevor die Anwendung zum regulären Python-Interpreter zurückkehrt. Ihr Programm kann nicht abgebrochen werden, wenn es in einer von Psyco kompilierten Endlosschleife gefangen ist (das könnte korrigiert werden, wenn Bedarf besteht).

Das heißt, dass Sie Smart nicht mit STRG+C anhalten können, wenn es mit dem Cache oder dem Download/Upload beschäftigt ist. Wenn Sie es wirklich an dieser Stelle anhalten wollen, können Sie dies mit STRG+Z kill - 15. /!\ Es gibt zwar keinen dokumentierten Fall von Fehlern, die danach auftraten; die Benutzung geschieht aber auf eigene Gefahr.

Wenn Sie andererseits Smart im Schritt-Für-Schritt-Modus ausführen, wird STRG+C funktionieren, kurz nachdem eine Anzahl Pakete heruntergeladen oder installiert wurden.

Bekannte Fehler

Smart stürzt mit "Assertion failed" auf Fedora Core 4 ab

In dieser Version wurde ein Fehler aufgedeckt. Die Fehlermeldung sieht so aus:

{{{

  1. smart --gui

python2.4: Objects/stringobject.c:105: PyString_FromString: Assertion `str != ((void *)0)' failed. Aborted }}}

Schuld daran ist eine alte "libexpat"-Version unter {{{/usr/X11R6/lib}}}, die manche Konstanten, welche "pyexpart" brauchen, um das Pythonmodul zu initialisieren, nicht unterstützt, mache XML_ErrorString() zurück zu 0, wenn es nicht stimmt.

Um das Problem zu lösen, editiere {{{/etc/ld.so.conf}}}, füge ganz oben {{{/usr/lib}}} ein und starte {{{ldconfig}}}. Das wird Python helfen eine neuere Version von "libexpat" zu laden, welche funktionieren sollte.

Referenz: tracker issue11

Smart in Distributionen einbinden

Ich möchte ein Paket mit Smart für meine Lieblingsdistribution erzeugen, wie kann ich das tun?

Wenn deine RPM Version 4.3 ist, solltest du ein gepatchtes rpmmodule.so (das Python RPM module) einbinden. Dies ermöglicht die Funktion readHeaderFromFD() für Python Anwendungen. Dieser Patch ist nicht unbedingt notwendig, allerdings würde Smart den User dreimal vor erhöhtem Speicherbedarf warnen. Dies trifft allerdings nur auf Channelformate zu, die große Headerlisten verwenden z.B. Installations-CDs, APT-RPM und URPMI.

Wenn deine RPM Version 4.2 oder älter ist, sollte ein Bugfix der in den Smart Sourcen verfügbar ist {{{contrib/patches/rpm4.2.2-python.patch}}} gepatcht werden. Falls dies der Fall sein sollte, ist eine gepatchte rpmmodule.so im Paket nötig bis die Distribution den Fix aufgenommen hat. Der Patch für RPM 4.2 beinhaltet den readHeaderFromFD() Patch. Alternativ kann das Modul unter {{{contrib/rpmhelper}}} (running {{{./setup.py install}}}) kompiliert und unter`/usr/lib/pythonX.X/site-packages` installiert werden.

Weitere Informationen erhalten sie von Fedora Core RPM package

Was steckt hinter der distro.py Datei?

distro.py ist eine verteilungsunabhängige Python-Datei, die immer durchlaufen wird, wenn Smart läuft. Seit Smart etliche, grundlegende Packungsmethoden unterstützt, solltest du wenigstens deine ursprünglich distributionseigene Packungsmethode so konfiguriert haben, wie es später beim ersten Mal läuft und vielleicht auch deiner Distributions-Haupt- und Updatepakete. Wenn du nicht rpm oder rpm2cpio hast, hol dir ein distro.py Beispieldatei hier.

Die distro.py-Datei kann viel machen. Zum Beispiel könntest du iface.ask*() benutzen, um eine von User interaktive Eingabe zu erhalten, aber versuche es so einfach wie möglich zu halten.

Jedes Paket- und Repository-Format hat verschiede Optionen. Benutze den Befehl {{{smart channel --help}}}, um dir bekannte Formate auflisten zu lassen, dann benutze {{{smart channel --help-type <channel>}}}, um die verfügbaren Optionen anzeigen zu lassen.

Wie wandle ich eine sources.list von APT in eine Smart Channel Info um?

Du kannst ein Skript namens aptosmart probieren, welches recht einfach zu benutzen ist. (Dieses Skript wurde von Dritten beigesteuert und gehört nicht zur Smart Entwicklung).

Hier gibt es ein weiteres von Pascal Blesser programmiertes Skript.