Parando o dpkg de remover o symlink no upgrade do pacote

3

Eu tenho um pacote debian que instala um arquivo em /usr/local/java/jre/lib/ext , onde /usr/local/java é um symlink para onde o jvm está realmente instalado, neste caso /usr/lib/jvm/java-6-sun .

A nova versão deste pacote instala o jar em outro lugar. O problema é que a instalação da nova versão faz com que o dpkg tente se arrumar, terminando apagando o link simbólico /usr/local/java .

Este é um estado profundamente indesejável para estar, mesmo temporariamente.

Eu não consegui encontrar o sinalizador para o dpkg que irá persuadi-lo a deixar o symlink no lugar, e não parece ser possível definir o bit imutável em links simbólicos.

Aqui estão as mudanças na configuração do empacotamento debian:

diff --git a/debian/dirs b/debian/dirs
--- a/debian/dirs
+++ b/debian/dirs
@@ -1 +1 @@
-usr/local/java/jre/lib/ext
+usr/share/java
diff --git a/debian/rules b/debian/rules
--- a/debian/rules
+++ b/debian/rules
@@ -30,7 +30,7 @@ install: build

        # Add here commands to install the package into debian/tmp.
        # $(MAKE) pure_install
-       cp thejar.jar $(TMP)/usr/local/java/jre/lib/ext
+       cp thejar.jar $(TMP)/usr/share/java

 # Build architecture-independent files here.
 binary-indep: build install

Eu imagino que deixar usr/local/java/jre/lib/ext em dirs teria o efeito desejado, mas isso está apenas atrasando o problema - Prefiro que esse pacote não seja responsável por manter o link simbólico.

Então: quais são minhas opções?

    
por ryanm 13.08.2012 / 11:06

2 respostas

1

Links simbólicos são apenas arquivos que o pacote instala e, portanto, o comportamento normal se aplica. Estas são as opções que posso imaginar:

  • Marque o link simbólico como um arquivo de configuração. Eu não sei se isso é suportado, mas se for, o link simbólico só deve ser removido se o pacote for removido.
  • Não instale o link simbólico como um arquivo, mas crie-o no script postinst.
  • Basta criar o symlink manualmente e não como parte do pacote.

Note que, seja lá o que o link simbólico apontar, ele será removido quando a versão antiga for desinstalada, então não vejo como isso pode melhorar.

    
por 14.08.2012 / 08:05
0

Se você tem dpkg > 1.15.8, tente preencher /etc/dpkg/dpkg.cfg.d/excludes com:

path-exclude=/usr/local/java/jre/lib/ext

Fonte: Economize espaço em disco excluindo inúteis arquivos com o dpkg | Raphaël Hertzog .

Para usuários do Arch, use NoExtract = em /etc/pacman.conf e exclua a barra inicial de seu caminho. Veja ArchWiki ou man pacman.conf .

    
por 17.05.2015 / 23:30