Debian: impede que arquivos específicos sejam substituídos durante a atualização do pacote

9

Eu entendo que um pacote tem dois componentes: confige dataarquivos. Durante a atualização do pacote (ou seja, atualização de segurança), os dataarquivos podem ser substituídos, mas os configarquivos devem sempre permanecer os mesmos. Também os configarquivos geralmente estão dentro /etce datadentro /usr. Às vezes, porém, a distinção é obscura.

No meu caso, modifiquei o arquivo de ícone para Icedove(Thunderbird):

/usr/share/applications/icedove.desktop

Agora, toda vez que há uma Icedoveatualização (Thunderbird), minhas alterações são substituídas pelo arquivo padrão (mesmo que não tenha sido alterado entre as atualizações).

Existe alguma maneira de impedir que esse arquivo específico seja substituído?

Configurá-lo como imutável chattr +i icedove.desktopnão é uma boa ideia, pois gera erro durante a atualização do pacote.

Martin Vegter
fonte
2
@don_crissti Tecnicamente, o local correto é $XDG_DATA_HOME/applications/icedove.desktop, embora isso geralmente seja padrão para o caminho de pesquisa que você mencionou. A Especificação de diretório base do XDG também fornece um caminho de pesquisa $XDG_DATA_DIRSpara substituições em todo o sistema. Uma explicação mais detalhada de como os Diretórios base do XDG se aplicam neste caso está na minha resposta .
Thomas Nyman

Respostas:

7

Enquanto a resposta de wurtel responde à pergunta como formulada, considerando o contexto da pergunta revela que este é mais um caso de um problema XY .

Nesse caso específico, /usr/share/applications/icedove.desktopnão deve ser modificado em primeiro lugar, mas um arquivo de configuração local que substitua a configuração padrão deve ser colocado em um local adequado. Os sistemas compatíveis com freedesktop.org estão em conformidade com a Especificação de diretório base do XDG , cujo objetivo é precisamente eliminar a necessidade de modificar arquivos de configurações que são substituídos durante as atualizações de pacotes.

Se a configuração se destina a ser em todo o sistema, o local, icedove.desktopdeve ser colocada no applicationssubdiretório para um caminho de pesquisa anterior /usr/shareno $XDG_DATA_DIRS. O valor dessa variável de ambiente é padronizado como /usr/local/share/:/usr/share/, mas o valor real varia entre as distribuições. Como, nesse caso, a configuração deve ser local, o local correto é /usr/local/share/applications/icedove.desktop, embora lembre-se de que podem haver substituições específicas de distribuição que podem ter preferência sobre as configurações abaixo usr/local/share.

Por outro lado, se a configuração for recuada para ser específica do usuário, o local icedove.desktopdeve ser colocado applicationsno local indicado por $XDG_DATA_HOME. Normalmente, o padrão $HOME/.local/shareé, ou seja, o local do arquivo de configuração $HOME/.local/share/applications/icedove.desktop.

Thomas Nyman
fonte
10

Você quer o dpkg-divertutilitário.

dpkg-divert --divert /usr/share/applications/icedove.desktop.packaged --rename /usr/share/applications/icedove.desktop
Wurtel
fonte
1
Isso pode ajudar outras pessoas: "Não tente desviar um arquivo que é de vital importância para a operação do sistema - ao usar o dpkg-diver, há um tempo, depois que ele foi desviado, mas antes do dpkg instalar a nova versão, quando o arquivo é instalado. não existe "a partir. debian.org/doc/debian-policy/ap-pkg-diversions.html
2rs2ts