Wir packen Softwarepakete zusammen um eine einfache Installation und Deinstallation von Software unter Linux zu ermöglichen. Dabei wollen wir vor allem Software einpacken, die in den Distributionen gar nicht oder nur in einer älteren Version vorhanden ist.
Ich habe gehört, mit Binärpaketen lässt sich jede Menge Unfug treiben. Ist das nicht zu unsicher, eure Pakete zu installieren?
Bevor du ein Paket installierst, kannst du es erst mal auf Herz und Nieren überprüfen, damit dir nichts untergeschoben wird.
# rpm -qpil --changelog --scripts paketname.rpm | less
Jetzt wird dir angezeigt, wer das Paket gebaut hat, was sich seit dem letzten Release getan hat, welche Dateien auf deinem System installiert werden und welche Skripte vor oder nach der Installation ausgeführt werden.
Zusätzlich dazu sind alle Pakete signiert, so dass du überprüfen kannst, von wem das Paket gebaut wurde, ob es von irgendjemandem anders manipuliert wurde und ob es fehlerfrei heruntergeladen wurde.
Dies kannst du über verschiedene Wege überprüfen: du solltest GnuPG (ab Version 1.x) oder PGP (ab Version 5.x) installiert haben. (PGP Version 2.x funktioniert nicht!) GNU Privacy Guard Homepage: http://www.gnupg.org/ Pretty Good Privacy Homepage: http://www.pgpi.net/
Als erstes brauchst du die öffentlichen Schlüssel der Packager: Im Falle von GnuPG:
$ lynx --dump ftp://ftp.links2linux.de/pub/packman/public-keys.asc | gpg --import
Oder die Datei ftp://ftp.links2linux.de/pub/packman/public-keys.asc herunterladen und folgendermaßen importieren:
$ gpg --import public-keys.asc
Im Falle von PGP:
$ lynx --dump ftp://ftp.links2linux.de/pub/packman/public-keys.asc | pgp -fka
Oder die Datei ftp://ftp.links2linux.de/pub/packman/public-keys.asc herunterladen und folgendermaßen importieren:
$ pgp -ka public-keys.asc
Mit RPM und GNU Privacy Guard:
Zuerst musst du noch die Packman-Schlüssel in die RPM-Datenbank importieren:
$ rpm --import public-keys.asc
Dann musst du als User die Datei .rpmmacros mit folgendem Inhalt anlegen:
$ vi ~/.rpmmacros %_signature gpg %_gpg_name Waldemar Brodkorb (Linux rulez!) <brodkorb@onlinehome.de> %_gpg_path /home/waldemar/.gnupg/ %_gpg_bin /usr/bin/gpg
Natürlich angepasst an deine Daten.
Nun kannst du alle heruntergeladenen Pakete vor dem Installieren prüfen:
$ rpm -vK paketname.rpm
Mit RPM und Pretty Good Privacy:
Zuerst musst du noch die Packman-Schlüssel in die RPM-Datenbank importieren:
$ rpm --import public-keys.asc
Dann musst du als User die Datei .rpmmacros mit folgendem Inhalt anlegen:
$ vi ~/.rpmmacros %_signature pgp %_pgp_name Waldemar Brodkorb (Linux rulez!) <brodkorb@onlinehome.de> %_pgp_path /home/waldemar/.pgp/ %_pgp_bin /usr/bin/pgp
Natürlich angepasst an deine Daten.
Nun kannst du alle heruntergeladenen Pakete vor dem Installieren prüfen:
$ rpm -vK paketname.rpm
Ich habe unter SuSE 10.0 Probleme mit dem Key-Import über rpm –import gehabt. Apt wollte dann die heruntergeladenen Pakete wegen fehlgeschlagener Signatur-Prüfung nicht installieren.
$ apt-get upgrade ... Checking GPG signatures... Unknown signature /var/cache/apt/archives/alsa_1.0.13-0.pm.0_i586.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS: GPG#5277a2fa) ... E: Error(s) while checking package signatures: 0 unsigned package(s) 9 package(s) with unknown signatures 0 package(s) with illegal/corrupted signatures E: Handler silently failed
Ein Import der Public-Keys wie oben beschrieben hat nicht funktioniert:
$ rpm -qa gpg-pubkey* > ~/gpg-pubkey1 $ rpm --import ftp://ftp.links2linux.de/pub/packman/public-keys.asc $ rpm -qa gpg-pubkey* > ~/gpg-pubkey2 $ diff -u ~/gpg-pubkey? --- /root/gpg-pubkey1 2006-10-20 17:44:57.000000000 +0200 +++ /root/gpg-pubkey2 2006-10-20 17:45:44.000000000 +0200 @@ -1,5 +1,6 @@ gpg-pubkey-15c17deb-3f9e80c9 gpg-pubkey-3d25d3d9-36e12d04 gpg-pubkey-9c800aca-40d8063e +gpg-pubkey-ddaf6454-3777ac55 gpg-pubkey-0dfb3188-41ed929b gpg-pubkey-ddaf6454-3777ac55
Anscheinend hat RPM Probleme mit dem Import mehrerer Schlüssel aus einer Datei und es wird nur der erste Public-Key importiert. Daher habe ich das Paket rpmkey-packman installiert, welches alle Autoren-Schlüssel als einzelne Dateien beinhaltet:
$ rpm -i ftp://ftp.gwdg.de/pub/linux/suse/apt/SuSE/10.0-i386/RPMS.rpmkeys/rpmkey-packman-0.3.2-0.pm.1.noarch.rpm warning: /var/tmp/rpm-xfer.G9W6RC: V3 DSA signature: NOKEY, key ID 5277a2fa $ rpm -ql rpmkey-packman /etc/yum.repos.d/packman.repo /usr/lib/rpm/gnupg/packman-andsch.asc /usr/lib/rpm/gnupg/packman-andsch_alt.asc /usr/lib/rpm/gnupg/packman-bwalle.asc /usr/lib/rpm/gnupg/packman-chrhae.asc /usr/lib/rpm/gnupg/packman-detrei.asc /usr/lib/rpm/gnupg/packman-henmuh.asc /usr/lib/rpm/gnupg/packman-henvol.asc /usr/lib/rpm/gnupg/packman-henvol_alt.asc /usr/lib/rpm/gnupg/packman-hergra.asc /usr/lib/rpm/gnupg/packman-hergra_alt.asc /usr/lib/rpm/gnupg/packman-konmal.asc /usr/lib/rpm/gnupg/packman-leofre.asc /usr/lib/rpm/gnupg/packman-leofre_alt.asc /usr/lib/rpm/gnupg/packman-leofre_alt2.asc /usr/lib/rpm/gnupg/packman-mantre.asc /usr/lib/rpm/gnupg/packman-marhue.asc /usr/lib/rpm/gnupg/packman-marsch.asc /usr/lib/rpm/gnupg/packman-oliben.asc /usr/lib/rpm/gnupg/packman-pasble.asc /usr/lib/rpm/gnupg/packman-pasble_alt.asc /usr/lib/rpm/gnupg/packman-queden.asc /usr/lib/rpm/gnupg/packman-railay.asc /usr/lib/rpm/gnupg/packman-railay_alt.asc /usr/lib/rpm/gnupg/packman-ralcor.asc /usr/lib/rpm/gnupg/packman-robrak.asc /usr/lib/rpm/gnupg/packman-thomue.asc /usr/lib/rpm/gnupg/packman-tongra.asc
Das reicht aber noch nicht aus, die asc-Dateien müssen noch importiert werden:
$ rpm -ql rpmkey-packman | grep asc | xargs rpm --import
Jetzt kennt RPM auch die anderen Autoren:
$ rpm -qa gpg-pubkey* > ~/gpg-pubkey3 $ diff -u ~/gpg-pubkey{1,3} --- /root/gpg-pubkey1 2006-10-20 17:44:57.000000000 +0200 +++ /root/gpg-pubkey3 2006-10-20 17:55:29.000000000 +0200 @@ -1,5 +1,33 @@ +gpg-pubkey-5f6842a4-40b09936 +gpg-pubkey-f9558872-430f586f +gpg-pubkey-8ff214b4-3afa5d46 gpg-pubkey-15c17deb-3f9e80c9 +gpg-pubkey-3ab2ce5e-41a4c011 +gpg-pubkey-f2c6a54e-43d171bc +gpg-pubkey-27db6f5b-4140d446 gpg-pubkey-3d25d3d9-36e12d04 +gpg-pubkey-f33e3fc6-443ed5fc +gpg-pubkey-7fdcef8b-3da540d4 +gpg-pubkey-1be4d89e-434835df +gpg-pubkey-4efd697e-4453afce +gpg-pubkey-a16ea024-4374cbc5 +gpg-pubkey-807235a8-3e26a1bc +gpg-pubkey-95702b3b-3c6a5ee4 gpg-pubkey-9c800aca-40d8063e +gpg-pubkey-ddaf6454-3777ac55 +gpg-pubkey-ddaf6454-3a577225 +gpg-pubkey-03775059-3f045e14 +gpg-pubkey-08a568c6-3be86b1b +gpg-pubkey-5277a2fa-40bf6e67 +gpg-pubkey-58857177-3d946b70 +gpg-pubkey-cd3140cd-3d468b40 +gpg-pubkey-1dfa8f0c-41540ae2 gpg-pubkey-0dfb3188-41ed929b gpg-pubkey-ddaf6454-3777ac55 +gpg-pubkey-cddd4d64-450c55e0 +gpg-pubkey-4efd697e-4453aa9e +gpg-pubkey-58857177-3fbba87b +gpg-pubkey-f4500075-43fde72f +gpg-pubkey-dcb8fafe-3eca9611 +gpg-pubkey-35a64134-3a57e000 +gpg-pubkey-42d5f51f-2f05e27b
Lösung für dieses Problem: es muss apt install rpmkey-* lauten. Nur das wrapper-Skript apt importiert die keys auch wirklich in die RPM-Datenbank !
Manche Projekte im Netz bauen eigene RPMs für SuSE, im Zweifelsfall also zuerst auf der Homepage des Projektes nachschauen, sonst:
Dazu gibt es drei Möglichkeiten: über YaST, zypper, manuell oder über apt4rpm.
Über YaST geht es am einfachsten. Dazu gehst du in YaST auf “Installationsquelle Hinzufügen” und trägst als Server einen aus der Datei http://packman.links2linux.de/MIRRORS.html in einem Browser als URL ein. Dort hangelst Du Dich dann weiter durch: suse, <Version>. Den Server der URL kopierst Du dann als Server in den Installationsmanger (aber nur z.B. packman.jacobs-university.de ohne das http:// und ohne den / am Ende). Den restlichen Pfad der URL kopierst Du dann in das Feld Verzeichnis (z.B./suse/10.3 - oder entsprechend deiner openSUSE-Version). Das dann bestätigen und schon hast Du eine zusätzliche Installationsquelle. Dann auf “Software Installieren” und schon kannst Du Packman-RPMs auswählen und installieren. Die Abhängigkeiten zwischen Paketen werden automatisch aufgelöst.
Mit zypper lässt sich die Packman repsitory sehr einfach hinzufügen. Ähnlich wie bei YaST wird die URL benötigt.
Diese lautet für SuSE 11.1 <b>z.B.</b>
http://packman.mirrors.skynet.be/pub/packman/suse/11.1/packman.repo
<b>Für andere Versionen sind entsprechend andere URLs zu nutzen!
Im weiteren wird immer SuSE 11.1 als Beispiel genutzt!</b>
Diese wird als root hinzugefügt
zypper addrepo 'http://packman.mirrors.skynet.be/pub/packman/suse/11.1/packman.repo'
Nun erscheint einer Ausgabe ähnlich dieser
Adding repository 'Packman repository (openSUSE_11.1)' [[done]] Repository 'Packman repository (openSUSE_11.1)' successfully added Enabled: Yes Autorefresh: No URI: http:<nowiki>//</nowiki>packman.mirrors.skynet.be/pub/packman/suse/11.1/
Der Vollständigkeit halber sollten nun die Repositories Informationen abgerufen werden
zypper refresh
Während dessen wird mit hoher Wahrscheinlichkeit eine Abfrage erfolgen ob der neuen (packman) Repository vertraut werden kann. Dies kann mit a “trust always” bejaht werden.
New repository or package signing key received: Key ID: 45A1D0671ABD1AFB Key Name: PackMan Project (signing key) <packman@links2linux.de> Key Fingerprint: F8875B880D518B6B8C530D1345A1D0671ABD1AFB Repository: Packman repository (openSUSE_11.1) Do you want to reject the key, trust temporarily, or trust always? [[R/t/a/?]]: a Retrieving repository 'Packman repository (openSUSE_11.1)' metadata [[done]] Building repository 'Packman repository (openSUSE_11.1)' cache [[done]] Repository 'openSUSE-11.1-OSS' is up to date. Repository 'openSUSE-11.1-Updates' is up to date. Repository 'openSUSE-11.1-non-OSS' is up to date. All repositories have been refreshed.
Nun wird zypper zukünftig auch die Packman Repository nutzen.
du musst dir die Pakete mit deinem WWW-Browser oder mit einem FTP-Client von dieser Seite downloaden.
Bei größeren Dateien empfiehlt sich ein Downloadmanger, wie beispielsweise wget. Zur Verwendung einfach mit der rechten Mausklick auf den Link, »Verknüpfungsadresse kopieren« wählen und in der Konsole mit folgendem Befehl die Datei herunterladen:
$ wget -nH -nd -c "Adresse"
Dann kannst du das Paket als root in dein System installieren.
# rpm -Uvh paketname1.rpm paketname2.rpm ...
Bitte achte darauf, dass du alle abhängige Pakete heruntergeladen hast und diese zusammen (d.h. mit einem rpm -Uhv .. -Befehl) installierst.
Falls du apt4rpm http://linux01.gwdg.de/apt4rpm/ verwendest, erweitere bitte in /etc/apt/sources.list folgende Zeilen:
rpm ftp://ftp.gwdg.de/pub/linux/suse/apt - hier trägst du noch packman packman-i686 ein. rpm-src ftp://ftp.gwdg.de/pub/linux/suse/apt - hier trägst du auch packman packman-i686 ein.
Nach dem nächsten apt-get update stehen dir die Packman-RPMs zur Verfügung!
Das hängt wieder davon ab, ob du pakete über YaST, manuell oder über apt4rpm installierst.
Zur Aktualisierung der Pakete muss unter “Installationsquelle Hinzufügen” der Packman-Eintrag ausgewählt und mit “Bearbeiten” → “Status aktualisieren…” die Paketliste auf den neusten Stand gebracht werden. Anschließend kann über “Software installieren oder löschen” und Filter “Zusammenfassung” eine Übersicht aller Pakete angezeigt werden, die nicht direkt von SuSE stammen, denn diese Pakete werden in YaST automatisch auf den Status “Geschützt” gesetzt. Geschützte Pakete werden nicht automatisch (z.B. durch YOU) überschrieben, weshalb wir auch leider keine automatische Aktualisierung per YOU anbieten können. An der Schriftfarbe der Paketnamen lässt sich der Status der Pakete schnell erkennen:
Zur manuellen Aktualisierung gehst du wie oben beschrieben vor; manuelle Installation und Aktualisierung unterscheiden sich nicht.
Wenn du packman-Quellen wie oben beschrieben konfiguriert hast, aktualisiert du Packman-Pakete wie sonst mit apt-get upgrade.
Dazu gibt es mehrere Möglichkeiten:
Entweder du startest YaST, findest dort den(die) Paket(e) und löschst diese(n), oder einfach als root:
# rpm -e paketname
Fällt dir der exakte Name des Paketes nicht mehr ein? Kein Problem:
# rpm -qa |grep -i suchbegriff
Oder du kennst eine Datei aus dem Paket:
# rpm -qf /pfad/zur/datei/dateiname
Schicke einfach eine e-Mail mit der genauen Fehlerbeschreibung an die packman-Liste: packman@links2linux.de. Du weißt nicht genau welche Informationen wir über dein System benötigen? Gib mindestens deine SUSE-Version und den Download-Pfad zum Paket an.
Doch, aber die heißen jetzt anders, da SuSE für 10.3 die SuSE-library-packaging-Policy geändert hat http://en.opensuse.org/Shared_Library_Packaging_Policy und wir das jetzt schon umsetzen. Ein wichtiger Grund ist, daß sich dadurch die Anzahl der Abhängigkeiten reduziert.
Ein Beispiel: Das Paket ktoblzcheck wird künftig zerlegt in
Da von allen Paketen auch Source-RPMs verfügbar sind, kannst du dir das Paket auf deinem System neu zusammenbauen.
# rpmbuild --rebuild paketname.src.rpm
Wenn du Glück hast und alle benötigten Libraries und Include-Files installiert sind und gefunden werden, hast du am Schluss ein fertiges RPM, das du sogleich installieren kannst:
# rpm -Uvh /usr/src/packages/RPMS/i386/paketname.rpm
Beachte aber das manche Software eventuell auf älteren Distributionen nicht lauffähig ist.
Nochmal, da von allen Paketen auch Source-RPMs verfügbar sind, kannst du dir das Paket auf deinem System neu zusammenbauen. Source-RPM installieren:
# rpm -i paketname.src.rpm
Die SPEC-Files findest du unter /usr/src/packages/SPECS/. Es enthält alle Informationen, die der Paketmanager benötigt, um aus den Sourcen ein Paket zu bauen. Unter anderem sind dies die Schritte zur Installation, eine Liste aller in dem Paket enthaltenen Dateien und die Headerinfos.
Erst das Spec-File editieren und dann mit
# rpmbuild -bb paketname.spec
ein RPM erzeugen, welches du dann installieren kannst.
Eine Mail an den Packager wäre auch noch schön, damit er weiß was eventuell fehlt oder falsch konfiguriert ist.
Ganz einfach lass dir erstmal alle Dateien die im RPM enhalten sind auflisten:
$ rpm2cpio paket.rpm | cpio --list
Einzelne Dateien kannst du dann folgendermaßen extrahieren:
$ rpm2cpio paket.rpm | cpio --extract dateiname
Paketänderungen finden sich im Changelog des Paketes, das mit folgendem Befehl angezeigt werden kann:
# rpm -qp --changelog Paketname.rpm
Meist sind aber die Änderungen am Programm selber, die vom Autor durchgeführt wurden, interessanter. Diese werden meist in einer Datei CHANGES oder ChangeLog festgehalten, die sich bei fertig installiertem Paket unter /usr/share/doc/packages/<Paketname>/ befindet.
Welche Paket-Dokumentation es sonst noch gibt, erfährst du mit:
# rpm -qd Paketname.rpm
Darüber hinaus sind die Änderungen meist auf der Homepage des Programmes im Internet zu finden. Normalerweise wird die URL zu der Homepage in der PackMan-Übersicht zu den Paketen angegeben. Sollte sie hier nicht zu finden sein oder ist auf dieser Seite kein ChangeLog zu finden, so ist es eine gute Idee, über Freshmeat.NET die Homepage oder gleich den direkten Link zum ChangeLog ausfindig zu machen.
Fast jedes Programm wird über Freshmeat registiert!
http://www.rpm.org/max-rpm/ (sehr empfehlenswert zu lesen für jeden, der RPMs baut)
http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/RPM-HOWTO.html
$ man rpm
Wenn dein Paket mit rpmbuild gebaut ist und nicht etwa mit checkinstall, wende dich dann an die Mailingliste von Packman: packman@links2linux.de. Grundsätzlich stellen wir bei uns keine “fremden” Pakete ein. Alle RPMs die du bei uns findest sind digital signiert. Außerdem versuchen wir dass unsere RPMs gewissen Qualitätsansprüchen genügen.
Wenn jemand von Packman-Team dein RPM übernehmen wird, wird er das RPM neu bauen und zum Download bereitstellen. Oder du entscheidest dich für eine dauerhafte Beteiligung bei Packman, dann kannst du Mitglied werden und dein RPM selbst (weiter)pflegen. Lies aber bitte vorher die nächste Antwort!
Ja, melde dich bei uns am Besten im freenode IRC unter #packman und wir klären mit dir alles nötige ab.
Eine dauerhafte Beteiligung bei Packman ist mit gewissen Zeitaufwänden verbunden. Die einmal eingestellten Pakete werden in der Regel weitergepflegt, sobald es eine Version der Software gibt die aktueller ist als SUSE zur Verfügung stellt. Du musst auch ein gewisses Know-How im Bereich RPM-Bau mitbringen. Wir haben einige Skripte die die Pflege und die Aktualisierung von RPMs erleichtern, aber diese können dir die richtige Arbeit nicht abnehmen. Es gibt auch einige Richtlinien die bei der Erstellung von RPMs zu beachten sind.
Du musst bei dir auch mit einem erhöhten Internet-Traffic rechnen, da du die aktuelle Software-Versionen herunterladen musst, dein SUSE-System auf dem aktuellen Stand halten und deine Pakete auf Packman-FTP hochladen musst.
Ideal wäre, wenn du Pakete jeweils für die aktuelle SUSE-Version und für die eine davor bauen könntest. Das bedeutet aber auch doppelten Pflege-Aufwand für dein System!