linux:paketmanager

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
linux:paketmanager [2018/07/12 18:55] stlinux:paketmanager [2022/06/22 09:15] (aktuell) st
Zeile 1: Zeile 1:
 +====== Software installieren über Paketmanager ======
 +Der Paketmanager verwaltet die installierten Softwarepakete (=Software in einem Paketformat) und kümmert sich auch um die Aktualisierung. [[debian:Debian]] und darauf basierende [[linux:distributionen und live-cds|Distributionen]] verwenden Software-pakete im deb-Format, andere [[linux:distributionen und live-cds|Distributionen]] verwenden rpm-Pakete.
 +
 +===== Paketmanageroberflächen =====
 +
 +  * **apt** (Debian, (K)ubuntu): ''ap-get install PAKETNAME'' (CLI, deb): auf [[ubuntu:Ubuntu]], [[debian:Debian]]
 +  * **aptitude** (CLI oder grafisch, deb): Unter Debian GNU/Linux ist aptitude inzwischen die bevorzugte Installationsmethode, da es bei manchen Paketen die Abhänggkeiten besser auflöst und beim Entfernen sämtliche Abhängigkeiten berücksichtigt.
 +  * **emerge** und tools aus [[http://www.gentoo.org/doc/de/gentoolkit.xml|gentoolkit]] (equery, euse, revdep-rebuild, eread) (bei [[linux:Gentoo]])
 +  * **synaptic** / adept (grafisch, deb): auf [[ubuntu:Ubuntu]]
 +  * URPMI (CLI, rpm)
 +  * **yast** (grafisch) oder ''yast -i PAKETNAME'' auf [[Suse:Suse]]
 +  * **yum** (Suse, Redhat, Fedora, ...): ''yum install PAKETNAME'' (CLI, rpm)
 +  * **zypper** (CLI, rpm): vorrangig auf OpenSuse benutzt
 +
 +CLI = Command Line => Komandozeile
 +
 +andere: [[http://www.rrze.uni-erlangen.de/dienste/arbeiten-rechnen/linux/sicherheit/smartpm.shtml|SmartPM (Beta-software)]]
 +
 +
 +===== weitere Paketformate =====
 +
 +Neben den o.g. Standardpaketmanagern addressieren alternative Herangehensweisen das Problem bei Distributionen nur bestimmte Versionen von Libraries zur Verfügung zu haben. Es kann von Vorteil sein alle benötigten binaries mitzubringen in einer Art Image.
 +
 +  * Programmiersprachenabhängige Installer
 +    * pip (bei Python)
 +    * cpan (Perl)
 +    * ...
 +  * [[wpde>AppImage]] ausführen: ./exampleName.AppImage
 +  * [[wpde>Flatpak]] https://flatpak.org/setup/Ubuntu/
 +  * [[wpde>Snappy]] (Paketverwaltung)
 +  * [[https://wiki.ubuntuusers.de/snap/|Snap]] (mount via loop-device, "confinement" via Apparmor)
 +
 +===== Laufzeitumgebungen =====
 +
 +Zusätzlich zu den alternativen Paketformaten gibt es die Idee auch Programme unabhängig von der Distribution einzusetzen, einerseits als Container andererseits als microservices. Dazu werd auch interne Netzwerke nötig.
 +Hier eine Auswahl von Laufzeitumgebungen:
 +
 +  * Applikationsserver (tomcat, wildfly, ...)
 +  * Containerlaufzeitumgebungen:
 +    * docker (Installation i.d.R. über compose-files und container-registry)
 +    * kubernetes (Installation über helm-charts und container-registry)
 +    * LXC
 +    * ...
 +
 +
 +===== Syntaxvergleich: Debian (dpkg, apt, aptitude) , Redhat (rpm) und Gentoo =====
 +
 +tasksel - Kategorienkonfiguration ([[server:Webserver]], [[server:MailServer]], Desktop, ...)
 +
 +:!: [[http://www.stefanux.de/wiki/doku.php/linux/paketmanager?do=export_xhtml|Besser lesbar in der HTML-Ansicht]].
 +
 +^ Aktion ^ [[debian:Debian]] (dpkg) ^ [[debian:Debian]] (apt-get) ^ [[debian:Debian]] (aptitude) ^  Redhat/[[linux:CentOS]](rpm) ^ [[linux:Gentoo]] (portage + equery, emerge, revdep-rebuild aus dem gentoolkit ((emerge gentoolkit)) ) ^ Zypper (OpenSuse) ^ 
 +^ Informationen ^^^^^^^
 +| Distributionsversionsnummer anzeigen ((weitere Informationen in ''/etc/os-release''))  | ''cat /etc/debian_version'' ||| ''cat /etc/redhat-release'' oder ''cat /etc/centos-release'' | ? |  |
 +^  ^^^^^^^
 +| **installierte Pakete anschauen** | ''dpkg -l'' oder ''<nowiki>dpkg  --getselections</nowiki>''((<nowiki>dpkg -l | grep ii</nowiki> listet nur die tatsächlich installierten Paket (ohne entfernte Pakete deren Konfiguration noch da ist) auf))| ? | ? | ''yum list installed'' oder ''rpm -qa'' | ''emerge -ep world''  | ''rpm -qa'' |
 +| **Informationen** über "PaketName" **anzeigen** | ''dpkg -s PaketName'' | ''apt-cache show PaketName'' | ''aptitude show PaketName'' | ''yum info'' oder ''rpm -qi PaketName'' | ? | ''zypper info PaketName'' |
 +| **Paket zu einer vorhandenen Datei suchen** | ''dpkg -S Dateiname'' | ? | ? | ''rpm -qf Dateiname'' | ''equery belongs Dateiname'' | ''rpm -qf Dateiname'' |
 +| **Dateien** von Paket "PaketName" **auflisten** | ''dpkg -L PaketName'' | ? | ? | ''rpm -ql PaketName'' | ''equery files PaketName''  | ''rpm -ql PaketName'' |
 +| im Paket-Cache nach **Paketname suchen**  | für installierte Pakete: ''dpkg -l | grep PaketName'' | ''apt-cache search PaketName'' | ''aptitude search PaketName''  | ''yum search PaketName'' | ''emerge -s PaketName'' | ''zypper search PaketName'' ((Kurzform se; zusätzlich in den Paketbeschreibungen suchen: ''-d''; mehrere Begriffe werden mit ODER verknüpft; Eingrenzung auf installierte (''-i'') oder nichtinstallierte Pakete (''-u'') möglich)) |
 +| zeigt Informationen zu den **Abhängigkeiten** eines Pakets an | | ''apt-cache depends'' PaketName | | ''rpm -q --requires PaketName'' (bei installierten Paketen) | | ? |
 +|  |  |  |  |  |  |
 +| Quellenkonfiguration grafisch  | ''apt-setup'' (Datei ''/etc/apt/sources.list'') | ? | ? | ? | ? |  |
 +| Automatische Installation ohne interaktive Nachfragen | ''apt-get -qq install PaketName'' bzw. ''aptitude -y install PaketName'' Nachfragen von debconf müssen mit "''export DEBIAN_FRONTEND=noninteractive''" abgestellt werden, zusätzlich können die Einträge ''force-confold'' (alte Konfiguration bevorzugen) bzw. ''force-confnew'' (neue Konfiguration bevorzugen) und ''force-confdef'' (Standard-aktion) in der ''/etc/dpkg/dpkg.cfg'' eingetragen werden und damit jegliche Nachfrage unterdrücken ||| ? | ? | ? |
 +^ Aktionen ^^^^^^^
 +| **Paket** "PaketName" **installieren** | ''dpkg -i Dateiname.deb'' ((muss lokal vorhanden sein)) | ''apt-get install PaketName'' | ''aptitude install PaketName'' | ''yum install Paketname'' oder ''yum localinstall Dateiname.rpm'' ((muss lokal vorhanden sein)) oder ''rpm -i Dateiname.rpm'' | ''emerge Paketname'' | ''zypper install Paketname'' ((Kurzform "in" möglich)) oder ''rpm -i Dateiname.rpm'' ((muss lokal vorhanden sein)) |
 +| Paket "PaketName" **deinstallieren** (Konfigurationsdateien bleiben) | ''dpkg -r PaketName''  | ''apt-get remove PaketName'' | ''aptitude remove PaketName'' | ''rpm -e PaketName'' | ''emerge <nowiki>--</nowiki>unmerge'' PaketName((Abhängigkeiten werden nicht beachtet! [[http://www.gentoo.org/doc/en/handbook/2008.0/handbook-x86.xml?full=1|Quelle]] )) | zypper remove Paketname((Kurzform "rm" möglich)) |
 +| Paket mit Konfigurationsdateien deinstallieren | ''dpkg <nowiki>--</nowiki>purge PaketName'' | ''apt-get purge PaketName'' | ''aptitude purge PaketName''  | ''yum remove ''((vollständige Bereinigung der Konguration nur manuell: <code>for package in package1 package2 package3
 +do
 +  echo "removing config files for $package"
 +  for file in $(rpm -q --configfiles $package)
 +  do
 +    echo "  removing $file"
 +    rm -f $file
 +  done
 +  rpm -e $package
 +done
 +</code>)) | ? | zypper remove ((vollständige Bereinigung der Konguration nur manuell: <code>for package in package1 package2 package3
 +do
 +  echo "removing config files for $package"
 +  for file in $(rpm -q --configfiles $package)
 +  do
 +    echo "  removing $file"
 +    rm -f $file
 +  done
 +  rpm -e $package
 +done
 +</code>)) |
 +| Paket "PaketName" nur **downloaden** | ? | ''apt-get -d install PaketName'' | ? | ? | ? | ? |  
 +| **Sourcecode** des Paketes "PaketName" **holen** | ? | ''apt-get source PaketName'' | ? | ? | ''emerge <nowiki>--</nowiki>fetchonly PaketName'' | ? |
 +| **Liste verfügbarer Updates holen/Liste aktualisieren** | - | ''apt-get -s update'' | ''aptitude -s update'' | yum list updates | ''emerge <nowiki>--</nowiki>sync''  | ''zypper list-updates'' ((Kurzform: lu; Bei neuen Paketquellen: ''zypper refresh'')) |
 +|**alle Pakete updaten** | ? | ''apt-get upgrade'' | ''aptitude safe-upgrade'' (("aptitude upgrade" ist veraltet)) | yum update | ''emerge <nowiki>--</nowiki>update <nowiki>--</nowiki>deep world'' ((nur explizit installierte: ''emerge <nowiki>--</nowiki>update <nowiki>--</nowiki>ask world''))((<nowiki>--</nowiki>newuse muss bei veränderten USE-Flags angegeben werden))  | ''zypper up'' |
 +| **Paket** "PaketName" **updaten** | | ''apt-get upgrade PaketName'' | ? | ? | ''emerge PaketName'' | (Sicherheits-)Updates: ''zypper patch'' ((Patche auflisten: ''zypper lp''))  |
 +|  |  |  |  |  |  |
 +| **Gesamte Distribution updaten** (Paketquellen müssen auf die neue Version angepasst werden!) | - | ''apt-get dist-upgrade'' | ''aptitude dist-upgrade''  | ? | - (permanente Updates) | Zunächst zypper updaten''zypper in zypper libzypp && zypper dup'' |
 +| **Befehl simulieren**  | ''dpkg <nowiki>--</nowiki>no-act'' ((muss als erste Option stehen!)) | ''apt-get -s ...'' | ''aptitude -s ...'' | ? | ''emerge -p ...'' | ''zypper -D ...'' |
 +| Installation überprüfen | ? | ''apt-get check'' | ? | ? | ? | ? |
 +| Ein PAKET neu konfigurieren  | ''dpkg-reconfigure'' PAKET (oder mit ''debconf'')| ? | ? | ? | ? | ? |
 +| Ein PAKET in einer bestimmten Version installieren  | ''dpkg -i Paketdatei.deb'' | ''apt-get install PAKETNAME=VERSIONSNUMMER'' | ''aptitude install PAKETNAME=VERSIONSNUMMER'' | ''yum install PAKETNAME == VERSIONSNUMMER'' | ? | ? |
 +| Ein PAKET auf eine bestimmte Version fixieren (updates verhindern) | Aktuell installierte Version auf "hold" setzen: ''echo PAKETNAME hold |dpkg --set-selections'' Rückgängig machen ("unhold"): ''echo PAKETNAME install |dpkg --set-selections'' Alle Pakete anzeigen lassen die auf "hold" stehen  <code bash>dpkg --get-selections |awk '$2 == "hold" { print $1 }'</code> | ''apt-mark hold PAKETNAME'' anzeigen: ''apt-mark showhold'' | ''aptitude hold|unhold PAKETNAME'' ''aptitude search ~ahold'' | ''yum versionlock add Paket1,Paket2'' Alternativ: In /etc/yum.conf <file>exclude=Paket1,Paket2</file> bzw. ''yum --exclude Paket1,Paket2'' | ? | ? |
 +| Quellrepository eines bestimmten Paketes anzeigen |  - | ''apt-cache showpkg $Paketname'' oder ''apt-cache search $Paketname'' (Zeile "Source") | ? | ''yum list all $Paketname'' oder ''repoquery -i $Paketname'' ((Paket yum-utils muss installiert sein)) | ? | ? |
 +^ Paketquellen ^^^^^^^
 +| Paketquelle (Repository) hinzufügen | - | ? | ? | ? | ? | ''zypper addrepo Speicherort Alias'' ((Kurzform: ar; Speicherort kann z. B. ein lokales Verzeichnis oder eine URL sein ))  |
 +| Paketquelle (Repository) löschen | - | ? | ? | ? | ? | ''zypper removerepo Alias'' ((Kurzform: rr; anstatt Alias geht auch die Nummer des Repositories die mit ''zypper lr'' angezeigt wird))  |
 +| [[debian:Debian]]: nächsten/besten Mirror-Server auswählen | - | ? | 
 +| Paketliste (Pakete aus den Repositories) aktualisieren | - | ''apt-get update'' | ''aptitude update'' | ''yum makecache fast'' | ''emerge --sync'' | ? |
 +| Liste der Paketquellen exportieren | - | Datei /etc/apt/sources.list sichern || ? | ? | ''zypper repos -e Dateiname.repo'' |
 +| Liste der Paketquellen importieren | - | Datei /etc/apt/sources.list editieren || ? | ? | ''zypper ar Dateiname.repo'' |
 +^ Sonderfunktionen ^^^^^^^
 +| - | [[debian:Debian]]: Paket "PaketName" aus dem testing-Zweig installieren: ''apt-get -t testing PaketName'' | ? | ? | ? | [[linux:Gentoo]]: "hard masked"-Pakete müssen manuell ausgewählt werden | |
 +^ Ablageorte wichtiger Dateien ^^^^^^^
 +| ''/var/lib/dpkg/available'' werden die Paketinformationen aller zur Verfügung stehender (installierbarer) Pakete; ''/var/lib/dpkg/status'' Informationen über den Status der Installation abgelegt; ''/var/lib/dpkg/info'' liegen zu jedem installierten Paket die vier Scripte (*.preinst, *.postinst, *.prerm, *.postrm), eine Liste aller enthaltener Dateien (*.list), die md5-Prüfsummendatei (*.md5sums) und evt. noch andere Informationen wie die zur Verfügung gestellten Libraries (*.shlibs). ((Siehe auch: [[http://www.linux-praxis.de/lpic1/lpi101/1.102.5.html|Verwendung des Debian Paketmanagements]])) |  |  |  |  |  |
 +
 +===== RPM-Paketformat =====
 +
 +Rpm-Pakete werden von den meisten Distributionen verwendet und sind vor [[debian:Debians]] deb-Paketen das meist benutzte Paketformat.
 +
 +==== Links zu RPM ====
 +
 +  * [[http://www.linuxforums.org/servers/rpm_for_newbies.html|RPM for Newbies]]
 +
 +
 +===== DEB-Paketformat =====
 +
 +Deb-Paket sind grundsätzlich ar Archive die noch weitere gzip-Archive enthalten.
 +
 +  * [[http://wiki.debian.org/SecureApt|SecureApt]]
 +  * [[http://debiananwenderhandbuch.de/debianpaketeerstellen.html|4.7 Das Debian Paketformat]]
 +
 +
 +==== APT ====
 +
 +Das Installations- und Konfigurationsprogramm APT (Advanced Package Tool) verspricht höheren Komfort und mehr Übersicht als dselect:
 +
 +Frei wählbare Quellen für die Installation mit Apt werden unter "**/etc/apt/sources.list**" [8] gespeichert. Sowohl eigene Laufwerke als auch [[netzwerke:FTP]]- oder [[netzwerke:HTTP]]-Server sind als Quellangaben möglich. Durch das Kommando "apt-cdrom add" werden automatisch Einträge für die Installation von CD-ROM erzeugt.
 +
 +siehe auch:
 +  * **[[http://debiananwenderhandbuch.de/apt.conf.html|Apt-Konfiguration]]**
 +  * **[[http://www.debian.org/doc/manuals/reference/ch-package.de.html|Debian Reference (version 1) Kapitel 6 - Debian-Paketverwaltung]]**
 +
 +Mit "tasksel" existiert ein semi-grafisches Installationswerkzeug, um Paketgruppen zu installieren. So kann man beispielsweise KDE (K Desktop Environment), German (deutsche Sprachanpassungen) oder C-Development (Entwicklungswerkzeuge für C-Programmierung) auswählen. Über die Abhängigkeiten der gewählten "Tasks" (Aufgaben) werden dann sämtliche zum Task gehörenden Einzelpakete installiert.
 +
 +Auch existieren mit aptitude, console-apt und gnome-apt Frontends zur Bedienung von APT.
 +Unter [[ubuntu:Ubuntu]] gibt es synaptic oder adept.
 +
 +
 +
 +=== Apt-get, Sources & Mirrors ===
 +
 +  * **[[http://www.debian.org/mirror/mirrors_full#DE|Debian Mirrors]]**
 +  * [[http://wiki.ubuntu-forum.de/index.php/Apt-get|Apt-get]]
 +  * [[http://wiki.ubuntuusers.de/apt-get|apt-get]]
 +  * [[http://linux.inet.hr/debian_mirror.html|debian-mirror script suite]]
 +  * [[http://wiki.skolelinux.de/TestZentrum/Infrastruktur/DebianMirror|Debian Mirror]] (mit Rsync): ausführliche Anleitung
 +  * [[http://www.debian.org/doc/manuals/apt-howto/ch-basico.de.html]]
 +
 +
 +  * Auf der Festplatte speichert apt (z.B. manuell installierte Dateien) in ''/var/cache/apt/archives/'' zwischen.
 +
 +=== Proxy einstellen ===
 +
 +**Alternativ zum [[server:proxyserver|systemweiten Einstellen eines Proxy]] kann man auch apt direkt  konfigurieren**. Dazu müssen in /etc/apt/apt.conf oder in eine Datei in /etc/apt/apt.conf.d/ (/etc/apt/apt.conf.d/custom bietet sich beispielsweise an) folgende Zeilen eingefügt werden:
 +
 +  Aquire http::Proxy::http://[[user][:pass]@]host[:port]/
 +
 +=== Apt-Proxies ===
 +
 +  * [[http://wiki.ubuntuusers.de/Apt-Proxy|apt-proxy:]] zum verteilen von Paketen im Netzwerk
 +  * [[http://linuxwiki.de/apt-cacher|apt-cacher]]: auch ein Proxy, aber einfacher zu konfigurieren
 +  * [[http://www.howtoforge.com/local_debian_ubuntu_mirror|How To Create A Local Debian/Ubuntu Mirror With apt-mirror]]
 +
 +
 +
 +
 +
 +
 +=== Problembehebung ===
 +
 +  * **apt und https Paketquellen**: Fehler "method driver /usr/lib/apt/methods/https could not be found" beim update: <code bash>sudo apt-get install apt-transport-https</code>
 +  * Wenn apt und aptitude nur noch **"Segmentation fault" bei Paketaktionen** (upgrade, install, ...) ausgibt (Meldung ''wird zu Segmentation faulty Tree''): Löschen der Dateien ''/var/cache/apt/pkgcache.bin'' und ''/var/cache/apt/srcpkgcache.bin''.
 +  * **BADSIG-gpg-Fehler** (bei [[ubuntu:Ubuntu]] or [[debian:Debian]]): <file>W: Während der Überprüfung der Signatur trat ein Fehler auf. Das Repository wurde nicht aktualisiert und die vorherigen Indexdateien werden verwendet. GPG-Fehler: http://security.debian.org wheezy/updates Release: Die folgenden Signaturen waren ungültig: BADSIG 9D6D8F6BC857C906 Debian Security Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org></file>
 +    * Signing keys ggf. neu installieren: apt-get reinstall debian-archive-keyring
 +    * temporär GPG-Validierung abschalten: <code bash>sudo apt -o Acquire::AllowInsecureRepositories=true update
 +sudo apt upgrade</code>
 +    * Cache löschen: <code bash>mv /var/lib/apt/lists /var/lib/apt/lists-old</code>
 +    * Links: [[https://wiki.debian.org/SecureApt|SecureApt]], [[https://ftp-master.debian.org/keys.html|Archive Keys]], [[http://idroot.net/tutorials/fix-apt-get-update-gpg-error-badsig-ubuntu-debian/|How to fix apt-get update GPG error BADSIG on Ubuntu or Debian]]
 +  * debconf: DbDriver “config”: /var/cache/debconf/config.dat is locked by another process
 +    * mögliche Ursache: Bei einer Installation (z. B. einer Nachfrage) wurde die SSH-Verbindung unterbrochen
 +    * Lösung:
 +      - Der Prozess der ''/var/cache/debconf/config.dat'' ((mittels der [[http://www.hackinglinuxexposed.com/articles/20030616.html|Funktion flock()]] ))noch gesperrt hält muss beendet werden: <code bash>fuser -v /var/cache/debconf/config.dat</code>Die Ausgabe<file>                     USER        PID ACCESS COMMAND
 +/var/cache/debconf/config.dat:
 +                     root       4144 f.... dpkg-preconfigu</file>zeigt dass der Prozess mit der PID "4144" die Datei gesperrt hält. Deshalb muss dieser beendet werden: <code bash>kill -9 4144</code>
 +      - Anschließend muss die lock-Datei von dpkg gelöscht werden: <code bash>rm -R /var/lib/dpkg/lock</code>
 +==== Zusatzprogramme ====
 +  * **debforster**: Es schaut sich die "obersten" Pakete im Abhängigkeitsbaum an und fragt jeweils, ob es diese entfernen soll. (z.B. alle Gnome-programme)
 +  * **deborphan** ist ein Programm, das auf einem Debian-System nach verwaisten Paketen sucht. 
 +  * **packagesearch** GUI für debtags (Tags für Pakete) und deborphan, leider bei feisty dank diesem [[https://bugs.launchpad.net/ubuntu/+source/packagesearch/+bug/104149|Bug]] nicht benutzbar. Sieht aber nützlich aus.
 +
 +
 +==== dselect ====
 +
 +Ein betagtes, aber mächtiges Werkzeug für die Paketverwaltung ist dselect. Es kann Abhängigkeiten auflösen und Pakete unter anderem via [[netzwerke:FTP]] oder [[netzwerke:NFS]], per Diskette und natürlich von CD-ROM installieren.
 +Die Bedienung und Benutzerfreundlichkeit von dselect ist zwar nicht unumstritten, aber wer die Bildschirm-Ausgaben und die Online-Hilfe liest, bekommt mit dselect ein mächtiges Tool zur Paketverwaltung.
 +
 +
 +==== Debian Packete von einem Rechner 1:1 übernehmen ====
 +
 +
 +http://dugfaq.sylence.net/dug-faq.htm/ch-packet.htm
 +
 +8.13 Kann ich die Paketauswahl eines Rechners sichern und 1:1 auf einen         
 +anderen übernehmen?
 +
 +Ja, mit ''dpkg --get-selections "*" > packetlist'' wird die Paketliste in
 +der Datei packetlist gespeichert. "*" ist nötig, damit auch die
 +Informationen über deinstallierte Pakete mit ausgegeben werden. Diese
 +Liste kannst Du dann mit dem Befehl ''dpkg --set-selections < packetlist''
 +auf ein anderes System übertragen. Anschliessend musst Du noch dselect
 +install ausführen.          
 +
 +
 +==== Repository anlegen ====
 +Gerade wenn man
 +  - selbst viele Rechner zu Verwalten hat
 +  - und/oder man Bandbreite sparen will (Überlastung wegen der Paralleldownloads der Clients bei großen Updates)
 +  - selbst Programmier ist und eigene Pakete anbieten möchte
 +wird man sich ein Paketrepository (übersetzt in etwa "Paketlager") erstellen. Dieses hält die Pakete vor und dient als Paketquelle für die Clients. Dazu braucht man je nach Einsatzzweck viel oder wenig Platz auf der Festplatte und einen laufenden [[netzwerke:http]] oder [[netzwerke:ftp]]-Server.
 +
 +Zur Erstellung kann man die Programme
 +  * debarchiver oder
 +  * reprepro
 +benutzten.
 +
 +
 +===== Konvertierung der Paketformate mit alien =====
 +Mit dem Programm alien kann man zwischen den Paketformaten konvertieren.
 +Als Quellen und Ziele sind
 +  * rpm
 +  * deb
 +  * slp (Stampede)
 +  * tgz (Slackware)
 +  * und pkg (Solaris)
 +möglich.
 +
 +  * [[http://www.linux-community.de/Neues/story?storyid=20149|Pakete umwandeln mit Alien]]
 +  * [[http://www.linux-user.de/ausgabe/2006/07/056-alien/index.html|Fremde Welten - Pakete umwandeln mit Alien]]
 +
 +
 +
 +===== Pakete erstellen =====
 +
 +Mit [[http://asic-linux.com.mx/~izto/checkinstall/|checkinstall]] kann man aus dem Quellcode Softwarepakete im deb, rpm oder slackware-Format bauen. Da dies aber nur für die entsprechende Plattform geht, kann man für andere Plattformen den [[http://de.opensuse.org/Build_Service|Suse Build Service]] nutzen.
 +
 +==== rpmbuild ====
 +
 +[[https://rpm-packaging-guide.github.io/|specfile und rpmbuild]] 
 +===== Pakete erstellen mit fpm (Effing package manager)  =====
 +
 +==== Installation ====
 +
 +
 +<code bash>
 +#redhat
 +yum install ruby-devel gcc make rubygems
 +
 +#debian:
 +apt install ruby-dev build-essential
 +
 +# fpm install (alle distributionen)
 +gem install --no-rdoc fpm
 +</code>
 +
 +<code bash>
 +# Paket-environment (RPM):
 +# redhat:
 +yum install rpm-build redhat-rpm-config ruby-devel
 +
 +# debian:
 +sudo apt install rpm librpmbuild8 #ruby-dev?
 +</code>
 +
 +==== Benutzung ====
 +
 +fpm -help
 +
 +<code bash>
 +#!/bin/sh
 +
 +appname="myApp"
 +version="1.0"
 +arch="all"
 +vendor="my IT-Company"
 +maintainer="Admin <admin@domain.tld>"
 +package_dependencies="java7-jdk"
 +
 +project_dir="/root/fpm/$appname/rootdir"
 +
 +#config-files (--config-files PATH):
 +configs="--config-files ./etc/$appname.conf"
 +
 +# owned directories (Attention: only exclusivly used dirs!)
 +directories="--directories /opt/$appname"
 +
 +# Initscripts:
 +#    --deb-init FILEPATH           (deb only) Add FILEPATH as an init script
 +#    --deb-default FILEPATH        (deb only) Add FILEPATH as /etc/default configuration
 +#    --deb-upstart FILEPATH        (deb only) Add FILEPATH as an upstart script
 +#    --deb-systemd FILEPATH        (deb only) Add FILEPATH as a systemd script
 +
 +output_deb="$packagename"_"$version"_"$arch".deb
 +
 +# build actual package: =====================================================================================================================================================
 +fpm -t deb -s dir -C "$project_dir" -n "$packagename" --depends $package_dependencies "$configs" "$directories" \
 +  --architecture "$arch" --maintainer $maintainer --description "$description" --version "$version" --vendor "$vendor"
 +
 +if [ ! -e $output_deb ]
 +then
 + echo package "$output_deb" not found...
 + exit 1
 +else
 + # fake installation to test the package:
 + dpkg -i --dry-run "$output_deb"
 +
 + # show contents of package:
 + echo -e "package ready, contents are: \n"
 + dpkg-deb -c "$output_deb"
 +fi
 +</code>
 +
 +==== rpm ====
 +[[http://www.linuxhaven.de/dlhp/HOWTO/DE-RPM-HOWTO-7.html|RPM-Pakete erstellen]]
 +
 +
 +==== deb-Pakete erstellen ====
 +
 +  - apt-get source Paketname
 +  - diff anpassen
 +  - dpkg-buildpackage -tc
 +
 +
 +FIXME
 +  * [[server:pure-ftpd#Pureftpd ohne Capabilities unter Debian Lenny selbst bauen|Optionen eines vorhandenen Paketes ändern und neu verpacken (am Beispiel von pure-ftpd)]]
 +
 +  * [[http://www.schlittermann.de/deb-intern/dpkg/|Gut verpackt ist halb gewonnen]]
 +  * [[http://www.werthmoeller.de/doc/microhowtos/debian/packages|Paketbau]]
 +  * bei [[https://launchpad.net/|launchpad]] gehostete Projekte werden automatisch deb-Pakete generiert.
 +  * zur Hilfe: CDBS (common build system for Debian packages)
 +  * [[http://debiananwenderhandbuch.de/debianpakete.html|Debian Pakete im Detail]]
 +  * [[http://www.debian.org/doc/debian-policy/ap-pkg-binarypkg.html|Debian Policy Manual - Binary packages (from old Packaging Manual)]]
 +  * [[http://www.debian.org/doc/FAQ/ch-pkg_basics.en.html|The Debian GNU/Linux FAQ - Basics of the Debian package management system]] 
 +  * [[http://women.debian.org/wiki/English/PackagingTutorial|PackagingTutorial]]
 +  * [[http://wiki.zugschlus.de/doku.php?id=debianpackagesbauen|Bau von Debian-Packages]]
 +
 +<code>
 +fakeroot alien name.tar.gz
 +</code>