Debian: mencegah file tertentu dari ditimpa selama peningkatan paket

9

Saya mengerti bahwa sebuah paket memiliki dua komponen: configdan datafile. Selama peningkatan paket (yaitu peningkatan keamanan) datafile dapat ditimpa, tetapi configfile harus selalu tetap sama. Juga configfile biasanya masuk /etcdan datamasuk /usr. Namun, kadang-kadang perbedaannya kabur.

Dalam kasus saya, saya telah memodifikasi file ikon untuk Icedove(Thunderbird):

/usr/share/applications/icedove.desktop

Sekarang, setiap kali ada Icedovepembaruan (Thunderbird), perubahan saya akan ditimpa dengan file default (bahkan jika itu tidak berubah di antara pembaruan).

Apakah ada cara untuk mencegah file khusus ini ditimpa?

Mengaturnya agar tidak berubah dengan chattr +i icedove.desktopbukan ide yang baik, karena menghasilkan kesalahan selama peningkatan paket.

Martin Vegter
sumber
2
@don_crissti Secara teknis lokasi yang benar adalah $XDG_DATA_HOME/applications/icedove.desktop, meskipun ini biasanya default ke jalur pencarian yang Anda sebutkan. The XDG Basis Direktori Keterangan juga menyediakan jalur pencarian di $XDG_DATA_DIRSsistem menimpa lebar. Penjelasan lebih rinci tentang bagaimana Direktori Pangkalan XDG berlaku dalam kasus ini ada dalam jawaban saya .
Thomas Nyman

Jawaban:

7

Sementara jawaban wurtel menjawab pertanyaan itu sebagai ungkapan, mengingat latar belakang dalam pertanyaan itu mengungkapkan bahwa ini adalah kasus lain dari masalah XY .

Dalam kasus khusus ini, /usr/share/applications/icedove.desktoptidak boleh diubah di tempat pertama, tetapi file konfigurasi lokal yang mengesampingkan konfigurasi default harus ditempatkan di lokasi yang sesuai. Sistem yang sesuai dengan freedesktop.org sesuai dengan Spesifikasi Direktori Pangkalan XDG , yang tujuannya adalah persis untuk menghilangkan kebutuhan untuk memodifikasi file konfigurasi yang ditimpa selama peningkatan paket.

Jika konfigurasi ini dimaksudkan untuk menjadi sistem-lebar, lokal icedove.desktopharus ditempatkan dalam applicationssubdirektori untuk jalur pencarian sebelumnya /usr/sharedi $XDG_DATA_DIRS. Nilai variabel lingkungan ini menjadi default /usr/local/share/:/usr/share/, tetapi nilai aktual bervariasi di antara distribusi. Karena dalam hal ini konfigurasi dimaksudkan untuk menjadi lokal lokasi yang benar /usr/local/share/applications/icedove.desktop, meskipun perlu diingat bahwa mereka mungkin menimpa distribusi spesifik di tempat yang mungkin lebih disukai daripada konfigurasi di bawah usr/local/share.

Di sisi lain, jika konfigurasi diindentifikasi khusus pengguna, lokal icedove.desktopharus ditempatkan applicationsdi bawah di lokasi yang ditunjukkan oleh $XDG_DATA_HOME. Ini biasanya default $HOME/.local/share, yaitu lokasi untuk file konfigurasi seharusnya $HOME/.local/share/applications/icedove.desktop.

Thomas Nyman
sumber
10

Anda menginginkan dpkg-divertutilitas.

dpkg-divert --divert /usr/share/applications/icedove.desktop.packaged --rename /usr/share/applications/icedove.desktop
Wurtel
sumber
1
Ini mungkin membantu orang lain: "Jangan mencoba mengalihkan file yang sangat penting untuk operasi sistem - ketika menggunakan dpkg-alihkan ada waktu, setelah dialihkan tetapi sebelum dpkg menginstal versi baru, ketika file melakukan tidak ada. "dari debian.org/doc/debian-policy/ap-pkg-diversions.html
2rs2ts