{"id":9131,"date":"2012-09-11T05:05:20","date_gmt":"2012-09-11T03:05:20","guid":{"rendered":"https:\/\/www.gambaru.de\/blog\/?p=9131"},"modified":"2012-09-11T05:05:20","modified_gmt":"2012-09-11T03:05:20","slug":"reprepro-das-eigene-paketarchiv-fur-debian-und-ubuntu","status":"publish","type":"post","link":"https:\/\/gambaru.de\/blog\/2012\/09\/11\/reprepro-das-eigene-paketarchiv-fur-debian-und-ubuntu\/","title":{"rendered":"Reprepro: Das eigene Paketarchiv f\u00fcr Debian und Ubuntu"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/gambaru.de\/blog\/wp-content\/uploads\/2012\/09\/Prunksaal_Hofbibliothek_Wien_B\u00fccherregal_stitched_6_by_Politikaner_Wikipedia1-1-1.jpg\" alt=\"Archivbild von Politikaner Wikipedia.org\" title=\"Prunksaal_Hofbibliothek_Wien_B\u00fccherregal_stitched_6_by_Politikaner_Wikipedia\" width=\"125\" height=\"333\" class=\"alignright size-full wp-image-9155\" \/><br \/>\nIch bin in den letzten Wochen zum ersten Mal mit der Situation konfrontiert worden, ein Repositorium f\u00fcr meine eigenen Debianpakete erstellen zu wollen. Davor beschr\u00e4nkten sich meine Experimente z.B. auf das Erstellen eines <a href=\"https:\/\/www.gambaru.de\/blog\/2011\/12\/12\/einen-masgeschneiderten-dwm-fenstermanager-von-sid-nach-squeeze-backporten\/\">Backports f\u00fcr den DWM-Fenstermanager<\/a> oder ein schnell gebasteltes Paket f\u00fcr den <a href=\"https:\/\/www.gambaru.de\/blog\/2012\/04\/25\/sauerbraten-cube-server-lister-fur-debian-und-ubuntu-kompilieren\/\">Cube-Server-Lister<\/a>. Mit <a href=\"http:\/\/mirrorer.alioth.debian.org\/\">Reprepro<\/a> existiert die M\u00f6glichkeit ein eigenes Paketarchiv f\u00fcr Deb-Pakete aufzusetzen und sie lokal mit Hilfe von Apt zu installieren oder Freunden, Testern, der Firma oder schlicht der ganzen Welt zur Verf\u00fcgung zu stellen. Und das geht so.<\/p>\n<h2>Vorbedingungen<\/h2>\n<p>Ihr ben\u00f6tigt:<\/p>\n<ol>\n<li>Einen g\u00fcltigen GPG-Schl\u00fcssel<\/li>\n<li>Eigene Deb-Pakete<\/li>\n<li>Reprepro<\/li>\n<li>Einen Web- oder FTP-Server<\/li>\n<\/ol>\n<h2>Ein g\u00fcltiger GPG-Schl\u00fcssel<\/h2>\n<p>F\u00fchrt das folgende Kommando aus:<br \/>\n<code>gpg --gen-key<\/code><br \/>\nDie folgenden Dialoge sind selbsterkl\u00e4rend und die Voreinstellungen sinnvoll. W\u00e4hlt den RSA-Schl\u00fcssel (1) und mindestens 2048bit Schl\u00fcssell\u00e4nge.<br \/>\nDie ID eures \u00f6ffentlichen Schl\u00fcssels (pub) erfahrt ihr mit<br \/>\n<code>gpg --list-keys<\/code><br \/>\nIn meinem Fall w\u00e4re das 475C34B9. Mit dem GPG-Schl\u00fcssel werden sp\u00e4ter die Deb-Pakete und das Reprepro-Archiv signiert, so dass ihr anhand der Signatur die Authentizit\u00e4t der heruntergeladenen Pakete erkennen k\u00f6nnt. Damit jemand anders dies auf dem eigenen Rechner \u00fcberpr\u00fcfen kann, muss der \u00f6ffentliche Schl\u00fcssel in den Schl\u00fcsselring von Debian oder Ubuntu importiert werden.<br \/>\n<code>gpg --output gambaru_archiv.asc --armor --export 475C34B9<\/code><br \/>\nMit diesem Befehl wird der \u00f6ffentliche Schl\u00fcssel im ASCII-Format in die Datei <a href='https:\/\/www.gambaru.de\/blog\/wp-content\/uploads\/2012\/09\/gambaru_archiv.asc'>gambaru_archiv.asc<\/a> exportiert.<br \/>\n<code>wget https:\/\/www.gambaru.de\/blog\/wp-content\/uploads\/2012\/09\/gambaru_archiv.asc<\/code><br \/>\nNach dem Herunterladen wird er mit<br \/>\n<code>sudo apt-key add gambaru_archiv.asc<\/code><br \/>\nin den Schl\u00fcsselring importiert und<br \/>\n<code>sudo apt-key list<\/code><br \/>\nverr\u00e4t, ob er tats\u00e4chlich im Schl\u00fcsselring angekommen ist.<\/p>\n<h2>Eigene Deb-Pakete<\/h2>\n<p>Dieser Abschnitt k\u00f6nnte leicht B\u00fccherw\u00e4nde f\u00fcllen. F\u00fcr den Anfang tun es aber auch \"<a href=\"https:\/\/www.gambaru.de\/blog\/2011\/06\/11\/wie-man-debian-pakete-aus-den-quellen-baut\/\">Wie man Debian-Pakete aus den Quellen baut<\/a>\" oder ihr schaut euch am besten <a href=\"https:\/\/www.gambaru.de\/blog\/2011\/12\/14\/mehrere-pbuilder-und-hooks-rxvt-unicode-256color-von-debian-sid-nach-squeeze-backporten\/\">Pbuilder<\/a> an, womit sich Pakete in einer \"Reinraumumgebung\" f\u00fcr unterschiedliche Architekturen und sowohl f\u00fcr Ubuntu und Debian bauen lassen und das vollkommen unabh\u00e4ngig von eurer Ubuntuversion. Es lohnt sich das <a href=\"https:\/\/wiki.ubuntu.com\/PbuilderHowto\">Pbuilder-Howto<\/a> auf ubuntu.com zu studieren.<br \/>\nDie fertigen Pakete k\u00f6nnen auch nachtr\u00e4glich mit<br \/>\n<code>debsign Paketname.changes<\/code><br \/>\n<code>debsign Paketname.dsc<\/code><br \/>\n<code>dpkg-sig --sign builder mediathekview_3.0.0-1_all.deb<\/code><br \/>\nsigniert werden.<\/p>\n<h2>Reprepro<\/h2>\n<p>Reprepro ist ein Werkzeug, mit dem sich ein eigenes lokales Repository anlegen l\u00e4sst, das dem offiziellen <a href=\"http:\/\/ftp-master.debian.org\/#dak\">Debian Archive Kit<\/a> in kaum einer Beziehung nachsteht. Es gibt <a href=\"http:\/\/wiki.debian.org\/HowToSetupADebianRepository\">weitere Alternativen<\/a>, jedoch \u00fcberzeugt mich Reprepro nicht nur durch seinen gro\u00dfen Funktionsumfang, sondern es kommt auch ohne Datenbankserver aus und l\u00e4sst sich schnell einrichten. Das <a href=\"http:\/\/git.debian.org\/?p=mirrorer\/reprepro.git;a=blob_plain;hb=HEAD;f=docs\/manual.html\">Handbuch von Reprepro<\/a> sowie <em>man reprepro<\/em> helfen bei der Inbetriebnahme weiter.<\/p>\n<h3>Schritt 1:<\/h3>\n<p>Zuerst muss ein beliebiges Basisverzeichnis angelegt werden.<br \/>\n<code>mkdir -p ~\/reprepro\/debian<\/code><br \/>\nIm Debian-Verzeichnis wird danach ein Unterordner namens <strong>conf<\/strong> angelegt und in diesem die Dateien <em>distributions<\/em> und <em>options<\/em>.<\/p>\n<h3>Schritt 2:<\/h3>\n<p>Der Inhalt von <em>distributions<\/em>.<\/p>\n<pre>\nOrigin: gambaru.de\nCodename: experimental\nArchitectures: i386 amd64 source\nComponents: main\nDescription: Private Debian-Pakete von http:\/\/gambaru.de\nSignWith: yes\nOrigin: gambaru.de\nCodename: wheezy\nArchitectures: i386 amd64 source\nComponents: main\nDescription: Private Debian-Pakete von http:\/\/gambaru.de\nSignWith: yes\n<\/pre>\n<p>Diese Datei ist als einzige wirklich notwendig. In ihr werden die Distributionen definiert, f\u00fcr die die selbsterstellten Pakete gedacht sind. Ich habe sowohl eine f\u00fcr Experimental als auch Wheezy angelegt. F\u00fcr Ubuntu l\u00e4sst sich Wheezy auch durch Precise oder Quantal ersetzen oder ihr k\u00f6nnt euch einen komplett eigenen Codenamen ausdenken. Tats\u00e4chlich ben\u00f6tigt ihr nur die Felder Codename, Components und Architecture. Meine Pakete sind <a href=\"http:\/\/www.debian.org\/social_contract\">DFSG-frei<\/a> und landen deswegen in Main. Ich stelle sie f\u00fcr die Architekturen i386 und amd64 und nat\u00fcrlich als Quellpakete zur Verf\u00fcgung. Die Option <em>SignWith: yes<\/em> f\u00fchrt dazu, dass das gesamte Archiv mit dem zuerst gefundenen GPG-Schl\u00fcssel signiert wird. Anstelle von yes kann hier auch die Key-ID stehen.<br \/>\nDer Inhalt der Datei <em>options<\/em>.<\/p>\n<pre>\nverbose\nask-passphrase\n<\/pre>\n<p>Wenn diese Datei existiert wird jede Zeile als zus\u00e4tzliches Argument beim Aufruf von Reprepro \u00fcbergeben, wobei Parameter, die manuell per Kommandozeile \u00fcbergeben werden, Vorrang genie\u00dfen. Verbose sorgt f\u00fcr gespr\u00e4chigere Statusmeldungen und bei ask-passphrase erwartet Reprepro die Eingabe des Passworts f\u00fcr den GPG-Schl\u00fcssel, um das Archiv zu signieren.<br \/>\nNur der Vollst\u00e4ndigkeit halber: Es existieren noch die Konfigurationsdateien <em>updates<\/em>, <em>pulls<\/em> und <em>incoming<\/em>, die man f\u00fcr weitergehende Studien im Hinterkopf behalten sollte, hier aber nicht gebraucht werden.<\/p>\n<h3>Beispiele<\/h3>\n<p>F\u00fcgt das Paket mediathekview_3.0.0-1_all.deb dem Archiv experimental hinzu, welches sich im Basisverzeichnis <em>~\/reprepro\/debian<\/em> befindet.<br \/>\n<code>reprepro -b ~\/reprepro\/debian <strong>includedeb<\/strong> experimental \/var\/cache\/pbuilder\/sid-amd64\/result\/mediathekview_3.0.0-1_all.deb<\/code><br \/>\nF\u00fcgt das Quellpaket mediathekview_3.0.0-1.dsc dem Archiv experimental hinzu, welches sich im Basisverzeichnis <em>~\/reprepro\/debian<\/em> befindet.<br \/>\n<code>reprepro -b ~\/reprepro\/debian <strong>includedsc<\/strong> experimental \/var\/cache\/pbuilder\/sid-amd64\/result\/mediathekview_3.0.0-1.dsc<\/code><br \/>\nAllgemein:<br \/>\n<code>reprepro -b [Basisverzeichnis] includedeb|includedsc ARCHIV [Pfad zum Deb-Paket]<\/code><br \/>\nDie Eingabe des Basisverzeichnisses kann man weglassen, wenn man eine Umgebungsvariable exportiert oder die nachfolgende Zeile in seine .zshrc eintr\u00e4gt. Z.B.<br \/>\n<code>export REPREPRO_BASE_DIR='\/home\/apo\/reprepro\/debian'<\/code><br \/>\nDanach lassen sich Pakete mit<br \/>\n<code>reprepro includeb experimental Mein-Paket.deb<\/code><br \/>\nvon \u00fcberall hinzuf\u00fcgen.<br \/>\nEntfernen lassen sich Pakete aus dem Archiv mit:<br \/>\n<code>reprepro <strong>remove<\/strong> experimental Mein-Paket<\/code><br \/>\nUnd mehr m\u00fcsst ihr nicht wissen. Ein Tipp noch am Rande: Damit ihr das GPG-Passwort nicht permanent neu eingeben m\u00fcsst, solltet ihr Programme wie Gnome-Keyring oder <a href=\"https:\/\/www.gambaru.de\/blog\/2012\/08\/01\/keychain-alternative-zu-gnome-keyring-um-ssh-schlussel-zwischen-logins-zu-verwalten\/\">Keychain<\/a> und gnupg-agent installiert haben, womit das Passwort zwischengespeichert wird.<\/p>\n<h2>Das eigene Deb-Archiv lokal verf\u00fcgbar machen<\/h2>\n<p>Am einfachsten ist es nun auf das lokal erstellte Paketarchiv zuzugreifen, wozu lediglich diese Eintr\u00e4ge der <em>\/etc\/apt\/sources.list<\/em> hinzugef\u00fcgt werden m\u00fcssen.<\/p>\n<blockquote><p>\ndeb file:\/\/\/home\/apo\/reprepro\/debian\/ experimental main<br \/>\ndeb-src file:\/\/\/home\/apo\/reprepro\/debian\/ experimental main\n<\/p><\/blockquote>\n<p>Zur Sicherheit solltet ihr die Pin-Priorit\u00e4t dieser Pakete absenken, indem ihr einen Eintrag zur Datei <em>\/etc\/apt\/preferences<\/em> hinzuf\u00fcgt. Im Regelfall muss sie zuerst angelegt werden. Mit ihr l\u00e4sst sich pr\u00e4zise das Mischen von mehreren Paketquellen steuern. (Stichwort <a href=\"https:\/\/www.gambaru.de\/blog\/2011\/11\/23\/apt-pinning-fur-die-mutigen\/\">Apt-Pinning<\/a>, siehe auch <strong>man apt_preferences<\/strong>.)<\/p>\n<blockquote><p>\nPackage: *<br \/>\nPin: release o=gambaru.de<br \/>\nPin-Priority: 1\n<\/p><\/blockquote>\n<p>Da es sich bei meinen Paketen um experimentelle Pakete handelt, ist es am besten die Priorit\u00e4t auf 1, einen sehr niedrigen Wert, zu setzen. Ihr k\u00f6nnt das Ergebnis vorher und nachher mit<br \/>\n<code>apt-cache policy <\/code><br \/>\n\u00fcberpr\u00fcfen.<br \/>\nDanach gen\u00fcgt wie immer<br \/>\n<code>aptitude update<\/code><br \/>\n<code>aptitude -t experimental mediathekview<\/code><br \/>\num das eigene Paket via Apt mit allen Abh\u00e4ngigkeiten zu installieren.<\/p>\n<h2>Reprepro: Repository weltweit freigeben<\/h2>\n<p>Mit Hilfe eines Web- oder FTP-Servers l\u00e4sst sich das eigene Archiv auch weltweit und nicht nur lokal verteilen. Die Konfiguration eines Webservers <a href=\"https:\/\/www.gambaru.de\/blog\/2012\/05\/01\/lighttpd-webserver-konfiguration-mit-ssl-und-authentifizierung\/\">wie Lighttpd<\/a> war mir schon einen eigenen Beitrag wert. Reprepro funktioniert nat\u00fcrlich auch mit <a href=\"http:\/\/davehall.com.au\/blog\/dave\/2010\/02\/06\/howto-setup-private-package-repository-reprepro-nginx\">Nginx<\/a> und Apache.<br \/>\nIch habe mich jedoch f\u00fcr einen FTP-Server entschieden. Hierzu benutze ich <a href=\"https:\/\/security.appspot.com\/vsftpd.html\">vsftpd<\/a>. <a href=\"https:\/\/www.gambaru.de\/blog\/2012\/05\/29\/vsftpd-und-openarena-konfiguration-eines-sicheren-ftp-servers-mit-ausschlieslich-anonymen-zugang\/\">Die Anleitung<\/a> f\u00fcr die Konfiguration im Zusammenspiel mit OpenArena l\u00e4sst sich ganz einfach auch auf Reprepro \u00fcbertragen.<br \/>\nIn diesem Fall betreibt ihr den FTP-Server ausschlie\u00dflich anonym ohne Schreibrechte. Ich habe den kompletten Debian-Ordner des Basisverzeichnisses von Reprepro mittels SCP hochgeladen und die Unterordner <strong>db<\/strong> und <strong>conf<\/strong> aus Sicherheitsgr\u00fcnden entfernt. Um die Paketquellen von gambaru.de einzubinden, m\u00fcsstet ihr folgendes in der <em>\/etc\/apt\/sources.list<\/em> eintragen und den gambaru_archiv-Schl\u00fcssel eurem Schl\u00fcsselring hinzugef\u00fcgt haben.<\/p>\n<blockquote><p>\ndeb     ftp:\/\/46.182.19.209\/debian experimental main<br \/>\ndeb-src ftp:\/\/46.182.19.209\/debian experimental main\n<\/p><\/blockquote>\n<h2>Fazit<\/h2>\n<p>PPAs waren gestern, heute baut man sich sein eigenes Paketarchiv. \ud83d\ude09 Es gibt noch viele weitere Optionen von Reprepro zu entdecken. Unter anderem ist die automatische Verarbeitung von \"incoming queues\" m\u00f6glich und das Spiegeln des kompletten Debian- und Ubuntu-Archivs! Wenn ihr h\u00e4ufig Deb-Pakete herunterladet und Bandbreite sparen wollt, hilft eventuell auch <a href=\"https:\/\/www.gambaru.de\/blog\/2011\/10\/26\/apt-cacher-ng-ein-proxy-server-fur-debian-und-ubuntu\/\">Apt-Cacher-NG<\/a>, ein Proxy-Server, weiter.<br \/>\nJeder, der bis hierhin gelesen hat, hat sich automatisch als Tester f\u00fcr zwei Pakete qualifiziert, an denen ich gerade arbeite und hoffe sie als Paketverwalter weiterpflegen zu d\u00fcrfen. Bitte Bugs direkt hier oder in den alten Posts zu <a href=\"https:\/\/www.gambaru.de\/blog\/2012\/08\/12\/mediathekview-3-0-es-ist-angerichtet\/\">Mediathekview<\/a> und <a href=\"https:\/\/www.gambaru.de\/blog\/2012\/08\/25\/wbar-bericht-von-der-entwicklung-einer-neuen-debian-version-der-leichten-schnellstartleiste\/\">Wbar<\/a> melden. \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich bin in den letzten Wochen zum ersten Mal mit der Situation konfrontiert worden, ein Repositorium f\u00fcr meine eigenen Debianpakete erstellen zu wollen. Davor beschr\u00e4nkten sich meine Experimente z.B. auf das Erstellen eines Backports f\u00fcr den DWM-Fenstermanager oder ein schnell gebasteltes Paket f\u00fcr den Cube-Server-Lister. Mit Reprepro existiert die M\u00f6glichkeit ein eigenes Paketarchiv f\u00fcr Deb-Pakete &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/gambaru.de\/blog\/2012\/09\/11\/reprepro-das-eigene-paketarchiv-fur-debian-und-ubuntu\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eReprepro: Das eigene Paketarchiv f\u00fcr Debian und Ubuntu\u201c<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[53,69,166,202,204],"_links":{"self":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/9131"}],"collection":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/comments?post=9131"}],"version-history":[{"count":0,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/9131\/revisions"}],"wp:attachment":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/media?parent=9131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/categories?post=9131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/tags?post=9131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}