apt4rpm Server- und Clientkonfiguration

Disclaimer

Dieses Howto erhebt keinerlei Anspruch auf Vollständigkeit, Richtigkeit sowie Korrektheit der Angaben und gibt keine Garantie auf die Funktionsfähigkeit. Es wurde aus eigenen Erfahrungen beim Einrichten der Software geschrieben. Für Datenverlust oder andere Schäden, die durch Gebrauch dieses Howtos auftreten, ist jeder selbst verantwortlich und es wird hierfür keinerlei Haftung übernommen.
Alle verwendeten Markennamen sind eingetragene Warenzeichen der jeweiligen Inhaber.

Einleitung

Bei der Installation von Software die als rpm-Paket vorliegt kommt es immer wieder zu Problemen bei der Auflösung von Paketabhängigkeiten die nicht immer automatisch aufgelöst werden können. Erleichterung schaffen hier Erweiterungen wie up2date oder yum. Sie benutzen rpm und die zugehörige Datenbank um die Software zu verwalten. Die ideale Paketverwaltung stellt aus meiner Sicht jedoch apt mit dem darunterliegenden dpkg-System von Debian dar. Es sehr fein konfigurierbar (z. B. die Prioritätensteuerrung bei der Installation von gleicher Software je nach gewünschter Versionsnummer aus verschiedenen Quellen mit /etc/apt/preferences). Um diesen Funktionsumfang auf rpm abzubilden, gibt es eine brasilianische Portierung der apt-Programme auf die rpm-Datenbasis. Die Verwaltung der Pakete im System erfolgt weiterhin mit rpm und nicht wie unter Debian mit dpkg. Es ist daher nicht der volle Funktionumfang von dpkg nutzbar. Funktionen wie z. B. hold von Paketen können jedoch über die apt.conf nachgebildet werden.
Hier ist nun der Aufbau meiner apt4rpm-Lösung dokumentiert. Ich habe hierfür ein Whiteboxlinux (RHEL 3.0) benutzt. Zur Verfügung gestellt werden hier die Originalpakete, sowie die Updates für die x86-Prozessortypen Athlon, i686 und i386. Unter misc sind i386-Pakete gesammelt, die nicht zum Lieferumfang von Whiteboxlinux gehören, aber von mir eingesetzt werden sollen. Eine gute Quelle ist hier das Archiv von Dag Wieers.

Server installieren

Als erstes muss ein apt4rpm-Server eingerichtet werden. Dazu ist auf einem Rechner mit einem funktionierenden Webserver (bei mir Apache 2) ein Verzeichnis zu veröffentlichen. Die entprechende Konfiguration für das von mir gewählte Unterverzeichnis apt sieht folgendermaßen aus:

   (/etc/httpd/conf.d/apt.conf)
   #
   # APT-Repositority
   #
   Alias /apt /home/apt/wb30
   <Directory /apt>
      Options Indexes FollowSymLinks
         <FilesMatch "\.(rpm)$">
              ForceType application/octet-stream
         </FilesMatch>
   </Directory>
	

Die rpm-Dateien sollten vom Webserver als octet-stream ausgeliefert werden. In dem Verzeichnis /home/apt/wb30 wird dann die folgende Struktur angelegt:

    athlon --\
             |-- base
             |-- RPMS.stable -> ../i386/RPMS.stable
             |-- RPMS.updates

    i386 ----\
	     |-- base
             |-- RPMS.stable
             |-- RPMS.updates

    i686 ----\
    	     |-- base
             |-- RPMS.stable -> ../i386/RPMS.stable
             |-- RPMS.updates

    misc ----\
    	     |-- base
             |-- RPMS.stable
             |-- SRPMS.stable
        

In das Verzeichnis i386/RPMS.stable kommt der Inhalt der Originalcd's. Die Verzeichnisse athlon/RPMS.stable und i686/RPMS.stable sind nur Links auf i386/RPMS.stable (option FollowSymLinks). Die Verzeichnisse RPMS.updates enthalten die selbstkompilierten Updates für die entsprechende Prozessorarchitektur und unter base sind die Informationen zu den vorhandenen Pakten abgelegt.

