{"id":22208,"date":"2020-04-05T18:07:48","date_gmt":"2020-04-05T16:07:48","guid":{"rendered":"https:\/\/pi3g.com\/?p=22208"},"modified":"2020-04-05T18:07:48","modified_gmt":"2020-04-05T16:07:48","slug":"creating-configuration-files-in-etc-in-debian-packages","status":"publish","type":"post","link":"https:\/\/pi3g.com\/de\/creating-configuration-files-in-etc-in-debian-packages\/","title":{"rendered":"Erstellen von Konfigurationsdateien in \/etc in Debian-Paketen"},"content":{"rendered":"<p>Ich arbeite derzeit an einer aktualisierten picockpit-client Version, die zus\u00e4tzliche Konfigurationsdateien in \/etc\/picockpit-client f\u00fcr die einzelnen Module (PiDoctor &amp; PiControl) hinzuf\u00fcgen soll.<\/p>\n<p>picockpit-client ist ein Raspbian-Paket f\u00fcr picockpit.com, das die Web-Plattform mit Ihrem individuellen Raspberry Pi verbindet.<\/p>\n<p>Da Raspbian auf Debian basiert, gelten die folgenden Informationen auch f\u00fcr die allgemeine Paketierung von Debian und Derivaten (z.B. Ubuntu).<\/p>\n<h1>dh-virtualenv<\/h1>\n<p>Ich empfehle meine <a href=\"https:\/\/pi3g.com\/de\/2019\/04\/19\/packaging-python-projects-for-debian-raspbian-with-dh-virtualenv\/\">anderer Artikel \u00fcber Debian-Pakete<\/a> als Einf\u00fchrung und zus\u00e4tzliches Material, falls Sie daran interessiert sind, Python-Anwendungen zu paketieren.<\/p>\n<p>In diesem Artikel werde ich allgemeine Konzepte im Zusammenhang mit der Paketierung besprechen, insbesondere die Installation von Dateien in \/etc\/<\/p>\n<p>Eine Anmerkung vorweg: Der \"Einstiegspunkt\" f\u00fcr die Erstellung eines Pakets ist das makefile <strong>debian\/regeln<\/strong>. <\/p>\n<p>Und Sie k\u00f6nnen Pakete mit dem folgenden Befehl erstellen:<\/p>\n<blockquote>\n<p>dpkg-buildpackage -uc -us -b<\/p>\n<\/blockquote>\n<p>Dieser Befehl wird aus dem obersten Verzeichnis Ihres Pakets ausgef\u00fchrt, nicht aus dem Verzeichnis debian\/. <\/p>\n<h1>Grundlegender \u00dcberblick<\/h1>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"733\" height=\"636\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb.png\" border=\"0\"><\/a><\/p>\n<p>Sie sehen eine Ordnerstruktur, die f\u00fcr ein Debian-Paket erforderlich ist (enthalten im Ordner picockpit-client-package). <\/p>\n<p>Am wichtigsten ist, dass er einen Ordner enth\u00e4lt <strong>debian<\/strong>die mehrere Konfigurationsdateien enth\u00e4lt, die zur Erstellung des Pakets verwendet werden.<\/p>\n<p>Dieses Dateilayout wird verwendet, um das Paket mit <strong>debhelper<\/strong>, das die meisten Pakete verwenden, weil es viele Aufgaben automatisiert.<\/p>\n<h2>\u00c4nderungsprotokoll<\/h2>\n<p>Diese Datei enth\u00e4lt Changelog-Informationen (f\u00fcr das Debian-Paket). Sie wird verwendet, um die Version des Pakets festzulegen.<\/p>\n<p>Beispielhafte Inhalte:<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"667\" height=\"211\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-1.png\" border=\"0\"><\/a><\/p>\n<p>Beachten Sie, dass eine Einr\u00fcckung durch Leerzeichen erforderlich ist (zwei Leerzeichen vor dem Symbol *, ein Leerzeichen vor dem Symbol -)<\/p>\n<p>In meinem Beispiel ist die neueste Paketversion (Eintrag ganz oben) 0.18.5<\/p>\n<h2>kompat<\/h2>\n<p>Diese Datei enth\u00e4lt eine Nummer, gefolgt von einem Zeilenumbruch:<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"404\" height=\"87\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-2.png\" border=\"0\"><\/a><\/p>\n<p>Dies ist die Version von <a href=\"https:\/\/dyn.manpages.debian.org\/buster\/debhelper\/debhelper.7.en.html\">debhelper<\/a> mit dem Ihre Anwendung kompatibel ist. (Ab Version 12 kann dies auch in debian\/control angegeben werden, wird aber aus Gr\u00fcnden der Abw\u00e4rtskompatibilit\u00e4t weiterhin in debian\/compat unterst\u00fctzt - siehe dies <a href=\"https:\/\/dyn.manpages.debian.org\/buster\/debhelper\/debhelper.7.en.html\">Manpage<\/a>)<\/p>\n<h2>Kontrolle<\/h2>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"724\" height=\"346\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-3.png\" border=\"0\"><\/a><\/p>\n<p>Diese Datei wird verwendet, um Abh\u00e4ngigkeiten, Paketnamen und andere relevante Paket-Metadaten anzugeben.<\/p>\n<h2>Copyright<\/h2>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"727\" height=\"402\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-4.png\" border=\"0\"><\/a><\/p>\n<p>Diese Datei enth\u00e4lt Copyright-Informationen f\u00fcr Ihr Paket.<\/p>\n<h2>.install<\/h2>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-5.png\"><img loading=\"lazy\" decoding=\"async\" width=\"455\" height=\"98\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-5.png\" border=\"0\"><\/a><\/p>\n<p>In meinem Fall hei\u00dft die Datei picockpit-client.install, da mein Paket das picockpit-client Paket ist.<\/p>\n<p>Diese Datei wird ausgewertet von <a href=\"https:\/\/dyn.manpages.debian.org\/buster\/debhelper\/dh_install.1.en.html\">dh_install<\/a> (das Teil von debhelper ist). Er kopiert eine Datei oder mehrere Dateien in ein Verzeichnis des Pakets (das sp\u00e4ter an diesem absoluten Systemort installiert werden soll).<\/p>\n<p>In diesem Fall m\u00f6chte ich die Datei <strong>etc\/dinosaurier\/dinosaurier.cfg <\/strong>die in \/etc\/dinosaur installiert werden soll, als \/etc\/dinosaur\/dinosaur.cfg<\/p>\n<p>Ein Problem, auf das ich bei meinen Recherchen zu diesem Thema gesto\u00dfen bin, ist die Frage, wo etc\/dinosaur\/dinosaur.cfg im Verh\u00e4ltnis zu picockpit-client.install platziert werden soll.<\/p>\n<p>Es ist wichtig zu wissen <strong>in welchen Suchorten <\/strong>dh_install sucht nach diesen Dateien.<\/p>\n<p><strong>Hier ist die Antwort:<\/strong><\/p>\n<p>Standardm\u00e4\u00dfig sucht es in \".\" und \"debian\/tmp\". <\/p>\n<p>\".\" ist das Verzeichnis, in dem sich der Debian-Ordner befindet. <\/p>\n<p>Beachten Sie daher die Ordnerstruktur:<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-6.png\"><img loading=\"lazy\" decoding=\"async\" width=\"376\" height=\"263\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-6.png\" border=\"0\"><\/a><\/p>\n<p>Wie Sie sehen, befindet sich also \"etc\" auf derselben Ordnerebene wie \"debian\". Bitte beachten Sie, dass ich diesen Ordner beliebig h\u00e4tte benennen k\u00f6nnen, da ich den Ort in picockpit-client.install festlege:<\/p>\n<blockquote>\n<p>etc\/dinosaurier\/dinosaurier.cfg etc\/dinosaurier<\/p>\n<\/blockquote>\n<p>Ich k\u00f6nnte das so \u00e4ndern, dass es einfach dinosaur.cfg ist, dann muss dinosaur.cfg im gleichen \u00fcbergeordneten Verzeichnis wie der Debian-Ordner liegen. <\/p>\n<p>Weiter unten finden Sie weitere Informationen \u00fcber die besondere Rolle von Dateien, die in \/etc abgelegt werden, sowie einen wichtigen Tipp zur Fehlersuche bei dh_install.<\/p>\n<h2>.Links<\/h2>\n<p>Dadurch werden Symlinks eingerichtet, z. B. um Ihre Anwendung in den Systempfad aufzunehmen, in dem nach Bin\u00e4rdateien gesucht wird:<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-7.png\"><img loading=\"lazy\" decoding=\"async\" width=\"776\" height=\"100\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-7.png\" border=\"0\"><\/a><\/p>\n<p>.postinst<\/p>\n<p>Ein Skript, das nach der Installation ausgef\u00fchrt wird. set -e ist in diesem Skript wichtig, es muss auch 0 zur\u00fcckgeben, um den Erfolg anzuzeigen (so dass die Paketinstallation abgeschlossen werden kann).<\/p>\n<p>Ich habe den Standard aus einer Vorlage:<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-8.png\"><img loading=\"lazy\" decoding=\"async\" width=\"709\" height=\"310\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-8.png\" border=\"0\"><\/a><\/p>\n<h2>.Dienst<\/h2>\n<p>Dies ist ein systemd-Diensteintrag, der f\u00fcr Ihre Anwendung hinzugef\u00fcgt werden muss. Ich habe zum Beispiel:<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-9.png\"><img loading=\"lazy\" decoding=\"async\" width=\"573\" height=\"580\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-9.png\" border=\"0\"><\/a><\/p>\n<h2>.Ausl\u00f6ser<\/h2>\n<p>Ich bin mir nicht ganz sicher, wof\u00fcr das ist; bei mir sieht es so aus (und funktioniert): <\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"589\" height=\"223\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-10.png\" border=\"0\"><\/a><\/p>\n<h2>Regeln<\/h2>\n<p>rules ist ein makefile, das zum Bauen des Pakets verwendet wird. Dies h\u00e4ngt von der Art des Pakets ab, das Sie erstellen. Ich reproduziere hier meine rules-Datei, um Ihnen die Arbeit zu erleichtern.<\/p>\n<p>Wie Sie sehen k\u00f6nnen, verwendet es <a href=\"https:\/\/dh-virtualenv.readthedocs.io\/en\/1.1\/\">dh_virtualenv<\/a>Es handelt sich dabei um eine L\u00f6sung zur Erstellung virtueller Umgebungen f\u00fcr Python-Code (die es erm\u00f6glicht, dass inkompatible Pakete auf demselben System koexistieren und Sie die Umgebung kontrollieren k\u00f6nnen, in der Sie sie einsetzen).<\/p>\n<p>Wenn Sie an dh_virtualenv interessiert sind, lesen Sie meinen Artikel \u00fcber <a href=\"https:\/\/pi3g.com\/de\/2019\/04\/19\/packaging-python-projects-for-debian-raspbian-with-dh-virtualenv\/\">wie man Python-Pakete f\u00fcr Raspbian mit dh_virtualenv packt<\/a>. <\/p>\n<blockquote>\n<p>#!\/usr\/bin\/make -f<br \/>\n#<br \/>\n# Bauen Sie das Debian-Paket mit <a href=\"https:\/\/github.com\/spotify\/dh-virtualenv\">https:\/\/github.com\/spotify\/dh-virtualenv<\/a><br \/>\n#<br \/>\n# Die folgenden Ziele erstellen eine saubere Kopie des Arbeitsverzeichnisses \u00fcber<br \/>\n# mit \"sdist\", sonst geht \"pip\" kaputt, wenn man von<br \/>\n# sourcedir \".\", da dies die Debian-Build-Phase beinhaltet,<br \/>\n# und es kommt zu einer rekursiven Explosion, wenn Symlinks verfolgt werden.<br \/>\n#<br \/>\n# Es stellt auch sicher, dass Ihr MANIFEST vollst\u00e4ndig ist und mindestens Folgendes abdeckt<br \/>\n# alle Dateien, die f\u00fcr ein Release-Build ben\u00f6tigt werden.<\/p>\n<p># Erh\u00f6ht die Trace-Protokollierung, siehe debhelper(7) (zum Aktivieren nicht kommentieren)<br \/>\n#DH_VERBOSE=1<\/p>\n<p>export DH_VIRTUALENV_INSTALL_ROOT=\/usr\/share<br \/>\nSNAKE=\/usr\/bin\/python3<br \/>\nEXTRA_REQUIREMENTS=-preinstall \"setuptools&gt;=17.1,=7\" -preinstall \"wheel\" -preinstall \"no-manylinux1\"<br \/>\nDH_VENV_ARGS=-with python-virtualenv -setuptools -python $(SNAKE) $(EXTRA_REQUIREMENTS) #-v<br \/>\nPACKAGE=$(shell dh_listpackages)<br \/>\nVERSION=$(shell $(SNAKE) setup.py -version)<br \/>\nSDIST_DIR=debian\/$(PACKAGE)-$(VERSION)<\/p>\n<p>sauber:<br \/>&nbsp;&nbsp;&nbsp;&nbsp; test ! -d dist || rm -rf dist<br \/>&nbsp;&nbsp;&nbsp;&nbsp; test ! -d $(SDIST_DIR) || rm -rf $(SDIST_DIR)<br \/>&nbsp;&nbsp;&nbsp;&nbsp; dh $@ $(DH_VENV_ARGS)<\/p>\n<p>bauen-arch:<br \/>&nbsp;&nbsp;&nbsp;&nbsp; $(SNAKE) setup.py sdist -formats tar<br \/>&nbsp;&nbsp;&nbsp;&nbsp; mkdir -p $(SDIST_DIR)<br \/>&nbsp;&nbsp;&nbsp;&nbsp; tar -x -C $(SDIST_DIR) -strip-components=1 -exclude '*.egg-info' -f dist\/*.tar<br \/>&nbsp;&nbsp;&nbsp;&nbsp; #dh $@ $(DH_VENV_ARGS) -sourcedir $(SDIST_DIR) -sourcedir .<br \/>&nbsp;&nbsp;&nbsp;&nbsp; dh $@ $(DH_VENV_ARGS) -sourcedir .<\/p>\n<p>%:<br \/>&nbsp;&nbsp;&nbsp;&nbsp; #dh $@ $(DH_VENV_ARGS) -sourcedir $(SDIST_DIR) -sourcedir .<br \/>&nbsp;&nbsp;&nbsp;&nbsp; dh $@ $(DH_VENV_ARGS) -sourcedir .<\/p>\n<\/blockquote>\n<p><strong>Bitte beachten Sie, dass WordPress dazu neigt, die Syntax des Codes durcheinander zu bringen, also verwenden Sie dies nur als grobe Richtlinie, nicht zum Kopieren und Einf\u00fcgen!<\/strong><\/p>\n<h1>Weitere Informationen \u00fcber \/etc und dh_install<\/h1>\n<h2>Wichtige Nebenbemerkung \/ Fehlerbehebung<\/h2>\n<p>Ich habe viel Zeit damit verbracht, das folgende Problem zu beheben: <\/p>\n<blockquote>\n<p><em>dh_install: Kann nicht gefunden werden (keine Treffer f\u00fcr) \"etc\/dinosaur\/dinosaur.cfg\" (versucht in debian\/picockpit-client-0.18.5, debian\/tmp)<\/em><\/p>\n<p><em>dh_install: picockpit-client fehlende Dateien: etc\/dinosaur\/dinosaur.cfg<br \/>\ndh_install: fehlende Dateien, Abbruch<\/em>\n<\/p>\n<\/blockquote>\n<p>Dieses Problem steht im Zusammenhang mit einem \"falschen\" Eintrag in <strong>debian\/regeln<\/strong><\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-11.png\"><img loading=\"lazy\" decoding=\"async\" width=\"701\" height=\"351\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-11.png\" border=\"0\"><\/a><\/p>\n<p>wie Sie hier sehen k\u00f6nnen, wird in dieser (f\u00fcr Anf\u00e4nger) ziemlich \u00fcberw\u00e4ltigenden und kryptischen Syntax ein Parameter namens -sourcedir f\u00fcr den dh-Befehl bei den Eintr\u00e4gen build-arch und % gesetzt:<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-12.png\"><img loading=\"lazy\" decoding=\"async\" width=\"495\" height=\"51\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-12.png\" border=\"0\"><\/a><\/p>\n<p>In der <a href=\"https:\/\/dyn.manpages.debian.org\/buster\/debhelper\/dh_install.1.en.html\">dh_install Dokumentation<\/a>k\u00f6nnen wir ablesen, dass dieser Parameter konfiguriert, in welchem Quellverzeichnis nach Dateien f\u00fcr die Installation gesucht werden soll.<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-13.png\"><img loading=\"lazy\" decoding=\"async\" width=\"514\" height=\"117\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-13.png\" border=\"0\"><\/a><\/p>\n<p>Da dies in meinem <strong>debian\/regeln<\/strong> dh_install hat in debian\/picockpit-client-0.18.5 und debian\/tmp gesucht - aber nicht im obersten Verzeichnis.<\/p>\n<p>Die L\u00f6sung ist einfach:<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-14.png\"><img loading=\"lazy\" decoding=\"async\" width=\"443\" height=\"53\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-14.png\" border=\"0\"><\/a><\/p>\n<blockquote>\n<p>dh $@ $(DH_VENV_ARGS) -sourcedir .<\/p>\n<\/blockquote>\n<p>Ich \u00fcbergebe einfach \".\" als Verzeichnisname an -sourcedir <\/p>\n<p>Bitte beachten Sie, dass die \u00dcbergabe von zwei sourcedir-Eintr\u00e4gen nicht wie erwartet funktionieren wird:<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-15.png\"><img loading=\"lazy\" decoding=\"async\" width=\"615\" height=\"42\" title=\"Bild\" style=\"margin: 0px; display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-15.png\" border=\"0\"><\/a><\/p>\n<p>in diesem Fall wird der erste Eintrag \u00fcberschrieben:<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-16.png\"><img loading=\"lazy\" decoding=\"async\" width=\"607\" height=\"59\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-16.png\" border=\"0\"><\/a><\/p>\n<p>Es wird also nur \".\" gepr\u00fcft, nicht aber das in $(SDIST_DIR) \u00fcbergebene Verzeichnis.<\/p>\n<h2>usw. ist besonders<\/h2>\n<p>dh_install behandelt die in etc zu installierenden Dateien als sogenannte <strong>conffiles<\/strong>. <\/p>\n<p>Dies wird automatisch festgelegt, Sie m\u00fcssen daf\u00fcr keine zus\u00e4tzliche Konfiguration vornehmen (f\u00fcgen Sie die Konfigurationsdatei einfach als Zeile in Ihre .install-Datei ein).<\/p>\n<p>Um es noch einmal zu sagen: Wenn Sie debhelper f\u00fcr Ihr Paket verwenden, tun Sie <strong>nicht <\/strong>m\u00fcssen die <strong>conffiles <\/strong>Datei im Debian-Verzeichnis manuell zu erstellen. debhelper wird dies f\u00fcr Sie tun.<\/p>\n<p>dpkg verwaltet diese Konfigurationsdateien und stellt sicher, dass die Benutzerkonfiguration zwischen Paketaktualisierungen und beim einfachen Entfernen von Paketen gespeichert wird.<\/p>\n<p>Lesen Sie diesen wunderbaren \u00dcberblick \u00fcber <a href=\"https:\/\/raphaelhertzog.com\/2010\/09\/21\/debian-conffile-configuration-file-managed-by-dpkg\/\">die Bedeutung der Konfessionen f\u00fcr die Nutzer von Raphael Hertzog<\/a>.<\/p>\n<p>Nehmen wir an, ich habe mein Paket installiert (mit einer fiktiven \/etc\/dinosaur\/dinosaur.cfg ). <\/p>\n<p>Ich habe dann einen zus\u00e4tzlichen Eintrag \"New Dino adventures\" in \/etc\/dinosaur\/dinosaur.cfg hinzugef\u00fcgt<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-17.png\"><img loading=\"lazy\" decoding=\"async\" width=\"697\" height=\"68\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-17.png\" border=\"0\"><\/a><\/p>\n<p>Wenn ich das Paket einfach entferne:<\/p>\n<blockquote>\n<p>apt-get remove picockpit-client<\/p>\n<\/blockquote>\n<p>Dann wird das Paket entfernt, aber die Konfigurationsdatei bleibt zur\u00fcck:<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-18.png\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"362\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-18.png\" border=\"0\"><\/a><\/p>\n<p>Um auch die ge\u00e4nderte Konfigurationsdatei loszuwerden, m\u00fcssen wir das Paket bereinigen:<\/p>\n<blockquote>\n<p>apt-get purge picockpit-client<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-19.png\"><img loading=\"lazy\" decoding=\"async\" width=\"721\" height=\"279\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-19.png\" border=\"0\"><\/a><\/p>\n<p>Es wird Sie dar\u00fcber informieren, was es gerade tut: \"Bereinigung der Konfigurationsdateien f\u00fcr picockpit-client (0.18.5) ...\"<\/p>\n<p>Hinweis: Sie m\u00fcssen die Konfigurationsdatei nicht \u00e4ndern, damit sie erhalten bleibt, wenn Sie das Paket entfernen. Eine unver\u00e4nderte Datei bleibt ebenfalls erhalten.<\/p>\n<p>OK, nun nehmen wir an, Sie haben die Datei ge\u00e4ndert und wollen das Paket aktualisieren oder neu installieren:<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-20.png\"><img loading=\"lazy\" decoding=\"async\" width=\"623\" height=\"94\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-20.png\" border=\"0\"><\/a><\/p>\n<p>In diesem Fall bleibt Ihre ge\u00e4nderte Version erhalten (oder Sie werden dazu aufgefordert):<\/p>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-21.png\"><img loading=\"lazy\" decoding=\"async\" width=\"634\" height=\"293\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-21.png\" border=\"0\"><\/a><\/p>\n<p>Die Versionen der Konfigurationsdateien und die Version, auf der Ihre \u00c4nderungen basieren, ergeben sich aus den MD5-Summen.<\/p>\n<p>Sie k\u00f6nnen diese md5-Summen \u00fcberpr\u00fcfen, indem Sie:<\/p>\n<blockquote>\n<p>dpkg -status picockpit-client<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image-22.png\"><img loading=\"lazy\" decoding=\"async\" width=\"784\" height=\"420\" title=\"Bild\" style=\"display: inline; background-image: none;\" alt=\"Bild\" src=\"https:\/\/pi3g.com\/wp-content\/uploads\/2020\/04\/image_thumb-22.png\" border=\"0\"><\/a><\/p>\n<p>Wie Sie sehen k\u00f6nnen, wird im Abschnitt Conffiles die Datei \/etc\/dinosaur\/dinosaur.cfg mit ihrer urspr\u00fcnglichen MD5-Summe angezeigt.<\/p>\n<p>dpkg kann die MD5-Summe zwischen Upgrades des Pakets vergleichen und feststellen, ob sich die Version des Betreuers \u00e4ndert.<\/p>\n<p>Falls Sie die urspr\u00fcngliche Konfigurationsdatei (als Systembenutzer) nicht \u00e4ndern, wird die neue Version des Maintainers installiert.<\/p>\n<p><strong>Wenn beide ihre Dateien ge\u00e4ndert haben, werden Sie aufgefordert, eine Auswahl zu treffen. <\/strong><\/p>\n<p><\/p>\n<h1>Referenzen<\/h1>\n<ul>\n<li><a href=\"https:\/\/dyn.manpages.debian.org\/buster\/debhelper\/debhelper.7.en.html\">debhelper<\/a> manpage (einschlie\u00dflich einer Liste der Debhelper-Befehle dh_xx)<\/li>\n<li><a href=\"https:\/\/raphaelhertzog.com\/2010\/09\/21\/debian-conffile-configuration-file-managed-by-dpkg\/\">Raphael Hertzogs Informationen \u00fcber Konfesseln<\/a><\/li>\n<li><a href=\"https:\/\/www.debian.org\/doc\/manuals\/maint-guide\/dother.en.html\">https:\/\/www.debian.org\/doc\/manuals\/maint-guide\/dother.en.html<\/a><\/li>\n<li><a href=\"https:\/\/www.debian.org\/doc\/manuals\/packaging-tutorial\/packaging-tutorial.en.pdf\">https:\/\/www.debian.org\/doc\/manuals\/packaging-tutorial\/packaging-tutorial.en.pdf<\/a><\/li>\n<li><a href=\"https:\/\/vincent.bernat.ch\/en\/blog\/2019-pragmatic-debian-packaging\">https:\/\/vincent.bernat.ch\/en\/blog\/2019-pragmatic-debian-packaging<\/a><\/li>\n<li><a href=\"https:\/\/manpages.debian.org\/buster\/debhelper\/dh_installdeb.1.en.html\">https:\/\/manpages.debian.org\/buster\/debhelper\/dh_installdeb.1.en.html<\/a><\/li>\n<\/ul>\n<p>F\u00fcr dh_virtualenv:<\/p>\n<ul>\n<li><a href=\"https:\/\/pi3g.com\/de\/2019\/04\/19\/packaging-python-projects-for-debian-raspbian-with-dh-virtualenv\/\">https:\/\/pi3g.com\/2019\/04\/19\/packaging-python-projects-for-debian-raspbian-with-dh-virtualenv\/<\/a><\/li>\n<li><a href=\"https:\/\/dh-virtualenv.readthedocs.io\/en\/1.1\/\">https:\/\/dh-virtualenv.readthedocs.io\/en\/1.1\/<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/1and1\/debianized-jupyterhub\">https:\/\/github.com\/1and1\/debianized-jupyterhub<\/a> (ein Beispiel, das auch eine .install-Datei enth\u00e4lt)<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Ich arbeite derzeit an einer aktualisierten picockpit-client Version, die zus\u00e4tzliche Konfigurationsdateien in \/etc\/picockpit-client f\u00fcr die einzelnen Module (PiDoctor &amp; PiControl) hinzuf\u00fcgen soll. picockpit-client ist ein Raspbian-Paket f\u00fcr picockpit.com, das die Web-Plattform mit Ihrem individuellen Raspberry Pi verbindet. Da Raspbian auf Debian basiert, gelten die folgenden Informationen f\u00fcr die allgemeine Paketierung f\u00fcr...<\/p>","protected":false},"author":830,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[402],"tags":[767,771,766,765,553,764,427,689,768,763,574,769,770],"class_list":["post-22208","post","type-post","status-publish","format-standard","hentry","category-development","tag-install-file","tag-aborting","tag-conffile","tag-conffiles","tag-deb","tag-debhelper","tag-debian","tag-debian-packaging","tag-dh_install","tag-dh_virtualenv","tag-dh-virtualenv","tag-etc","tag-missing-files"],"_links":{"self":[{"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/posts\/22208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/users\/830"}],"replies":[{"embeddable":true,"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/comments?post=22208"}],"version-history":[{"count":1,"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/posts\/22208\/revisions"}],"predecessor-version":[{"id":22209,"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/posts\/22208\/revisions\/22209"}],"wp:attachment":[{"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/media?parent=22208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/categories?post=22208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/tags?post=22208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}