Debian: Verhindert, dass bestimmte Dateien während des Paket-Upgrades überschrieben werden

9

Ich verstehe, dass ein Paket zwei Komponenten hat: configund dataDateien. Während des Paket-Upgrades (dh des Sicherheits-Upgrades) können dataDateien überschrieben werden, die configDateien sollten jedoch immer gleich bleiben. Auch configDateien sind in der Regel in /etcund datain /usr. Manchmal ist die Unterscheidung jedoch unscharf.

In meinem Fall habe ich die Symboldatei für Icedove(Thunderbird) geändert :

/usr/share/applications/icedove.desktop

Jedes Mal, wenn es ein Icedove(Thunderbird-) Update gibt, werden meine Änderungen mit der Standarddatei überschrieben (auch wenn sie sich zwischen den Updates nicht geändert haben).

Gibt es eine Möglichkeit zu verhindern, dass diese bestimmte Datei überschrieben wird?

Es chattr +i icedove.desktopist keine gute Idee, es auf unveränderlich mit zu setzen , da es beim Paket-Upgrade zu Fehlern führt.

Martin Vegter
quelle
2
@don_crissti Technisch gesehen ist der richtige Ort $XDG_DATA_HOME/applications/icedove.desktop, obwohl dies normalerweise der von Ihnen erwähnte Suchpfad ist. Die XDG-Basisverzeichnisspezifikation bietet auch einen Suchpfad $XDG_DATA_DIRSfür systemweite Überschreibungen. Eine ausführlichere Erläuterung der Anwendung von XDG-Basisverzeichnissen in diesem Fall finden Sie in meiner Antwort .
Thomas Nyman

Antworten:

7

Während Wurtels Antwort die Frage wie formuliert beantwortet, zeigt der Hintergrund der Frage, dass dies ein weiterer Fall eines XY-Problems ist .

In diesem speziellen Fall /usr/share/applications/icedove.desktopsollte nicht an erster Stelle geändert werden, sondern eine lokale Konfigurationsdatei, die die Standardkonfiguration überschreibt, sollte an einem geeigneten Ort abgelegt werden. Systeme, die freedesktop.org-kompatibel sind, entsprechen der XDG-Basisverzeichnisspezifikation , deren Zweck genau darin besteht, die Notwendigkeit zu beseitigen, Konfigurationsdateien zu ändern, die bei Paketaktualisierungen überschrieben werden.

Wenn die Konfiguration seines systemweite bestimmt ist, das lokal icedove.desktopsollte im platziert wird applicationsUnterverzeichnis für einen Suchpfad vorhergehenden /usr/sharein $XDG_DATA_DIRS. Der Wert dieser Umgebungsvariablen ist standardmäßig /usr/local/share/:/usr/share/, der tatsächliche Wert variiert jedoch zwischen den Verteilungen. Da in diesem Fall die Konfiguration lokal sein soll, ist der richtige Speicherort zu /usr/local/share/applications/icedove.desktopbeachten. Beachten Sie jedoch, dass es sich möglicherweise um verteilungsspezifische Überschreibungen handelt, die möglicherweise Vorrang vor Konfigurationen unter haben usr/local/share.

Auf der anderen Seite, wenn die Konfiguration eingekerbt ist die lokale Benutzer spezifisch sein, icedove.desktopunter platziert werden soll applicationsin der Lage , die durch $XDG_DATA_HOME. Dies ist normalerweise der Standardwert $HOME/.local/share, dh der Speicherort für die Konfigurationsdatei sollte sein $HOME/.local/share/applications/icedove.desktop.

Thomas Nyman
quelle
10

Sie möchten das dpkg-divertDienstprogramm.

dpkg-divert --divert /usr/share/applications/icedove.desktop.packaged --rename /usr/share/applications/icedove.desktop
wurtel
quelle
1
Dies könnte anderen helfen: "Versuchen Sie nicht, eine Datei umzuleiten, die für den Betrieb des Systems von entscheidender Bedeutung ist. Wenn Sie dpkg-divert verwenden, gibt es eine Zeit nach dem Umleiten, aber bevor dpkg die neue Version installiert hat, wenn die Datei dies tut nicht existieren. "von debian.org/doc/debian-policy/ap-pkg-diversions.html
2rs2ts