Die Befehle:

    genbasedir --progress --flat --bz2only /home/apt/wb30/athlon 
    genbasedir --progress --flat --bz2only /home/apt/wb30/i386
    genbasedir --progress --flat --bz2only /home/apt/wb30/i686 
    genbasedir --progress --flat --bz2only /home/apt/wb30/misc
        

erzeugen in dem jeweiligen base-Unterverzeichnis die Informationen zu den Paketen und deren Abhängigkeiten.

Wenn neue Updates oder zusätzliche Programme hinzukommen, so sind diese jeweils nur in die entsprechenden Verzeichnisse zu kopieren und anschließend, die genbasedir-Befehle auszuführen. Alte Versionen der Programmpakete können in den Verzeichnissen verbleiben und ermöglichen somit bei Bedarf auch ein downgrade.

Auf dem Server sind zum Installationszeitpunkt neben apt-0.5.15cnc6-3.1.el3.dag.i386.rpm und apt4rpm-0.69.0-0.src.rpm ev. zusätzlich die folgenden Softwarepakete erforderlich:

    perl-XML-LibXML-1.56-0.rhel3.dag.noarch.rpm
    perl-XML-LibXML-Common-0.13-1.dag.rhel3.noarch.rpm
    perl-XML-NamespaceSupport-1.08-1.dag.rhel3.noarch.rpm
    perl-XML-SAX-0.12-3.dag.rhel3.noarch.rpm
        

Bei der Installation des Binärpaketes von apt4rpm wird das Paket apt-server vermisst. Diese enthält u. a. die Pakete:

    - genbasedir
    - genpkglist
    - gensrclist
        

Diese sind jedoch auch im mit zum installierenden Paket apt-0.5.15cnc6-3.1.el3.dag.i386.rpm enthalten.
Um die bestehenden Paketabhängigkeiten bei apt4rpm zu lösen habe ich zunächst das Quellpaket apt4rpm-0.69.0-0.src.rpm installiert und anschließend die apt4rpm.spec durch entfernen der entsprechenden Zeilen wie folgt angepasst:

    -%if "%{_vendor}" == "suse"
    -Group:         System/Packages
    -Requires:      apt-server
    -%define pkgdocdir      %{_defaultdocdir}/%{name}
    -%else
     Group:         System Environment/Base
     %define pkgdocdir      %{_defaultdocdir}/%{name}-%{version}
    -%endif
	

Der Befehl rpmbuild --bb apt4rpm.spec im SPEC-Verzeichnis erzeugt dann das zu installierende Paket apt4rpm.

Die Clientkonfiguration

Zuerst muss das Paket apt-0.5.15cnc6-4.2.el4.rf.i386.rpm oder neuer installiert werden. Es stellt die Programme für den Zugriff auf das apt-Repository bereit. Ein recht guter grafischer Client für die Paketverwaltung ist synaptic-0.55.1-1.1.el3.rf.i386.rpm. Im Paket apt sind mehrere Konfigurationsdateien enthalten. Wichtig ist die /etc/apt/apt.conf sowie die Dateien unter /etc/apt/sources.list.d/, in denen die Softwarerepositorities definiert werden.
Die Konfiguration /etc/apt/sources.list.d/<meine Server IP oder FQDN>.list auf den Clients (und natürlich auch auf dem Server) sieht dann für den eigenen apt-Server so aus:

    # Pakete fuer die vorhanden Architektur
    # rpm http://<meine Server IP oder FQDN>/apt athlon stable updates
    # rpm http://<meine Server IP oder FQDN>/apt i386 stable updates
    rpm http://<meine Server IP oder FQDN>/apt i686 stable updates

    # Sonstiges
    rpm http://<meine Server IP oder FQDN>/apt misc stable
    rpm-src http://<meine Server IP oder FQDN>/apt misc stable
	

Die anderen .list-Dateien in dem Verzeichnis zeigen auf andere Repositorities und können bei Bedarf mit genutzt werden. Ich stelle die von mir benötigten Pakete z. B. von Dag Wieers in dem lokalen misc-Verzeichnis bereit.
Eine weitere wichtige Datei ist die /etc/apt/apt.conf. Hier werden z. B. die ggfs. notwendigen Proxyserver angebeben, wenn der Internetzugang über ein solchen läuft. Die unter dkpg vorhandene Möglichkeit ein Paket mit dem Status hold von der regelmäßen Aktualisierung auszunehmen, ist, wie oben erwähnt, mir unter rpm so nicht bekannt. Man kann solche Pakete jedoch über reguläre Ausdrücke im Bereich hold der apt.conf von der Aktualiserung ausnehmen (z. B. Samba auf einem Produktionsserver). Das Update kann dann zu gegebener Zeit mit apt-get install <Paketname> durchgeführt werden. Eine apt.conf-Bespieldatei könnte so aussehen:

    APT {
        Clean-Installed "false";
        Get {
                Assume-Yes "false";
                Download-Only "false";
                Show-Upgraded "true";
                Fix-Broken "false";
                Ignore-Missing "false";
                Compile "false";
        };
    };

    Acquire {
            Retries "0";
            HTTP {
                    Proxy ""; // http://user:pass@host:port/
            };
    };

    RPM {
            Ignore { };
     // Pakete halten und nur ueber 'apt-get intall <paketname> aktualisieren
            Hold { "^samba"; };
            Options { "^kernel-"; };
            Install-Options "";
            Erase-Options "";
    //      Pre-Install-Pkgs { "/usr/bin/apt-sigchecker"; };
            Source {
                    Build-Command "rpmbuild --rebuild";
            };
            Allow-Duplicated {
    // mehrere Kernelversionen zulassen
                    "^kernel$";
                    "^kernel-";
                    "^gpg-pubkey$";
                };
    };
	

Benutzung der apt-Programme

Mit der o. g. Clientinstallation stehen nun die folgenden Programme zur Verfügung:

Nach Programmen suchen kann man z. B. mit apt-cache search samba und erhält ein der folgenden Ausgabe ähnliches Ergebnis:

    amanda - A network-capable tape backup solution.
    gnome-vfs2-extras - Extra modules for version 2 of the GNOME virtual file-system
    kdebase - K Desktop Environment - core files
    redhat-config-samba - Samba server configuration tool
    samba - The Samba SMB server.
    samba-client - Samba (SMB) client programs.
    samba-common - Files used by both Samba servers and clients.
    samba-swat - The Samba SMB server configuration program.
    gosa - Web Based LDAP Administration Program
    linneighborhood - SMB network neighborhood
    mplayer - MPlayer, the Movie Player for Linux
    samba3 - An SMB/CIFS file server
    samba3-cifsmount - samba3-cifsmount
    samba3-client - Samba Client Utilities
    samba3-doc - Samba Documentation
    samba3-python - The Samba python-Modules
    samba3-utils - debug tools for Samba
    samba3-vscan - Plugins for Samba to use different virus scan engines
    samba3-winbind - winbind-daemon and tool
	

Die Installationsprioritäten für ein Paket (hier samba) liefert apt-cache policy samba.

Die eigentliche Installation und Deinstallation wird mit Programm apt-get durchgeführt. Ein apt-get --help bzw. man apt-get liefert die weitergehenden Informationen. Seine Systeme aktuell halten kann man nun über ein apt-get update << apt-get -u upgrade. Gelegentlich sollte man noch ein apt-get clean ausführen, um die lokale Platte sauber zu halten. Die Pakete hat man ja noch auf dem Server. Natürlich kann man den Befehl auch gleich mit << oben anhängen.

Copyright and License

This document, apt4rpm Server- und Clientkonfiguration, is copyrighted (c) by Tom Geißer,.
Letzte Änderung: 09.02.2006
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is available at http://www.gnu.org/copyleft/fdl.html.